power_play/src/proto/proto_gpu.g

59 lines
1.5 KiB
HLSL

////////////////////////////////////////////////////////////
//~ Test shader
ComputeShader(PT_TestCS)
{
PT_SharedFrame frame = G_Deref(PT_ShaderReg_Frame, StructuredBuffer<PT_SharedFrame>)[0];
RWTexture2D<Vec4> target_tex = G_Deref(frame.compute_target, RWTexture2D<Vec4>);
Vec2U32 target_tex_size = G_Count2D(target_tex);
Vec2I32 id = SV_DispatchThreadID;
if (all(id < G_Count2D(target_tex)))
{
target_tex[id] = Vec4(0, 1, 0, 1);
}
}
////////////////////////////////////////////////////////////
//~ Blit shader
//////////////////////////////
//- Vertex shader
VertexShader(PT_BlitVS, PT_BlitPSInput)
{
Vec2 uv = RectUvFromIdx(SV_VertexID);
PT_BlitPSInput result;
result.sv_position = Vec4(NdcFromUv(uv).xy, 0, 1);
result.src_uv = uv;
return result;
}
//////////////////////////////
//- Pixel shader
PixelShader(PT_BlitPS, PT_BlitPSOutput, PT_BlitPSInput input)
{
PT_SharedFrame frame = G_Deref(PT_ShaderReg_Frame, StructuredBuffer<PT_SharedFrame>)[0];
SamplerState sampler = G_Deref(frame.sampler, SamplerState);
Texture2D<Vec4> src = G_Deref(frame.compute_target, Texture2D<Vec4>);
Texture3D<u32> noise = G_Deref(frame.noise_tex, Texture3D<u32>);
Vec2 uv = input.src_uv;
Vec4 tex_col = src.Sample(sampler, uv);
Vec3U32 noise_coord = 0;
noise_coord.x = uv.x * 128.0;
noise_coord.y = uv.y * 128.0;
noise_coord.z = 0;
u32 noise_val = noise[noise_coord];
Vec4 result = tex_col;
result.r = Norm16(noise_val);
PT_BlitPSOutput output;
output.sv_target0 = result;
return output;
}