mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 20:22:30 +01:00
rsx: Implement texture border color decode to remapped rgba
This commit is contained in:
parent
826f805902
commit
d1d04b1b32
@ -295,6 +295,16 @@ namespace rsx
|
|||||||
return registers[NV4097_SET_TEXTURE_BORDER_COLOR + (m_index * 8)];
|
return registers[NV4097_SET_TEXTURE_BORDER_COLOR + (m_index * 8)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
color4f fragment_texture::remapped_border_color() const
|
||||||
|
{
|
||||||
|
color4f base_color = rsx::decode_border_color(border_color());
|
||||||
|
if (remap() == RSX_TEXTURE_REMAP_IDENTITY)
|
||||||
|
{
|
||||||
|
return base_color;
|
||||||
|
}
|
||||||
|
return decoded_remap().remap(base_color);
|
||||||
|
}
|
||||||
|
|
||||||
u16 fragment_texture::depth() const
|
u16 fragment_texture::depth() const
|
||||||
{
|
{
|
||||||
return dimension() == rsx::texture_dimension::dimension3d ? (registers[NV4097_SET_TEXTURE_CONTROL3 + m_index] >> 20) : 1;
|
return dimension() == rsx::texture_dimension::dimension3d ? (registers[NV4097_SET_TEXTURE_CONTROL3 + m_index] >> 20) : 1;
|
||||||
@ -367,7 +377,7 @@ namespace rsx
|
|||||||
u32 vertex_texture::remap() const
|
u32 vertex_texture::remap() const
|
||||||
{
|
{
|
||||||
// disabled
|
// disabled
|
||||||
return 0xAAE4;
|
return RSX_TEXTURE_REMAP_IDENTITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vertex_texture::enabled() const
|
bool vertex_texture::enabled() const
|
||||||
@ -431,6 +441,11 @@ namespace rsx
|
|||||||
return registers[NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + (m_index * 8)];
|
return registers[NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + (m_index * 8)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
color4f vertex_texture::remapped_border_color() const
|
||||||
|
{
|
||||||
|
return rsx::decode_border_color(border_color());
|
||||||
|
}
|
||||||
|
|
||||||
u16 vertex_texture::depth() const
|
u16 vertex_texture::depth() const
|
||||||
{
|
{
|
||||||
return dimension() == rsx::texture_dimension::dimension3d ? (registers[NV4097_SET_VERTEX_TEXTURE_CONTROL3 + (m_index * 8)] >> 20) : 1;
|
return dimension() == rsx::texture_dimension::dimension3d ? (registers[NV4097_SET_VERTEX_TEXTURE_CONTROL3 + (m_index * 8)] >> 20) : 1;
|
||||||
|
@ -78,6 +78,8 @@ namespace rsx
|
|||||||
|
|
||||||
// Border Color
|
// Border Color
|
||||||
u32 border_color() const;
|
u32 border_color() const;
|
||||||
|
color4f remapped_border_color() const;
|
||||||
|
|
||||||
u16 depth() const;
|
u16 depth() const;
|
||||||
u32 pitch() const;
|
u32 pitch() const;
|
||||||
};
|
};
|
||||||
@ -132,6 +134,8 @@ namespace rsx
|
|||||||
|
|
||||||
// Border Color
|
// Border Color
|
||||||
u32 border_color() const;
|
u32 border_color() const;
|
||||||
|
color4f remapped_border_color() const;
|
||||||
|
|
||||||
u16 depth() const;
|
u16 depth() const;
|
||||||
u32 pitch() const;
|
u32 pitch() const;
|
||||||
|
|
||||||
|
@ -421,7 +421,7 @@ namespace vk
|
|||||||
native_component_map.g == VK_COMPONENT_SWIZZLE_G &&
|
native_component_map.g == VK_COMPONENT_SWIZZLE_G &&
|
||||||
native_component_map.b == VK_COMPONENT_SWIZZLE_B)
|
native_component_map.b == VK_COMPONENT_SWIZZLE_B)
|
||||||
{
|
{
|
||||||
remap_encoding = 0xAAE4;
|
remap_encoding = RSX_TEXTURE_REMAP_IDENTITY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,7 +439,7 @@ namespace vk
|
|||||||
case VK_REMAP_IDENTITY:
|
case VK_REMAP_IDENTITY:
|
||||||
real_mapping = { VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY };
|
real_mapping = { VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY };
|
||||||
break;
|
break;
|
||||||
case 0xAAE4:
|
case RSX_TEXTURE_REMAP_IDENTITY:
|
||||||
real_mapping = native_component_map;
|
real_mapping = native_component_map;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -43,6 +43,14 @@ namespace rsx
|
|||||||
return remap(components, static_cast<T>(0), static_cast<T>(1));
|
return remap(components, static_cast<T>(0), static_cast<T>(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
color4_base<T> remap(const color4_base<T>& components)
|
||||||
|
{
|
||||||
|
const std::array<T, 4> values = { components.a, components.r, components.g, components.b };
|
||||||
|
const auto shuffled = remap(values, T{ 0 }, T{ 1 });
|
||||||
|
return color4_base<T>(shuffled[1], shuffled[2], shuffled[3], shuffled[0]);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires std::is_integral_v<T> || std::is_enum_v<T>
|
requires std::is_integral_v<T> || std::is_enum_v<T>
|
||||||
texture_channel_remap_t with_encoding(T encoding) const
|
texture_channel_remap_t with_encoding(T encoding) const
|
||||||
@ -55,7 +63,7 @@ namespace rsx
|
|||||||
|
|
||||||
static const texture_channel_remap_t default_remap_vector =
|
static const texture_channel_remap_t default_remap_vector =
|
||||||
{
|
{
|
||||||
.encoded = 0xAAE4,
|
.encoded = RSX_TEXTURE_REMAP_IDENTITY,
|
||||||
.control_map = { CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP },
|
.control_map = { CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP, CELL_GCM_TEXTURE_REMAP_REMAP },
|
||||||
.channel_map = { CELL_GCM_TEXTURE_REMAP_FROM_A, CELL_GCM_TEXTURE_REMAP_FROM_R, CELL_GCM_TEXTURE_REMAP_FROM_G, CELL_GCM_TEXTURE_REMAP_FROM_B }
|
.channel_map = { CELL_GCM_TEXTURE_REMAP_FROM_A, CELL_GCM_TEXTURE_REMAP_FROM_R, CELL_GCM_TEXTURE_REMAP_FROM_G, CELL_GCM_TEXTURE_REMAP_FROM_B }
|
||||||
};
|
};
|
||||||
|
@ -419,6 +419,11 @@ namespace gcm
|
|||||||
CELL_GCM_FALSE = 0,
|
CELL_GCM_FALSE = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
RSX_TEXTURE_REMAP_IDENTITY = 0xAAE4,
|
||||||
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
CELL_GCM_POINT_SPRITE_RMODE_ZERO = 0,
|
CELL_GCM_POINT_SPRITE_RMODE_ZERO = 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user