//////////////////////////////////////////////////////////// //~ Test shader Struct(TestStruct) { i32 i; }; ComputeShader2D(PT_TestCS, 8, 8) { StructuredBuffer sb = G_Dereference(PT_ShaderConst_TestBuff); RWTexture2D target_tex = G_Dereference(PT_ShaderConst_TestTarget); Vec2U32 target_tex_size = countof(target_tex); Vec2I32 id = SV_DispatchThreadID; if (id.x < target_tex_size.x && id.y < target_tex_size.y) { target_tex[id] = Vec4(0, 1, 0, 1); } } //////////////////////////////////////////////////////////// //~ Blit shader Struct(PT_BlitPSInput) { Semantic(Vec4, SV_Position); Semantic(Vec2, src_uv); }; Struct(PT_BlitPSOutput) { Semantic(Vec4, SV_Target0); }; ////////////////////////////// //- Vertex shader VertexShader(PT_BlitVS, PT_BlitPSInput) { Vec2 uv = RectUvFromVertexId(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) { SamplerState sampler = G_Dereference(PT_ShaderConst_BlitSampler); Texture2D tex = G_Dereference(PT_ShaderConst_BlitSrc); Texture3D noise = G_Dereference(PT_ShaderConst_NoiseTex); Vec2 uv = input.src_uv; Vec4 tex_col = tex.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 = (f32)noise_val / (f32)U16Max; PT_BlitPSOutput output; output.SV_Target0 = result; return output; }