#version 460 core layout(location = 0) in vec3 inPosition; layout(location = 1) in vec3 inNormal; layout(location = 2) in vec2 inUV; layout(location = 0) out vec3 outFragPos; layout(location = 1) out vec4 outShadowPos; layout(location = 2) out vec3 outNormal; layout(location = 3) out vec2 outUV; layout(set = 0, binding = 0) uniform SceneInfo { mat4 vp, lightSpace; } sceneInfo; layout(push_constant) uniform PushConstants { mat4 m; } pushConstants; const mat4 biasMat = mat4( 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.5, 0.0, 1.0); void main() { gl_Position = sceneInfo.vp * pushConstants.m * vec4(inPosition, 1.0); outFragPos = vec3(pushConstants.m * vec4(inPosition, 1.0)); outShadowPos = (biasMat * sceneInfo.lightSpace) * vec4(inPosition, 1.0); outNormal = mat3(transpose(inverse(pushConstants.m))) * inNormal; outUV = inUV; }