From 22ae3726e62adf3fe35aa600da489fb5f19c644a Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Fri, 28 Mar 2025 17:43:10 +0100 Subject: [PATCH] Slang shaders for push constants sample --- .../pushconstants/pushconstants.frag.slang | 16 ++++++++ .../pushconstants/pushconstants.vert.slang | 38 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 shaders/slang/pushconstants/pushconstants.frag.slang create mode 100644 shaders/slang/pushconstants/pushconstants.vert.slang diff --git a/shaders/slang/pushconstants/pushconstants.frag.slang b/shaders/slang/pushconstants/pushconstants.frag.slang new file mode 100644 index 00000000..a2646791 --- /dev/null +++ b/shaders/slang/pushconstants/pushconstants.frag.slang @@ -0,0 +1,16 @@ +/* Copyright (c) 2025, Sascha Willems + * + * SPDX-License-Identifier: MIT + * + */ + +struct VSOutput +{ + float3 Color; +}; + +[shader("fragment")] +float4 main(VSOutput input) : SV_TARGET +{ + return float4(input.Color, 1.0); +} \ No newline at end of file diff --git a/shaders/slang/pushconstants/pushconstants.vert.slang b/shaders/slang/pushconstants/pushconstants.vert.slang new file mode 100644 index 00000000..538ea288 --- /dev/null +++ b/shaders/slang/pushconstants/pushconstants.vert.slang @@ -0,0 +1,38 @@ +/* Copyright (c) 2025, Sascha Willems + * + * SPDX-License-Identifier: MIT + * + */ + +struct VSInput +{ + float3 Pos : POSITION0; + float3 Normal : NORMAL0; + float3 Color : COLOR0; +}; + +struct UBO +{ + float4x4 projection; + float4x4 model; + float4x4 view; +}; +ConstantBuffer ubo; + +struct VSOutput +{ + float4 Pos : SV_POSITION; + float3 Color; +}; + +// Uniform entry-point parameters are automatically bound to push constants by slang +[shader("vertex")] +VSOutput main(VSInput input, uniform float4 pushColor, uniform float4 pushPosition) +{ + VSOutput output; + output.Color = input.Color * pushColor.rgb; + float3 locPos = float3(mul(ubo.model, float4(input.Pos.xyz, 1.0)).xyz); + float3 worldPos = locPos + pushPosition.xyz; + output.Pos = mul(ubo.projection, mul(ubo.view, float4(worldPos.xyz, 1.0))); + return output; +} \ No newline at end of file