import bindless; struct VertexData { float4 position; float2 texCoord0; float2 _pad0; }; struct CameraData { float4x4 model; float4x4 view; float4x4 projection; }; struct PCB { VertexData* vertexBuffer; CameraData* cameraBuffer; Sampler2D.Handle 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->model), pcb.cameraBuffer->view), pcb.cameraBuffer->projection); output.texCoord0 = vd.texCoord0; return output; } [shader("fragment")] func fsmain(VSOut input) -> FSOut { FSOut outp; outp.Color = float4(pcb.texture.Sample(input.texCoord0).rgb, 1.0); return outp; }