From f5744284eb0f38c0606a1dcb5f9f59deb5b610ab Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Mon, 10 Jan 2022 22:09:39 +0100 Subject: [PATCH] [d3d9] Dirty FF vertex shader if any D3D9VertexDeclFlags change. The vertex shader depends on all of these in some way. --- src/d3d9/d3d9_device.cpp | 7 ++----- src/d3d9/d3d9_vertex_declaration.h | 6 +++++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 34a19dc7..0699d8f3 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -2722,11 +2722,8 @@ namespace dxvk { bool dirtyFFShader = decl == nullptr || m_state.vertexDecl == nullptr; if (!dirtyFFShader) - dirtyFFShader |= decl->TestFlag(D3D9VertexDeclFlag::HasPositionT) != m_state.vertexDecl->TestFlag(D3D9VertexDeclFlag::HasPositionT) - || decl->TestFlag(D3D9VertexDeclFlag::HasColor0) != m_state.vertexDecl->TestFlag(D3D9VertexDeclFlag::HasColor0) - || decl->TestFlag(D3D9VertexDeclFlag::HasColor1) != m_state.vertexDecl->TestFlag(D3D9VertexDeclFlag::HasColor1) - || decl->TestFlag(D3D9VertexDeclFlag::HasPointSize) != m_state.vertexDecl->TestFlag(D3D9VertexDeclFlag::HasPointSize) - || decl->GetTexcoordMask() != m_state.vertexDecl->GetTexcoordMask(); + dirtyFFShader |= decl->GetFlags() != m_state.vertexDecl->GetFlags() + || decl->GetTexcoordMask() != m_state.vertexDecl->GetTexcoordMask(); if (dirtyFFShader) m_flags.set(D3D9DeviceFlag::DirtyFFVertexShader); diff --git a/src/d3d9/d3d9_vertex_declaration.h b/src/d3d9/d3d9_vertex_declaration.h index fe519f2d..240aa6ed 100644 --- a/src/d3d9/d3d9_vertex_declaration.h +++ b/src/d3d9/d3d9_vertex_declaration.h @@ -7,7 +7,7 @@ namespace dxvk { - enum D3D9VertexDeclFlag { + enum class D3D9VertexDeclFlag { HasColor0, HasColor1, HasPositionT, @@ -58,6 +58,10 @@ namespace dxvk { return m_flags.test(flag); } + D3D9VertexDeclFlags GetFlags() const { + return m_flags; + } + uint32_t GetTexcoordMask() const { return m_texcoordMask; }