From 069801a7d16653ec6c8b95b59e84b37d93a0d349 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Thu, 24 Jul 2014 01:25:23 +0200 Subject: VertexLoader: Simplify SetVAT --- Source/Core/VideoCommon/VertexLoader.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoCommon/VertexLoader.cpp') diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index 4087554716..f83565ae26 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -468,7 +468,7 @@ VertexLoader::VertexLoader(const TVtxDesc &vtx_desc, const VAT &vtx_attr) VertexLoader_TextCoord::Init(); m_VtxDesc = vtx_desc; - SetVAT(vtx_attr.g0.Hex, vtx_attr.g1.Hex, vtx_attr.g2.Hex); + SetVAT(vtx_attr); #ifdef USE_VERTEX_LOADER_JIT AllocCodeSpace(COMPILED_CODE_SIZE); @@ -887,13 +887,8 @@ void VertexLoader::RunVertices(int vtx_attr_group, int primitive, int const coun INCSTAT(stats.thisFrame.numPrimitiveJoins); } -void VertexLoader::SetVAT(u32 _group0, u32 _group1, u32 _group2) +void VertexLoader::SetVAT(const VAT& vat) { - VAT vat; - vat.g0.Hex = _group0; - vat.g1.Hex = _group1; - vat.g2.Hex = _group2; - m_VtxAttr.PosElements = vat.g0.PosElements; m_VtxAttr.PosFormat = vat.g0.PosFormat; m_VtxAttr.PosFrac = vat.g0.PosFrac; -- cgit v1.2.3 From 78c3a220600b6cbbd063693d89d423a985125408 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Thu, 24 Jul 2014 01:51:37 +0200 Subject: VertexLoader: take the VAT object directly for RunVertices --- Source/Core/VideoCommon/VertexLoader.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'Source/Core/VideoCommon/VertexLoader.cpp') diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index f83565ae26..bb73193c04 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -813,7 +813,7 @@ void VertexLoader::WriteSetVariable(int bits, void *address, OpArg value) } #endif -void VertexLoader::SetupRunVertices(int vtx_attr_group, int primitive, int const count) +void VertexLoader::SetupRunVertices(const VAT& vat, int primitive, int const count) { m_numLoadedVertices += count; @@ -826,15 +826,15 @@ void VertexLoader::SetupRunVertices(int vtx_attr_group, int primitive, int const g_nativeVertexFmt = m_NativeFmt; // Load position and texcoord scale factors. - m_VtxAttr.PosFrac = g_VtxAttr[vtx_attr_group].g0.PosFrac; - m_VtxAttr.texCoord[0].Frac = g_VtxAttr[vtx_attr_group].g0.Tex0Frac; - m_VtxAttr.texCoord[1].Frac = g_VtxAttr[vtx_attr_group].g1.Tex1Frac; - m_VtxAttr.texCoord[2].Frac = g_VtxAttr[vtx_attr_group].g1.Tex2Frac; - m_VtxAttr.texCoord[3].Frac = g_VtxAttr[vtx_attr_group].g1.Tex3Frac; - m_VtxAttr.texCoord[4].Frac = g_VtxAttr[vtx_attr_group].g2.Tex4Frac; - m_VtxAttr.texCoord[5].Frac = g_VtxAttr[vtx_attr_group].g2.Tex5Frac; - m_VtxAttr.texCoord[6].Frac = g_VtxAttr[vtx_attr_group].g2.Tex6Frac; - m_VtxAttr.texCoord[7].Frac = g_VtxAttr[vtx_attr_group].g2.Tex7Frac; + m_VtxAttr.PosFrac = vat.g0.PosFrac; + m_VtxAttr.texCoord[0].Frac = vat.g0.Tex0Frac; + m_VtxAttr.texCoord[1].Frac = vat.g1.Tex1Frac; + m_VtxAttr.texCoord[2].Frac = vat.g1.Tex2Frac; + m_VtxAttr.texCoord[3].Frac = vat.g1.Tex3Frac; + m_VtxAttr.texCoord[4].Frac = vat.g2.Tex4Frac; + m_VtxAttr.texCoord[5].Frac = vat.g2.Tex5Frac; + m_VtxAttr.texCoord[6].Frac = vat.g2.Tex6Frac; + m_VtxAttr.texCoord[7].Frac = vat.g2.Tex7Frac; posScale = fractionTable[m_VtxAttr.PosFrac]; if (m_NativeFmt->m_components & VB_HAS_UVALL) @@ -870,7 +870,7 @@ void VertexLoader::ConvertVertices ( int count ) #endif } -void VertexLoader::RunVertices(int vtx_attr_group, int primitive, int const count) +void VertexLoader::RunVertices(const VAT& vat, int primitive, int const count) { if (bpmem.genMode.cullmode == 3 && primitive < 5) { @@ -878,7 +878,7 @@ void VertexLoader::RunVertices(int vtx_attr_group, int primitive, int const coun DataSkip(count * m_VertexSize); return; } - SetupRunVertices(vtx_attr_group, primitive, count); + SetupRunVertices(vat, primitive, count); VertexManager::PrepareForAdditionalData(primitive, count, native_stride); ConvertVertices(count); IndexGenerator::AddIndices(primitive, count); -- cgit v1.2.3 From 73f9a22e2ef8af906a116ad67f1054cc964ae3f0 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sat, 26 Jul 2014 01:10:44 +0200 Subject: VertexLoader: Remove global state dependency on g_nativeVertexFmt --- Source/Core/VideoCommon/VertexLoader.cpp | 80 ++++++++++++++------------------ 1 file changed, 34 insertions(+), 46 deletions(-) (limited to 'Source/Core/VideoCommon/VertexLoader.cpp') diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index bb73193c04..9417b7e78f 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -22,7 +22,6 @@ #include "VideoCommon/VertexLoader_Position.h" #include "VideoCommon/VertexLoader_TextCoord.h" #include "VideoCommon/VertexLoaderManager.h" -#include "VideoCommon/VertexManagerBase.h" #include "VideoCommon/VideoCommon.h" #include "VideoCommon/VideoConfig.h" @@ -31,8 +30,6 @@ #define COMPILED_CODE_SIZE 4096 -NativeVertexFormat *g_nativeVertexFmt; - #ifndef _WIN32 #undef inline #define inline @@ -539,8 +536,7 @@ void VertexLoader::CompileVertexTranslator() // Position in pc vertex format. int nat_offset = 0; - PortableVertexDeclaration vtx_decl; - memset(&vtx_decl, 0, sizeof(vtx_decl)); + memset(&m_native_vtx_decl, 0, sizeof(m_native_vtx_decl)); // Position Matrix Index if (m_VtxDesc.PosMatIdx) @@ -572,11 +568,11 @@ void VertexLoader::CompileVertexTranslator() } m_VertexSize += VertexLoader_Position::GetSize(m_VtxDesc.Position, m_VtxAttr.PosFormat, m_VtxAttr.PosElements); nat_offset += 12; - vtx_decl.position.components = 3; - vtx_decl.position.enable = true; - vtx_decl.position.offset = 0; - vtx_decl.position.type = VAR_FLOAT; - vtx_decl.position.integer = false; + m_native_vtx_decl.position.components = 3; + m_native_vtx_decl.position.enable = true; + m_native_vtx_decl.position.offset = 0; + m_native_vtx_decl.position.type = VAR_FLOAT; + m_native_vtx_decl.position.integer = false; // Normals if (m_VtxDesc.Normal != NOT_PRESENT) @@ -598,11 +594,11 @@ void VertexLoader::CompileVertexTranslator() for (int i = 0; i < (vtx_attr.NormalElements ? 3 : 1); i++) { - vtx_decl.normals[i].components = 3; - vtx_decl.normals[i].enable = true; - vtx_decl.normals[i].offset = nat_offset; - vtx_decl.normals[i].type = VAR_FLOAT; - vtx_decl.normals[i].integer = false; + m_native_vtx_decl.normals[i].components = 3; + m_native_vtx_decl.normals[i].enable = true; + m_native_vtx_decl.normals[i].offset = nat_offset; + m_native_vtx_decl.normals[i].type = VAR_FLOAT; + m_native_vtx_decl.normals[i].integer = false; nat_offset += 12; } @@ -613,9 +609,9 @@ void VertexLoader::CompileVertexTranslator() for (int i = 0; i < 2; i++) { - vtx_decl.colors[i].components = 4; - vtx_decl.colors[i].type = VAR_UNSIGNED_BYTE; - vtx_decl.colors[i].integer = false; + m_native_vtx_decl.colors[i].components = 4; + m_native_vtx_decl.colors[i].type = VAR_UNSIGNED_BYTE; + m_native_vtx_decl.colors[i].integer = false; switch (col[i]) { case NOT_PRESENT: @@ -663,8 +659,8 @@ void VertexLoader::CompileVertexTranslator() if (col[i] != NOT_PRESENT) { components |= VB_HAS_COL0 << i; - vtx_decl.colors[i].offset = nat_offset; - vtx_decl.colors[i].enable = true; + m_native_vtx_decl.colors[i].offset = nat_offset; + m_native_vtx_decl.colors[i].enable = true; nat_offset += 4; } } @@ -672,9 +668,9 @@ void VertexLoader::CompileVertexTranslator() // Texture matrix indices (remove if corresponding texture coordinate isn't enabled) for (int i = 0; i < 8; i++) { - vtx_decl.texcoords[i].offset = nat_offset; - vtx_decl.texcoords[i].type = VAR_FLOAT; - vtx_decl.texcoords[i].integer = false; + m_native_vtx_decl.texcoords[i].offset = nat_offset; + m_native_vtx_decl.texcoords[i].type = VAR_FLOAT; + m_native_vtx_decl.texcoords[i].integer = false; const int format = m_VtxAttr.texCoord[i].Format; const int elements = m_VtxAttr.texCoord[i].Elements; @@ -696,18 +692,18 @@ void VertexLoader::CompileVertexTranslator() if (components & (VB_HAS_TEXMTXIDX0 << i)) { - vtx_decl.texcoords[i].enable = true; + m_native_vtx_decl.texcoords[i].enable = true; if (tc[i] != NOT_PRESENT) { // if texmtx is included, texcoord will always be 3 floats, z will be the texmtx index - vtx_decl.texcoords[i].components = 3; + m_native_vtx_decl.texcoords[i].components = 3; nat_offset += 12; WriteCall(m_VtxAttr.texCoord[i].Elements ? TexMtx_Write_Float : TexMtx_Write_Float2); } else { components |= VB_HAS_UV0 << i; // have to include since using now - vtx_decl.texcoords[i].components = 4; + m_native_vtx_decl.texcoords[i].components = 4; nat_offset += 16; // still include the texture coordinate, but this time as 6 + 2 bytes WriteCall(TexMtx_Write_Float4); } @@ -716,8 +712,8 @@ void VertexLoader::CompileVertexTranslator() { if (tc[i] != NOT_PRESENT) { - vtx_decl.texcoords[i].enable = true; - vtx_decl.texcoords[i].components = vtx_attr.texCoord[i].Elements ? 2 : 1; + m_native_vtx_decl.texcoords[i].enable = true; + m_native_vtx_decl.texcoords[i].components = vtx_attr.texCoord[i].Elements ? 2 : 1; nat_offset += 4 * (vtx_attr.texCoord[i].Elements ? 2 : 1); } } @@ -746,16 +742,16 @@ void VertexLoader::CompileVertexTranslator() if (m_VtxDesc.PosMatIdx) { WriteCall(PosMtx_Write); - vtx_decl.posmtx.components = 4; - vtx_decl.posmtx.enable = true; - vtx_decl.posmtx.offset = nat_offset; - vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE; - vtx_decl.posmtx.integer = true; + m_native_vtx_decl.posmtx.components = 4; + m_native_vtx_decl.posmtx.enable = true; + m_native_vtx_decl.posmtx.offset = nat_offset; + m_native_vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE; + m_native_vtx_decl.posmtx.integer = true; nat_offset += 4; } - native_stride = nat_offset; - vtx_decl.stride = native_stride; + m_native_components = components; + m_native_vtx_decl.stride = nat_offset; #ifdef USE_VERTEX_LOADER_JIT // End loop here @@ -770,7 +766,6 @@ void VertexLoader::CompileVertexTranslator() ABI_PopAllCalleeSavedRegsAndAdjustStack(); RET(); #endif - m_NativeFmt = VertexLoaderManager::GetNativeVertexFormat(vtx_decl, components); } void VertexLoader::WriteCall(TPipelineFunction func) @@ -817,14 +812,6 @@ void VertexLoader::SetupRunVertices(const VAT& vat, int primitive, int const cou { m_numLoadedVertices += count; - // Flush if our vertex format is different from the currently set. - if (g_nativeVertexFmt != nullptr && g_nativeVertexFmt != m_NativeFmt) - { - VertexManager::Flush(); - // Also move the Set() here? - } - g_nativeVertexFmt = m_NativeFmt; - // Load position and texcoord scale factors. m_VtxAttr.PosFrac = vat.g0.PosFrac; m_VtxAttr.texCoord[0].Frac = vat.g0.Tex0Frac; @@ -837,7 +824,7 @@ void VertexLoader::SetupRunVertices(const VAT& vat, int primitive, int const cou m_VtxAttr.texCoord[7].Frac = vat.g2.Tex7Frac; posScale = fractionTable[m_VtxAttr.PosFrac]; - if (m_NativeFmt->m_components & VB_HAS_UVALL) + if (m_native_components & VB_HAS_UVALL) for (int i = 0; i < 8; i++) tcScale[i] = fractionTable[m_VtxAttr.texCoord[i].Frac]; for (int i = 0; i < 2; i++) @@ -879,7 +866,8 @@ void VertexLoader::RunVertices(const VAT& vat, int primitive, int const count) return; } SetupRunVertices(vat, primitive, count); - VertexManager::PrepareForAdditionalData(primitive, count, native_stride); + VertexManager::PrepareForAdditionalData(primitive, count, + m_native_vtx_decl.stride); ConvertVertices(count); IndexGenerator::AddIndices(primitive, count); -- cgit v1.2.3