74 lines
1.7 KiB
Plaintext
74 lines
1.7 KiB
Plaintext
////////////////////////////////////////////////////////////
|
|
//~ Test shader
|
|
|
|
Struct(TestStruct)
|
|
{
|
|
i32 i;
|
|
};
|
|
|
|
ComputeShader2D(PT_TestCS, 8, 8)
|
|
{
|
|
StructuredBuffer<TestStruct> sb = G_Dereference<TestStruct>(PT_ShaderConst_TestBuff);
|
|
|
|
RWTexture2D<Vec4> target_tex = G_Dereference<Vec4>(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<Vec4> tex = G_Dereference<Vec4>(PT_ShaderConst_BlitSrc);
|
|
Texture3D<u32> noise = G_Dereference<u32>(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;
|
|
}
|