diff --git a/GPU/Directx9/GPU_DX9.cpp b/GPU/Directx9/GPU_DX9.cpp index c2bace2de4..40b2f3b649 100644 --- a/GPU/Directx9/GPU_DX9.cpp +++ b/GPU/Directx9/GPU_DX9.cpp @@ -732,19 +732,22 @@ void DIRECTX9_GPU::Execute_Prim(u32 op, u32 diff) { return; } - if (!Memory::IsValidAddress(gstate_c.vertexAddr)) { - ERROR_LOG_REPORT(G3D, "Bad vertex address %08x!", gstate_c.vertexAddr); + u32 vertexAddr = gstate_c.vertexAddr; + if (!Memory::IsValidAddress(vertexAddr)) { + ERROR_LOG_REPORT(G3D, "Bad vertex address %08x!", vertexAddr); return; } - void *verts = Memory::GetPointerUnchecked(gstate_c.vertexAddr); + void *verts = Memory::GetPointerUnchecked(vertexAddr); void *inds = 0; - if ((gstate.vertType & GE_VTYPE_IDX_MASK) != GE_VTYPE_IDX_NONE) { - if (!Memory::IsValidAddress(gstate_c.indexAddr)) { - ERROR_LOG_REPORT(G3D, "Bad index address %08x!", gstate_c.indexAddr); + u32 vertexType = gstate.vertType; + if ((vertexType & GE_VTYPE_IDX_MASK) != GE_VTYPE_IDX_NONE) { + u32 indexAddr = gstate_c.indexAddr; + if (!Memory::IsValidAddress(indexAddr)) { + ERROR_LOG_REPORT(G3D, "Bad index address %08x!", indexAddr); return; } - inds = Memory::GetPointerUnchecked(gstate_c.indexAddr); + inds = Memory::GetPointerUnchecked(indexAddr); } #ifndef MOBILE_DEVICE @@ -754,18 +757,18 @@ void DIRECTX9_GPU::Execute_Prim(u32 op, u32 diff) { #endif int bytesRead = 0; - transformDraw_.SubmitPrim(verts, inds, prim, count, gstate.vertType, &bytesRead); + transformDraw_.SubmitPrim(verts, inds, prim, count, vertexType, &bytesRead); - int vertexCost = transformDraw_.EstimatePerVertexCost(); - gpuStats.vertexGPUCycles += vertexCost * count; - cyclesExecuted += vertexCost * count; + int vertexCost = transformDraw_.EstimatePerVertexCost() * count; + gpuStats.vertexGPUCycles += vertexCost; + cyclesExecuted += vertexCost; // After drawing, we advance the vertexAddr (when non indexed) or indexAddr (when indexed). // Some games rely on this, they don't bother reloading VADDR and IADDR. // The VADDR/IADDR registers are NOT updated. if (inds) { int indexSize = 1; - if ((gstate.vertType & GE_VTYPE_IDX_MASK) == GE_VTYPE_IDX_16BIT) + if ((vertexType & GE_VTYPE_IDX_MASK) == GE_VTYPE_IDX_16BIT) indexSize = 2; gstate_c.indexAddr += count * indexSize; } else { diff --git a/GPU/Directx9/TextureCacheDX9.h b/GPU/Directx9/TextureCacheDX9.h index 53949b00e5..a53f94a13c 100644 --- a/GPU/Directx9/TextureCacheDX9.h +++ b/GPU/Directx9/TextureCacheDX9.h @@ -17,6 +17,8 @@ #pragma once +#include + #include "../Globals.h" #include "helper/global.h" #include "helper/fbo.h" @@ -155,6 +157,7 @@ public: void SetFramebufferSamplingParams(u16 bufferWidth, u16 bufferHeight); private: + // Can't be unordered_map, we use lower_bound ... although for some reason that compiles on MSVC. typedef std::map TexCache; void Decimate(); // Run this once per frame to get rid of old textures. diff --git a/GPU/Directx9/TransformPipelineDX9.h b/GPU/Directx9/TransformPipelineDX9.h index 45d80ceb3a..82c09b755d 100644 --- a/GPU/Directx9/TransformPipelineDX9.h +++ b/GPU/Directx9/TransformPipelineDX9.h @@ -17,7 +17,7 @@ #pragma once -#include +#include #include @@ -215,7 +215,7 @@ private: GEPrimitiveType prevPrim_; // Cached vertex decoders - std::map decoderMap_; + std::unordered_map decoderMap_; VertexDecoder *dec_; VertexDecoderJitCache *decJitCache_; u32 lastVType_; @@ -223,8 +223,8 @@ private: TransformedVertex *transformed; TransformedVertex *transformedExpanded; - std::map vai_; - std::map vertexDeclMap_; + std::unordered_map vai_; + std::unordered_map vertexDeclMap_; // Fixed index buffer for easy quad generation from spline/bezier u16 *quadIndices_; diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 3e18142685..8f10fb553b 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -15,7 +15,6 @@ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. -#include #include #include diff --git a/GPU/GLES/TextureCache.h b/GPU/GLES/TextureCache.h index 6b9173718c..c710190cc1 100644 --- a/GPU/GLES/TextureCache.h +++ b/GPU/GLES/TextureCache.h @@ -17,6 +17,8 @@ #pragma once +#include + #include "gfx_es2/fbo.h" #include "gfx_es2/gpu_features.h" @@ -171,6 +173,7 @@ public: void SetFramebufferSamplingParams(u16 bufferWidth, u16 bufferHeight); private: + // Can't be unordered_map, we use lower_bound ... although for some reason that compiles on MSVC. typedef std::map TexCache; void Decimate(); // Run this once per frame to get rid of old textures. diff --git a/GPU/GLES/TransformPipeline.h b/GPU/GLES/TransformPipeline.h index 1b9d16bfc5..331865b597 100644 --- a/GPU/GLES/TransformPipeline.h +++ b/GPU/GLES/TransformPipeline.h @@ -17,7 +17,7 @@ #pragma once -#include +#include #include "GPU/Common/GPUDebugInterface.h" #include "GPU/Common/IndexGenerator.h" @@ -212,7 +212,7 @@ private: GEPrimitiveType prevPrim_; // Cached vertex decoders - std::map decoderMap_; + std::unordered_map decoderMap_; VertexDecoder *dec_; VertexDecoderJitCache *decJitCache_; u32 lastVType_; @@ -220,7 +220,7 @@ private: TransformedVertex *transformed; TransformedVertex *transformedExpanded; - std::map vai_; + std::unordered_map vai_; // Fixed index buffer for easy quad generation from spline/bezier u16 *quadIndices_;