descriptor_handle.slang

cross platform rendering playground

src/shaders/conformance/descriptor_handle.slang

1.18 KB
#include "shared.h"

struct OffsetUBO {
    float4 off;
};

struct Push {
    float4 tint;                           // 0
    Texture2D.Handle tex;                  // 16
    SamplerState.Handle samp;              // 24
    StructuredBuffer<float4>.Handle ubo;   // 32
    ConstantBuffer<OffsetUBO>.Handle cbuf; // 40
    ByteAddressBuffer.Handle bbuf;         // 48
    u64 addr;                              // 56,
};

[vk::push_constant]
Push pc;

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

[shader("vertex")]
VSOut vsMain(uint vertexID: SV_VertexID) {
    float2 positions[3] = { float2(-0.5, -0.5), float2(0.5, -0.5), float2(0.0, 0.5) };
    float2 uvs[3] = { float2(0.0, 0.0), float2(1.0, 0.0), float2(0.5, 1.0) };
    VSOut o;

    OffsetUBO cbuf = *pc.cbuf;
    float4 o0 = pc.ubo[0];
    float4 o1 = cbuf.off;
    float4 o2 = pc.bbuf.Load<float4>(0);
    float4 o3 = ((float4 *)pc.addr)[0];
    float4 off = (o0 + o1 + o2 + o3) * 0.25;
    o.pos = float4(positions[vertexID] + off.xy, 0.0, 1.0);
    o.uv = uvs[vertexID];
    return o;
}

[shader("fragment")]
float4 fsMain(VSOut input) : SV_Target {
    return pc.tex.SampleLevel(pc.samp, input.uv, 0.0) * pc.tint;
}