[layout(std140)] struct ViewerData { projectionMatrix: mat4, invProjectionMatrix: mat4, viewMatrix: mat4, invViewMatrix: mat4, viewProjMatrix: mat4, invViewProjMatrix: mat4, renderTargetSize: vec2, invRenderTargetSize: vec2, eyePosition: vec3 } external { [binding(0)] viewerData: uniform, [binding(1)] skybox: samplerCube } struct VertOut { [location(0)] uvw: vec3, [builtin(position)] position: vec4 } struct FragOut { [location(0)] color: vec4, [builtin(fragdepth)] depth: f32 } [entry(frag)] [depth_write(greater)] fn main(input: VertOut) -> FragOut { let output: FragOut; output.color = skybox.Sample(input.uvw); output.depth = 1.0; return output; } struct VertIn { [location(0)] position: vec3 } [entry(vert)] fn main(input: VertIn) -> VertOut { // Set translation part to zero let rotationMat = viewerData.viewMatrix; // rotationMat[3].xyz = vec3(0.0, 0.0, 0.0); // Requires SPIRV generator to handle swizzle for store expressions rotationMat[3][0] = 0.0; rotationMat[3][1] = 0.0; rotationMat[3][2] = 0.0; let output: VertOut; output.position = viewerData.projectionMatrix * rotationMat * vec4(input.position, 1.0); output.uvw = input.position.xyz; return output; }