我正在尝试加载一个着色器到一个amd视频卡。在所有的缓冲区都被创建后,我尝试创建一个新的计算管道。当我开始调试它打印消息时,我发现"Finished Creating the compute pipeline"从来没有被打印出来。当我用'cargo run--release'运行它时,它打印出:"创建管道与着色器",但几秒钟后,它冻结了我的整个电脑,我不得不关闭它,并再次打开...
我的Vulkano版本是:0.32.1;我的vulkano-shaders版本是:0.32.1;我的显卡是:AMD RX570 4GB
Vulkano器械物理特性:
buffer_image_granularity: 64,
compute_units_per_shader_array: Some(
8,
),
conformance_version: Some(
1.2.0,
),
Cargo.toml:
x一个一个一个一个x一个一个二个x
着色器为:
#version 450
#pragma shader_stage(compute)
layout(local_size_x=32, local_size_y=32, local_size_z=16) in;
struct Dimension {
uint rows;
uint columns;
uint channels;
};
layout(set=0, binding=0) buffer Dimensions {
Dimension input_matrix;
Dimension kernel;
Dimension output_matrix;
} dims_buf;
layout(set=0, binding=1) buffer readonly InputMatrix {
float[] input_matrix;
};
layout(set=0, binding=2) buffer readonly Kernel {
float[] kernel;
};
layout(set=0, binding=3) buffer writeonly OutputMatrix {
float[] output_matrix;
};
layout(set=0, binding=4) buffer Options {
ivec2 padding;
uint stride;
} options_buf;
void main() {
const uint raw_row = gl_GlobalInvocationID.x;
const uint raw_column = gl_GlobalInvocationID.y;
const uint raw_channel = gl_GlobalInvocationID.z;
}
我试着用不同的着色器运行类似的程序,效果很好。
1条答案
按热度按时间juzqafwq1#
结果表明,工作组的大小必须小于
因此:本地大小x * 本地大小y * 本地大小z必须小于最大计算工作组调用次数