mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 18:40:36 +00:00
Vertex Data base offset/index
Fixed incorrect default value in RSXTexture.
This commit is contained in:
parent
cf9769fe65
commit
529d0dbbbe
@ -26,7 +26,7 @@ void RSXTexture::Init()
|
||||
// Address
|
||||
methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*32)] =
|
||||
((/*wraps*/1) | ((/*anisoBias*/0) << 4) | ((/*wrapt*/1) << 8) | ((/*unsignedRemap*/0) << 12) |
|
||||
((/*wrapr*/2) << 16) | ((/*gamma*/0) << 20) |((/*signedRemap*/0) << 24) | ((/*zfunc*/0) << 28));
|
||||
((/*wrapr*/3) << 16) | ((/*gamma*/0) << 20) |((/*signedRemap*/0) << 24) | ((/*zfunc*/0) << 28));
|
||||
|
||||
// Control0
|
||||
methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*32)] =
|
||||
|
@ -73,7 +73,7 @@ void RSXVertexData::Reset()
|
||||
data.clear();
|
||||
}
|
||||
|
||||
void RSXVertexData::Load(u32 start, u32 count)
|
||||
void RSXVertexData::Load(u32 start, u32 count, u32 baseOffset, u32 baseIndex=0)
|
||||
{
|
||||
if(!addr) return;
|
||||
|
||||
@ -83,7 +83,7 @@ void RSXVertexData::Load(u32 start, u32 count)
|
||||
|
||||
for(u32 i=start; i<start + count; ++i)
|
||||
{
|
||||
const u8* src = Memory.GetMemFromAddr(addr) + stride * i;
|
||||
const u8* src = Memory.GetMemFromAddr(addr) + baseOffset + stride * (i+baseIndex);
|
||||
u8* dst = &data[i * tsize * size];
|
||||
|
||||
switch(tsize)
|
||||
@ -905,6 +905,21 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_VERTEX_DATA_BASE_OFFSET:
|
||||
{
|
||||
m_vertex_data_base_offset = ARGS(0);
|
||||
if (count >= 2) {
|
||||
m_vertex_data_base_index = ARGS(1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_VERTEX_DATA_BASE_INDEX:
|
||||
{
|
||||
m_vertex_data_base_index = ARGS(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_BEGIN_END:
|
||||
{
|
||||
const u32 a0 = ARGS(0);
|
||||
|
@ -36,7 +36,7 @@ struct RSXVertexData
|
||||
|
||||
void Reset();
|
||||
bool IsEnabled() const { return size > 0; }
|
||||
void Load(u32 start, u32 count);
|
||||
void Load(u32 start, u32 count, u32 baseOffset, u32 baseIndex);
|
||||
|
||||
u32 GetTypeSize();
|
||||
};
|
||||
@ -412,6 +412,10 @@ public:
|
||||
u8 m_shader_window_origin;
|
||||
u16 m_shader_window_pixel_centers;
|
||||
|
||||
// Vertex Data
|
||||
u32 m_vertex_data_base_offset;
|
||||
u32 m_vertex_data_base_index;
|
||||
|
||||
// Front face
|
||||
bool m_set_front_face;
|
||||
u32 m_front_face;
|
||||
@ -505,8 +509,9 @@ protected:
|
||||
m_line_width = 1.0;
|
||||
m_line_stipple_pattern = 0xffff;
|
||||
m_line_stipple_factor = 1;
|
||||
for (size_t i = 0; i < 32; i++)
|
||||
{
|
||||
m_vertex_data_base_offset = 0;
|
||||
m_vertex_data_base_index = 0;
|
||||
for (size_t i = 0; i < 32; i++) {
|
||||
m_polygon_stipple_pattern[i] = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
@ -624,7 +629,7 @@ protected:
|
||||
{
|
||||
if(!m_vertex_data[i].IsEnabled()) continue;
|
||||
|
||||
m_vertex_data[i].Load(first, count);
|
||||
m_vertex_data[i].Load(first, count, m_vertex_data_base_offset, m_vertex_data_base_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user