From 1c99ebcbccf6b61d07623334fd9062be52093979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 10 Apr 2018 12:12:29 +0200 Subject: [PATCH] Fix DecFmt bug --- GPU/Common/VertexDecoderCommon.cpp | 16 ++++++++++------ GPU/GLES/ShaderManagerGLES.cpp | 2 +- GPU/Vulkan/PipelineManagerVulkan.cpp | 2 ++ GPU/Vulkan/ShaderManagerVulkan.cpp | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/GPU/Common/VertexDecoderCommon.cpp b/GPU/Common/VertexDecoderCommon.cpp index 723b3422e0..808ef71606 100644 --- a/GPU/Common/VertexDecoderCommon.cpp +++ b/GPU/Common/VertexDecoderCommon.cpp @@ -77,12 +77,16 @@ void DecVtxFormat::ComputeID() { void DecVtxFormat::InitializeFromID(uint32_t id) { this->id = id; - uvfmt = (id & 0xF); - c0fmt = ((id >> 4) & 0xF); - c1fmt = ((id >> 8) & 0xF); - nrmfmt = ((id >> 12) & 0xF); - posfmt = ((id >> 16) & 0xF); - uvoff = 0; + w0fmt = ((id) & 0xF); + w1fmt = ((id >> 4) & 0xF); + uvfmt = ((id >> 8) & 0xF); + c0fmt = ((id >> 12) & 0xF); + c1fmt = ((id >> 16) & 0xF); + nrmfmt = ((id >> 20) & 0xF); + posfmt = ((id >> 24) & 0xF); + w0off = 0; + w1off = w0off + DecFmtSize(w0fmt); + uvoff = w1off + DecFmtSize(w1fmt); c0off = uvoff + DecFmtSize(uvfmt); c1off = c0off + DecFmtSize(c0fmt); nrmoff = c1off + DecFmtSize(c1fmt); diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index c9e69ac2f7..9425589665 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -790,7 +790,7 @@ std::string ShaderManagerGLES::DebugGetShaderString(std::string id, DebugShaderT // as sometimes these features might have an effect on the ID bits. #define CACHE_HEADER_MAGIC 0x83277592 -#define CACHE_VERSION 8 +#define CACHE_VERSION 10 struct CacheHeader { uint32_t magic; uint32_t version; diff --git a/GPU/Vulkan/PipelineManagerVulkan.cpp b/GPU/Vulkan/PipelineManagerVulkan.cpp index c9ee5f5c52..376460f910 100644 --- a/GPU/Vulkan/PipelineManagerVulkan.cpp +++ b/GPU/Vulkan/PipelineManagerVulkan.cpp @@ -76,6 +76,8 @@ static const DeclTypeInfo VComp[] = { }; static void VertexAttribSetup(VkVertexInputAttributeDescription *attr, int fmt, int offset, PspAttributeLocation location) { + assert(fmt != DEC_NONE); + assert(fmt < ARRAY_SIZE(VComp)); attr->location = (uint32_t)location; attr->binding = 0; attr->format = VComp[fmt].type; diff --git a/GPU/Vulkan/ShaderManagerVulkan.cpp b/GPU/Vulkan/ShaderManagerVulkan.cpp index df742c7f41..bf2e425b7f 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.cpp +++ b/GPU/Vulkan/ShaderManagerVulkan.cpp @@ -350,7 +350,7 @@ VulkanFragmentShader *ShaderManagerVulkan::GetFragmentShaderFromModule(VkShaderM // instantaneous. #define CACHE_HEADER_MAGIC 0xff51f420 -#define CACHE_VERSION 10 +#define CACHE_VERSION 12 struct VulkanCacheHeader { uint32_t magic; uint32_t version;