power_play/src/proto/proto_shaders.g
2025-12-10 11:48:42 -06:00

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;
}