import bindless; struct VertexData { float4 position; float2 texCoord0; float2 _pad0; }; struct CameraData { float4x4 model; float4x4 view; float4x4 projection; }; struct PCB { DescriptorHandle> vertexBuffer; DescriptorHandle> cameraBuffer; DescriptorHandle texture; }; [vk::push_constant] uniform PCB pcb; struct VSIn { uint vertexIndex : SV_VertexID; }; struct VSOut { float4 position : SV_POSITION; float2 texCoord0 : TEXCOORD0; }; struct FSOut { float4 Color; }; [shader("vertex")] func vsmain(VSIn input) -> VSOut { VSOut output; VertexData vd = pcb.vertexBuffer[input.vertexIndex]; output.position = mul(mul(mul(float4(vd.position.xyz, 1.0f), pcb.cameraBuffer[0].model), pcb.cameraBuffer[0].view), pcb.cameraBuffer[0].projection); output.texCoord0 = vd.texCoord0; return output; } [shader("fragment")] func fsmain(VSOut input) -> FSOut { FSOut outp; outp.Color = pcb.vertexBuffer[0].position.rgba; outp.Color = float4(pcb.texture.Sample(input.texCoord0).rgb, 1.0); return outp; }