rsx: Add format override functionality to format_ex

This commit is contained in:
kd-11 2026-02-22 18:13:23 +03:00 committed by kd-11
parent b9bdbfa55b
commit f2a17e4898
3 changed files with 50 additions and 41 deletions

View file

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

View file

@ -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.

View file

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