使用wgpu-rs,我正在尝试将一个3x3的cg计量矩阵转换成一个着色器(使用编译)。但是,在着色器中生成的mat3有错误的数据。当我将mat3和Matrix3替换为mat4和Matrix4时,一切正常,矩阵具有正确的数据。
顶点着色器:
layout(set=0, binding=0) uniform Uniforms {
mat3 camera_transform;
};渲染循环:
let mut encoder = self.device.create_command_encoder(
&wgpu::CommandEncoderDescriptor {
label: Some("update encoder"),
},
);
let staging_buffer = self.device.create_buffer_with_data(
bytemuck::cast_slice(&[self.uniforms]),
wgpu::BufferUsage::COPY_SRC,
);
encoder.copy_buffer_to_buffer(&staging_buffer, 0, &self.uniform_buffer, 0, std::mem::size_of::<Uniforms>() as wgpu::BufferAddress);
self.queue.submit(&[encoder.finish()]);
// ...
render_pass.set_bind_group(0, &self.uniform_bind_group, &[]);制服:
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Uniforms {
pub camera_transform: Matrix3::<f32>,
}
unsafe impl bytemuck::Pod for Uniforms {}
unsafe impl bytemuck::Zeroable for Uniforms {}
impl Uniforms {
pub fn new() -> Self {
Self {
camera_transform: Matrix3::identity(),
}
}
}发布于 2020-05-13 16:24:34
这是一个公开发行 in wgpu-rs。实际上,最简单的解决方法可能是将mat3变成一个mat4,直到它被解析为止。
问题似乎是在生成SPIR-V时出现了对齐错误。实际调整是:
在第4种情况下,拥有一个mat4应该不会在最后留下额外的填充,也不会给出任何可能出现的错误对齐问题。
https://stackoverflow.com/questions/61768628
复制相似问题