vidya/crates/renderer/shaders/egui.slang
2024-12-31 11:58:09 +01:00

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;
}