From 0520ce944813d936e61a559b6bde62b19326599b Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Thu, 13 May 2021 01:32:40 +0100 Subject: [PATCH] [d3d9] Treat largest element in Stream 0 as vertex decl size Closes #2059 --- src/d3d9/d3d9_vertex_declaration.cpp | 3 +++ src/d3d9/d3d9_vertex_declaration.h | 9 ++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/d3d9/d3d9_vertex_declaration.cpp b/src/d3d9/d3d9_vertex_declaration.cpp index e5e89040..9eb65d79 100644 --- a/src/d3d9/d3d9_vertex_declaration.cpp +++ b/src/d3d9/d3d9_vertex_declaration.cpp @@ -208,6 +208,9 @@ namespace dxvk { void D3D9VertexDecl::Classify() { for (const auto& element : m_elements) { + if (element.Stream == 0 && element.Type != D3DDECLTYPE_UNUSED) + m_size = std::max(m_size, element.Offset + GetDecltypeSize(D3DDECLTYPE(element.Type))); + if (element.Usage == D3DDECLUSAGE_COLOR && element.UsageIndex == 0) m_flags.set(D3D9VertexDeclFlag::HasColor0); else if (element.Usage == D3DDECLUSAGE_COLOR && element.UsageIndex == 1) diff --git a/src/d3d9/d3d9_vertex_declaration.h b/src/d3d9/d3d9_vertex_declaration.h index 25977efa..fe519f2d 100644 --- a/src/d3d9/d3d9_vertex_declaration.h +++ b/src/d3d9/d3d9_vertex_declaration.h @@ -51,11 +51,7 @@ namespace dxvk { } UINT GetSize() const { - if (m_elements.size() == 0) - return 0; - - auto& end = m_elements.back(); - return end.Offset + GetDecltypeSize(D3DDECLTYPE(end.Type)); + return m_size; } bool TestFlag(D3D9VertexDeclFlag flag) const { @@ -78,6 +74,9 @@ namespace dxvk { uint32_t m_texcoordMask = 0; + // The size of Stream 0. That's all we care about. + uint32_t m_size = 0; + }; } \ No newline at end of file