From 332e8fdf2ceead4ba921a9b515fa9178e7a6b9e8 Mon Sep 17 00:00:00 2001 From: jacob Date: Fri, 23 May 2025 21:12:44 -0500 Subject: [PATCH] shader semantic macros --- res/shaders/common.hlsl | 4 +++- res/shaders/grid.hlsl | 36 ++++++++++++++++++------------------ res/shaders/triangle.hlsl | 14 +++++++------- src/gpu_dx11.c | 24 ++++++++++++------------ 4 files changed, 40 insertions(+), 38 deletions(-) diff --git a/res/shaders/common.hlsl b/res/shaders/common.hlsl index 72f64b82..2bee7ef3 100644 --- a/res/shaders/common.hlsl +++ b/res/shaders/common.hlsl @@ -1,5 +1,7 @@ +#define DECL(t, n) t n : n +#define DECL_PS(n) float4 n : SV_POSITION + float4 linear_from_srgb(float4 srgb) { return float4(pow(srgb.rgb, 2.2), srgb.a); } - diff --git a/res/shaders/grid.hlsl b/res/shaders/grid.hlsl index 6ffeb4dc..8400fd0d 100644 --- a/res/shaders/grid.hlsl +++ b/res/shaders/grid.hlsl @@ -1,27 +1,27 @@ #include "res/shaders/common.hlsl" struct vs_input { - float4 pos : POSITION; - float line_thickness : THICKNESS; - float line_spacing : SPACING; - float2 offset : OFFSET; - float4 bg0_srgb : COLOR0; - float4 bg1_srgb : COLOR1; - float4 line_srgb : COLOR2; - float4 x_srgb : COLOR3; - float4 y_srgb : COLOR4; + DECL(float4, pos); + DECL(float, line_thickness); + DECL(float, line_spacing); + DECL(float2, offset); + DECL(float4, bg0_srgb); + DECL(float4, bg1_srgb); + DECL(float4, line_srgb); + DECL(float4, x_srgb); + DECL(float4, y_srgb); }; struct ps_input { - float4 screen_pos : SV_POSITION; - float line_thickness : THICKNESS; - float line_spacing : SPACING; - float2 offset : OFFSET; - float4 bg0_lin : COLOR0; - float4 bg1_lin : COLOR1; - float4 line_lin : COLOR2; - float4 x_lin : COLOR3; - float4 y_lin : COLOR4; + DECL_PS(screen_pos); + DECL(float, line_thickness); + DECL(float, line_spacing); + DECL(float2, offset); + DECL(float4, bg0_lin); + DECL(float4, bg1_lin); + DECL(float4, line_lin); + DECL(float4, x_lin); + DECL(float4, y_lin); }; cbuffer vs_constants : register(b0) diff --git a/res/shaders/triangle.hlsl b/res/shaders/triangle.hlsl index f4fa3236..9241db53 100644 --- a/res/shaders/triangle.hlsl +++ b/res/shaders/triangle.hlsl @@ -11,22 +11,22 @@ cbuffer constants : register(b0) }; struct vs_input { - float4 pos : POSITION; - float2 uv : TEXCOORD; - float4 tint_srgb : COLOR; + DECL(float4, pos); + DECL(float2, uv); + DECL(float4, tint_srgb); }; struct ps_input { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD; - float4 tint_lin : COLOR; + DECL_PS(screen_pos); + DECL(float2, uv); + DECL(float4, tint_lin); }; ps_input vs_main(vs_input input) { ps_input output; - output.pos = mul(projection, float4(input.pos.xy, 0.f, 1.f)); + output.screen_pos = mul(projection, float4(input.pos.xy, 0.f, 1.f)); output.uv = input.uv; output.tint_lin = linear_from_srgb(input.tint_srgb); diff --git a/src/gpu_dx11.c b/src/gpu_dx11.c index 15dac0e9..12a912f0 100644 --- a/src/gpu_dx11.c +++ b/src/gpu_dx11.c @@ -464,9 +464,9 @@ INTERNAL void init_shader_table(void) .name_cstr = "res/shaders/triangle.hlsl", .vertex_size = sizeof(struct triangle_shader_vertex), .input_layout_desc = { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 } + { "pos", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "uv", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "tint_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 } } }; @@ -476,15 +476,15 @@ INTERNAL void init_shader_table(void) .name_cstr = "res/shaders/grid.hlsl", .vertex_size = sizeof(struct grid_shader_vertex), .input_layout_desc = { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "THICKNESS", 0, DXGI_FORMAT_R32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "SPACING", 0, DXGI_FORMAT_R32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "OFFSET", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 4, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 } + { "pos", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "line_thickness", 0, DXGI_FORMAT_R32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "line_spacing", 0, DXGI_FORMAT_R32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "offset", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "bg0_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "bg1_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "line_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "x_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "y_srgb", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 } } };