mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
rsx: Inline rsx_state and texture constructors.
This commit is contained in:
parent
0578430fd0
commit
4c46bde315
@ -6,11 +6,6 @@
|
|||||||
|
|
||||||
namespace rsx
|
namespace rsx
|
||||||
{
|
{
|
||||||
texture::texture(u8 idx, std::array<u32, 0x10000 / 4> &r) : m_index(idx), registers(r)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void texture::init()
|
void texture::init()
|
||||||
{
|
{
|
||||||
// Offset
|
// Offset
|
||||||
@ -248,11 +243,6 @@ namespace rsx
|
|||||||
return registers[NV4097_SET_TEXTURE_CONTROL3 + m_index] & 0xfffff;
|
return registers[NV4097_SET_TEXTURE_CONTROL3 + m_index] & 0xfffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
vertex_texture::vertex_texture(u8 idx, std::array<u32, 0x10000 / 4> &r) : m_index(idx), registers(r)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void vertex_texture::init()
|
void vertex_texture::init()
|
||||||
{
|
{
|
||||||
// Offset
|
// Offset
|
||||||
|
@ -21,7 +21,7 @@ namespace rsx
|
|||||||
std::array<u32, 0x10000 / 4> ®isters;
|
std::array<u32, 0x10000 / 4> ®isters;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
texture(u8 idx, std::array<u32, 0x10000 / 4> &r);
|
texture(u8 idx, std::array<u32, 0x10000 / 4> &r) : m_index(idx), registers(r) { }
|
||||||
texture() = delete;
|
texture() = delete;
|
||||||
|
|
||||||
//initialize texture registers with default values
|
//initialize texture registers with default values
|
||||||
@ -97,7 +97,7 @@ namespace rsx
|
|||||||
std::array<u32, 0x10000 / 4> ®isters;
|
std::array<u32, 0x10000 / 4> ®isters;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
vertex_texture(u8 idx, std::array<u32, 0x10000 / 4> &r);
|
vertex_texture(u8 idx, std::array<u32, 0x10000 / 4> &r) : m_index(idx), registers(r) { }
|
||||||
vertex_texture() = delete;
|
vertex_texture() = delete;
|
||||||
|
|
||||||
//initialize texture registers with default values
|
//initialize texture registers with default values
|
||||||
|
@ -780,41 +780,6 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, size_t... N, typename Args>
|
|
||||||
std::array<T, sizeof...(N)> fill_array(Args&& arg, std::index_sequence<N...> seq)
|
|
||||||
{
|
|
||||||
return{ T(N, std::forward<Args>(arg))... };
|
|
||||||
}
|
|
||||||
|
|
||||||
rsx_state & rsx_state::operator=(const rsx_state & in)
|
|
||||||
{
|
|
||||||
registers = in.registers;
|
|
||||||
transform_program = in.transform_program;
|
|
||||||
transform_constants = in.transform_constants;
|
|
||||||
register_vertex_info = in.register_vertex_info;
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
vertex_arrays_info[i].size = in.vertex_arrays_info[i].size;
|
|
||||||
vertex_arrays_info[i].stride = in.vertex_arrays_info[i].stride;
|
|
||||||
vertex_arrays_info[i].frequency = in.vertex_arrays_info[i].frequency;
|
|
||||||
vertex_arrays_info[i].type = in.vertex_arrays_info[i].type;
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
rsx_state::rsx_state() :
|
|
||||||
fragment_textures(fill_array<texture>(registers, std::make_index_sequence<16>())),
|
|
||||||
vertex_textures(fill_array<vertex_texture>(registers, std::make_index_sequence<4>())),
|
|
||||||
vertex_arrays_info(fill_array<data_array_format_info>(registers, std::make_index_sequence<16>()))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
rsx_state::~rsx_state()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void rsx_state::reset()
|
void rsx_state::reset()
|
||||||
{
|
{
|
||||||
//setup method registers
|
//setup method registers
|
||||||
|
@ -75,9 +75,18 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template<typename T, size_t... N, typename Args>
|
||||||
|
std::array<T, sizeof...(N)> fill_array(Args&& arg, std::index_sequence<N...> seq)
|
||||||
|
{
|
||||||
|
return{ T(N, std::forward<Args>(arg))... };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct rsx_state
|
struct rsx_state
|
||||||
{
|
{
|
||||||
private:
|
protected:
|
||||||
std::array<u32, 0x10000 / 4> registers;
|
std::array<u32, 0x10000 / 4> registers;
|
||||||
|
|
||||||
template<u32 opcode>
|
template<u32 opcode>
|
||||||
@ -91,7 +100,21 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
rsx_state &operator=(const rsx_state& in);
|
rsx_state &operator=(const rsx_state& in)
|
||||||
|
{
|
||||||
|
registers = in.registers;
|
||||||
|
transform_program = in.transform_program;
|
||||||
|
transform_constants = in.transform_constants;
|
||||||
|
register_vertex_info = in.register_vertex_info;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
vertex_arrays_info[i].size = in.vertex_arrays_info[i].size;
|
||||||
|
vertex_arrays_info[i].stride = in.vertex_arrays_info[i].stride;
|
||||||
|
vertex_arrays_info[i].frequency = in.vertex_arrays_info[i].frequency;
|
||||||
|
vertex_arrays_info[i].type = in.vertex_arrays_info[i].type;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
std::array<texture, 16> fragment_textures;
|
std::array<texture, 16> fragment_textures;
|
||||||
std::array<vertex_texture, 4> vertex_textures;
|
std::array<vertex_texture, 4> vertex_textures;
|
||||||
@ -119,8 +142,13 @@ namespace rsx
|
|||||||
std::array<register_vertex_data_info, 16> register_vertex_info;
|
std::array<register_vertex_data_info, 16> register_vertex_info;
|
||||||
std::array<data_array_format_info, 16> vertex_arrays_info;
|
std::array<data_array_format_info, 16> vertex_arrays_info;
|
||||||
|
|
||||||
rsx_state();
|
rsx_state() :
|
||||||
~rsx_state();
|
fragment_textures(fill_array<texture>(registers, std::make_index_sequence<16>())),
|
||||||
|
vertex_textures(fill_array<vertex_texture>(registers, std::make_index_sequence<4>())),
|
||||||
|
vertex_arrays_info(fill_array<data_array_format_info>(registers, std::make_index_sequence<16>()))
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~rsx_state() { }
|
||||||
|
|
||||||
void decode(u32 reg, u32 value);
|
void decode(u32 reg, u32 value);
|
||||||
|
|
||||||
@ -600,7 +628,7 @@ namespace rsx
|
|||||||
return decode<NV4097_SET_ALPHA_REF>().alpha_ref();
|
return decode<NV4097_SET_ALPHA_REF>().alpha_ref();
|
||||||
}
|
}
|
||||||
|
|
||||||
surface_target surface_color_target()
|
surface_target surface_color_target() const
|
||||||
{
|
{
|
||||||
return decode<NV4097_SET_SURFACE_COLOR_TARGET>().target();
|
return decode<NV4097_SET_SURFACE_COLOR_TARGET>().target();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user