//////////////////////////////////////////////////////////// //~ Test shader ComputeShader(PT_TestCS) { PT_SharedFrame frame = G_Deref(PT_ShaderReg_Frame, StructuredBuffer)[0]; RWTexture2D target_tex = G_Deref(frame.compute_target, RWTexture2D); 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)[0]; SamplerState sampler = G_Deref(frame.sampler, SamplerState); Texture2D src = G_Deref(frame.compute_target, Texture2D); Texture3D noise = G_Deref(frame.noise_tex, Texture3D); 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; }