#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;
}