scene.slang

cross platform rendering playground

src/shaders/conformance/scene.slang

949 B
#include "shared.h"

struct ScenePush {
    float4x4 viewProj;        // 0
    Texture2D.Handle tex;     // 64
    SamplerState.Handle samp; // 72
    float4 lightDir;          // 80, xyz = direction TO light, w unused
};

[vk::push_constant]
ScenePush pc;

struct VSIn {
    [[vk::location(0)]]
    float3 pos;
    [[vk::location(1)]]
    float3 normal;
    [[vk::location(2)]]
    float2 uv;
};

struct VSOut {
    float4 pos : SV_Position;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD;
};

[shader("vertex")]
VSOut vsMain(VSIn input) {
    VSOut o;
    o.pos = mul(float4(input.pos, 1.0), pc.viewProj);
    o.normal = input.normal;
    o.uv = input.uv;
    return o;
}

[shader("fragment")]
float4 fsMain(VSOut input) : SV_Target {
    float4 albedo = pc.tex.SampleLevel(pc.samp, input.uv, 0.0);
    float ndl = saturate(dot(normalize(input.normal), normalize(pc.lightDir.xyz)));
    return float4(albedo.rgb * (0.2 + 0.8 * ndl), 1.0);
}