Replace separate slang files per stage with single slang files containing multiple stages

This commit is contained in:
Sascha Willems 2025-03-29 10:31:46 +01:00
parent cf3700cb2f
commit c4556374c3
8 changed files with 44 additions and 87 deletions

View file

@ -1,20 +0,0 @@
/* Copyright (c) 2025, Sascha Willems
*
* SPDX-License-Identifier: MIT
*
*/
[[vk::binding(0, 0)]]
Sampler2D fontTexture;
struct VSOutput
{
[[vk::location(0)]]float2 UV : TEXCOORD0;
[[vk::location(1)]]float4 Color : COLOR0;
};
[shader("fragment")]
float4 main(VSOutput input) : SV_TARGET
{
return input.Color * fontTexture.Sample(input.UV);
}

View file

@ -4,18 +4,20 @@
* *
*/ */
Sampler2D fontTexture;
struct VSInput struct VSInput
{ {
[[vk::location(0)]]float2 Pos : POSITION0; float2 Pos : POSITION0;
[[vk::location(1)]]float2 UV : TEXCOORD0; float2 UV;
[[vk::location(2)]]float4 Color : COLOR0; float4 Color;
}; };
struct VSOutput struct VSOutput
{ {
float4 Pos : SV_POSITION; float4 Pos : SV_POSITION;
[[vk::location(0)]]float2 UV : TEXCOORD0; float2 UV;
[[vk::location(1)]]float4 Color : COLOR0; float4 Color;
}; };
struct PushConstants struct PushConstants
@ -24,11 +26,8 @@ struct PushConstants
float2 translate; float2 translate;
}; };
[[vk::push_constant]]
PushConstants pushConstants;
[shader("vertex")] [shader("vertex")]
VSOutput main(VSInput input) VSOutput vertexMain(VSInput input, uniform PushConstants pushConstants)
{ {
VSOutput output; VSOutput output;
output.Pos = float4(input.Pos * pushConstants.scale + pushConstants.translate, 0.0, 1.0); output.Pos = float4(input.Pos * pushConstants.scale + pushConstants.translate, 0.0, 1.0);
@ -36,3 +35,9 @@ VSOutput main(VSInput input)
output.Color = input.Color; output.Color = input.Color;
return output; return output;
} }
[shader("fragment")]
float4 fragmentMain(VSOutput input)
{
return input.Color * fontTexture.Sample(input.UV);
}

View file

@ -1,20 +0,0 @@
/* Copyright (c) 2025, Sascha Willems
*
* SPDX-License-Identifier: MIT
*
*/
[[vk::binding(0, 0)]]
Sampler2D samplerColorMap;
struct VSInput
{
[[vk::location(1)]] float3 Color;
[[vk::location(2)]] float2 UV;
};
[shader("fragment")]
float4 main(VSInput input)
{
return samplerColorMap.Sample(input.UV) * float4(input.Color, 1.0);
}

View file

@ -4,12 +4,14 @@
* *
*/ */
Sampler2D samplerColorMap;
struct VSInput struct VSInput
{ {
[[vk::location(0)]] float3 Pos; float3 Pos;
[[vk::location(1)]] float3 Normal; float3 Normal;
[[vk::location(2)]] float2 UV; float2 UV;
[[vk::location(3)]] float3 Color; float3 Color;
}; };
struct MatrixReference { struct MatrixReference {
@ -22,18 +24,17 @@ struct PushConsts {
// Pointer to the buffer for the data for each model // Pointer to the buffer for the data for each model
ConstBufferPointer<MatrixReference> modelDataReference; ConstBufferPointer<MatrixReference> modelDataReference;
}; };
[[vk::push_constant]] PushConsts pushConstants;
struct VSOutput struct VSOutput
{ {
float4 Pos : SV_POSITION; float4 Pos : SV_POSITION;
[[vk::location(0)]] float3 Normal; float3 Normal;
[[vk::location(1)]] float3 Color; float3 Color;
[[vk::location(2)]] float2 UV; float2 UV;
}; };
[shader("vertex")] [shader("vertex")]
VSOutput main(VSInput input) VSOutput vertexMain(VSInput input, uniform PushConsts pushConstants)
{ {
MatrixReference sceneData = pushConstants.sceneDataReference.get(); MatrixReference sceneData = pushConstants.sceneDataReference.get();
MatrixReference modelData = pushConstants.modelDataReference.get(); MatrixReference modelData = pushConstants.modelDataReference.get();
@ -45,3 +46,9 @@ VSOutput main(VSInput input)
output.Pos = mul(sceneData.matrix, mul(modelData.matrix, float4(input.Pos.xyz, 1.0))); output.Pos = mul(sceneData.matrix, mul(modelData.matrix, float4(input.Pos.xyz, 1.0)));
return output; return output;
} }
[shader("fragment")]
float4 fragmentMain(VSOutput input)
{
return samplerColorMap.Sample(input.UV) * float4(input.Color, 1.0);
}

View file

@ -1,16 +0,0 @@
/* 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);
}

View file

@ -27,7 +27,7 @@ struct VSOutput
// Uniform entry-point parameters are automatically bound to push constants by slang // Uniform entry-point parameters are automatically bound to push constants by slang
[shader("vertex")] [shader("vertex")]
VSOutput main(VSInput input, uniform float4 pushColor, uniform float4 pushPosition) VSOutput vertexMain(VSInput input, uniform float4 pushColor, uniform float4 pushPosition)
{ {
VSOutput output; VSOutput output;
output.Color = input.Color * pushColor.rgb; output.Color = input.Color * pushColor.rgb;
@ -36,3 +36,9 @@ VSOutput main(VSInput input, uniform float4 pushColor, uniform float4 pushPositi
output.Pos = mul(ubo.projection, mul(ubo.view, float4(worldPos.xyz, 1.0))); output.Pos = mul(ubo.projection, mul(ubo.view, float4(worldPos.xyz, 1.0)));
return output; return output;
} }
[shader("fragment")]
float4 fragmentMain(VSOutput input) : SV_TARGET
{
return float4(input.Color, 1.0);
}

View file

@ -1,11 +0,0 @@
/* Copyright (c) 2025, Sascha Willems
*
* SPDX-License-Identifier: MIT
*
*/
[shader("fragment")]
float4 main([[vk::location(0)]] float3 Color)
{
return float4(Color, 1.0);
}

View file

@ -26,10 +26,16 @@ struct VSOutput
}; };
[shader("vertex")] [shader("vertex")]
VSOutput main(VSInput input) VSOutput vertexMain(VSInput input)
{ {
VSOutput output; VSOutput output;
output.Color = input.Color; output.Color = input.Color;
output.Pos = mul(ubo.projectionMatrix, mul(ubo.viewMatrix, mul(ubo.modelMatrix, float4(input.Pos.xyz, 1.0)))); output.Pos = mul(ubo.projectionMatrix, mul(ubo.viewMatrix, mul(ubo.modelMatrix, float4(input.Pos.xyz, 1.0))));
return output; return output;
} }
[shader("fragment")]
float4 fragmentMain(VSOutput input)
{
return float4(input.Color, 1.0);
}