rsx: Fix compiling of mixed-precision shaders

This commit is contained in:
kd-11 2024-01-21 04:11:01 +03:00 committed by kd-11
parent ca7de4bcb1
commit abe5013f1d
2 changed files with 17 additions and 11 deletions

View file

@ -1,5 +1,18 @@
R"(
#ifdef _32_BIT_OUTPUT
// Everything is fp32 on ouput channels
#define _mrt_color_t(expr) expr
#else
// Mixed types. We have fp16 outputs
#define _mrt_color_t f16vec4
f16vec4 round_to_8bit(const in f16vec4 v4)
{
uvec4 raw = uvec4(floor(fma(v4, f16vec4(255.), f16vec4(0.5))));
return f16vec4(raw) / f16vec4(255.);
}
#endif
#if defined(_ENABLE_ROP_OUTPUT_ROUNDING) || defined(_ENABLE_PROGRAMMABLE_BLENDING)
// Default. Used when we're not utilizing native fp16
vec4 round_to_8bit(const in vec4 v4)
@ -7,13 +20,6 @@ vec4 round_to_8bit(const in vec4 v4)
uvec4 raw = uvec4(floor(fma(v4, vec4(255.), vec4(0.5))));
return vec4(raw) / vec4(255.);
}
#if !defined(_32_BIT_OUTPUT)
f16vec4 round_to_8bit(const in f16vec4 v4)
{
uvec4 raw = uvec4(floor(fma(v4, f16vec4(255.), f16vec4(0.5))));
return f16vec4(raw) / f16vec4(255.);
}
#endif
#endif
#ifdef _DISABLE_EARLY_DISCARD

View file

@ -10,10 +10,10 @@ R"(
#ifdef _ENABLE_FRAMEBUFFER_SRGB
if (_test_bit(rop_control, SRGB_FRAMEBUFFER_BIT))
{
col0.rgb = linear_to_srgb(col0).rgb;
col1.rgb = linear_to_srgb(col1).rgb;
col2.rgb = linear_to_srgb(col2).rgb;
col3.rgb = linear_to_srgb(col3).rgb;
col0.rgb = _mrt_color_t(linear_to_srgb(col0)).rgb;
col1.rgb = _mrt_color_t(linear_to_srgb(col1)).rgb;
col2.rgb = _mrt_color_t(linear_to_srgb(col2)).rgb;
col3.rgb = _mrt_color_t(linear_to_srgb(col3)).rgb;
}
#endif