56 lines
1.1 KiB
Plaintext
56 lines
1.1 KiB
Plaintext
struct Fragment {
|
|
float4 color : SV_Target;
|
|
}
|
|
|
|
struct VertexIn {
|
|
[[vk::layout(0)]] float2 pos;
|
|
[[vk::layout(1)]] float2 uv;
|
|
[[vk::layout(2)]] float4 color;
|
|
}
|
|
struct VertexOut {
|
|
[[vk::layout(0)]] float4 color;
|
|
[[vk::layout(1)]] float2 uv;
|
|
[[vk::layout(2), flat]] uint draw_id;
|
|
float4 position : SV_Position;
|
|
}
|
|
|
|
struct PushConstant {
|
|
float2 screen_size;
|
|
}
|
|
|
|
[[vk::push_constant]]
|
|
ConstantBuffer<PushConstant> push_constant;
|
|
|
|
[shader("vertex")]
|
|
VertexOut vertex(VertexIn vertex, uint draw_id: SV_DrawIndex) {
|
|
VertexOut output;
|
|
|
|
output.position = float4(
|
|
2.0 * vertex.pos.x / push_constant.screen_size.x - 1.0,
|
|
2.0 * vertex.pos.y / push_constant.screen_size.y - 1.0,
|
|
0.0,
|
|
1.0,
|
|
);
|
|
output.color = vertex.color;
|
|
output.uv = vertex.uv;
|
|
output.draw_id = draw_id;
|
|
|
|
return output;
|
|
}
|
|
|
|
[[vk::binding(0)]]
|
|
Sampler2D texture[];
|
|
|
|
|
|
[[vk::binding(1)]]
|
|
StructuredBuffer<uint> texture_ids;
|
|
|
|
[shader("fragment")]
|
|
Fragment fragment(VertexOut input) {
|
|
Fragment output;
|
|
|
|
uint texture_id = texture_ids[input.draw_id];
|
|
output.color = input.color * texture[texture_id].Sample(input.uv);
|
|
return output;
|
|
}
|