From 529d0dbbbe24a2518def6842e564f67eb3e2f919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 19 Aug 2014 02:10:29 +0200 Subject: [PATCH] Vertex Data base offset/index Fixed incorrect default value in RSXTexture. --- rpcs3/Emu/RSX/RSXTexture.cpp | 2 +- rpcs3/Emu/RSX/RSXThread.cpp | 19 +++++++++++++++++-- rpcs3/Emu/RSX/RSXThread.h | 13 +++++++++---- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/RSX/RSXTexture.cpp b/rpcs3/Emu/RSX/RSXTexture.cpp index 0c4a8a100f..c23c9499cf 100644 --- a/rpcs3/Emu/RSX/RSXTexture.cpp +++ b/rpcs3/Emu/RSX/RSXTexture.cpp @@ -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)] = diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 03a0f7b5bf..708a157839 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -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= 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); diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 8e8f592362..eb2c85e246 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -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); } }