#include "kernel.h" ConstantBuffer sig : register(b0); //////////////////////////////// //~ Shader types //- Vertex shader in/out Struct(VsInput) { Semantic(u32, SV_InstanceID); Semantic(u32, SV_VertexID); }; Struct(VSOutput) { nointerpolation Semantic(u32, tex_nurid); Semantic(Vec2, uv); Semantic(Vec4, tint_srgb); Semantic(Vec4, SV_Position); }; //- Pixel shader in/out Struct(PsInput) { VSOutput vs; }; Struct(PSOutput) { Semantic(Vec4, SV_Target0); }; //////////////////////////////// //~ Vertex shader K_ENTRY VSOutput vs(VsInput input) { static const Vec2 unit_quad_verts[4] = { Vec2(-0.5f, -0.5f), Vec2(0.5f, -0.5f), Vec2(0.5f, 0.5f), Vec2(-0.5f, 0.5f) }; StructuredBuffer instances = GpuResourceFromUrid(sig.instances_urid); K_UiInstance instance = instances[input.SV_InstanceID]; Vec2 vert = unit_quad_verts[input.SV_VertexID]; Vec2 world_pos = mul(instance.xf, Vec3(vert, 1)).xy; VSOutput output; output.SV_Position = mul(sig.projection, Vec4(world_pos, 0, 1)); output.tex_nurid = instance.tex_nurid; output.uv = instance.uv0 + ((vert + 0.5) * (instance.uv1 - instance.uv0)); output.tint_srgb = Vec4NormFromU32(instance.tint_srgb); return output; } //////////////////////////////// //~ Pixel shader K_ENTRY PSOutput ps(PsInput input) { PSOutput output; Vec4 color = input.vs.tint_srgb; /* Texture */ if (input.vs.tex_nurid < 0xFFFFFFFF) { Texture2D tex = GpuResourceFromNurid(input.vs.tex_nurid); color *= tex.Sample(s_point_clamp, input.vs.uv); } output.SV_Target0 = color; return output; }