diff --git a/rpcs3/Emu/RSX/Common/TextureUtils.h b/rpcs3/Emu/RSX/Common/TextureUtils.h index c32152fecd..551052f0ad 100644 --- a/rpcs3/Emu/RSX/Common/TextureUtils.h +++ b/rpcs3/Emu/RSX/Common/TextureUtils.h @@ -147,6 +147,9 @@ namespace rsx bool valid() const { return format_bits != 0; } u32 format() const { return format_bits & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN); } + bool hw_SNORM_possible() const { return (texel_remap_control & SEXT_MASK) == SEXT_MASK; } + bool hw_SRGB_possible() const { return (texel_remap_control & GAMMA_CTRL_MASK) == GAMMA_RGB_MASK; } + //private: u32 format_bits = 0; u32 features = 0; diff --git a/rpcs3/Emu/RSX/Program/GLSLCommon.h b/rpcs3/Emu/RSX/Program/GLSLCommon.h index ae22464f12..81b5043fc9 100644 --- a/rpcs3/Emu/RSX/Program/GLSLCommon.h +++ b/rpcs3/Emu/RSX/Program/GLSLCommon.h @@ -4,52 +4,12 @@ #include "GLSLTypes.h" #include "ShaderParam.h" +#include "../color_utils.h" struct RSXFragmentProgram; namespace rsx { - // TODO: Move this somewhere else once more compilers are supported other than glsl - enum texture_control_bits - { - GAMMA_A = 0, - GAMMA_R, - GAMMA_G, - GAMMA_B, - ALPHAKILL, - RENORMALIZE, - EXPAND_A, - EXPAND_R, - EXPAND_G, - EXPAND_B, - SEXT_A, - SEXT_R, - SEXT_G, - SEXT_B, - DEPTH_FLOAT, - DEPTH_COMPARE_OP, - DEPTH_COMPARE_1, - DEPTH_COMPARE_2, - FILTERED_MAG, - FILTERED_MIN, - UNNORMALIZED_COORDS, - CLAMP_TEXCOORDS_BIT, - WRAP_S, - WRAP_T, - WRAP_R, - FF_SIGNED_BIT, - FF_BIASED_RENORM_BIT, - FF_GAMMA_BIT, - FF_16BIT_CHANNELS_BIT, - - GAMMA_CTRL_MASK = (1 << GAMMA_R) | (1 << GAMMA_G) | (1 << GAMMA_B) | (1 << GAMMA_A), - EXPAND_MASK = (1 << EXPAND_R) | (1 << EXPAND_G) | (1 << EXPAND_B) | (1 << EXPAND_A), - EXPAND_OFFSET = EXPAND_A, - SEXT_MASK = (1 << SEXT_R) | (1 << SEXT_G) | (1 << SEXT_B) | (1 << SEXT_A), - SEXT_OFFSET = SEXT_A, - FORMAT_FEATURES_OFFSET = FF_SIGNED_BIT, - }; - enum ROP_control_bits : u32 { // Commands. These trigger explicit action. diff --git a/rpcs3/Emu/RSX/color_utils.h b/rpcs3/Emu/RSX/color_utils.h index 40335c07e3..25aa6eb7e9 100644 --- a/rpcs3/Emu/RSX/color_utils.h +++ b/rpcs3/Emu/RSX/color_utils.h @@ -7,6 +7,52 @@ namespace rsx { + enum texture_control_bits : u32 + { + GAMMA_A = 0, + GAMMA_R, + GAMMA_G, + GAMMA_B, + ALPHAKILL, + RENORMALIZE, + EXPAND_A, + EXPAND_R, + EXPAND_G, + EXPAND_B, + SEXT_A, + SEXT_R, + SEXT_G, + SEXT_B, + DEPTH_FLOAT, + DEPTH_COMPARE_OP, + DEPTH_COMPARE_1, + DEPTH_COMPARE_2, + FILTERED_MAG, + FILTERED_MIN, + UNNORMALIZED_COORDS, + CLAMP_TEXCOORDS_BIT, + WRAP_S, + WRAP_T, + WRAP_R, + FF_SIGNED_BIT, + FF_BIASED_RENORM_BIT, + FF_GAMMA_BIT, + FF_16BIT_CHANNELS_BIT, + + // Meta + GAMMA_CTRL_MASK = (1 << GAMMA_R) | (1 << GAMMA_G) | (1 << GAMMA_B) | (1 << GAMMA_A), + GAMMA_RGB_MASK = (1 << GAMMA_R) | (1 << GAMMA_G) | (1 << GAMMA_B), + GAMMA_OFFSET = GAMMA_A, + + EXPAND_MASK = (1 << EXPAND_R) | (1 << EXPAND_G) | (1 << EXPAND_B) | (1 << EXPAND_A), + EXPAND_OFFSET = EXPAND_A, + + SEXT_MASK = (1 << SEXT_R) | (1 << SEXT_G) | (1 << SEXT_B) | (1 << SEXT_A), + SEXT_OFFSET = SEXT_A, + + FORMAT_FEATURES_OFFSET = FF_SIGNED_BIT, + }; + struct texture_channel_remap_t { u32 encoded = 0xDEAD;