From 62d64bd63a99980676a4f3d5ad171356646b4656 Mon Sep 17 00:00:00 2001 From: Robin Kertels Date: Tue, 19 Dec 2023 17:13:47 +0100 Subject: [PATCH] [d3d9] Don't upload buffers before Up draws --- src/d3d9/d3d9_device.cpp | 16 ++++++++-------- src/d3d9/d3d9_device.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index a0c0a1ec..2716f738 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -2615,7 +2615,7 @@ namespace dxvk { if (unlikely(!PrimitiveCount)) return S_OK; - PrepareDraw(PrimitiveType); + PrepareDraw(PrimitiveType, true); EmitCs([this, cPrimType = PrimitiveType, @@ -2652,7 +2652,7 @@ namespace dxvk { if (unlikely(!PrimitiveCount)) return S_OK; - PrepareDraw(PrimitiveType); + PrepareDraw(PrimitiveType, true); EmitCs([this, cPrimType = PrimitiveType, @@ -2688,7 +2688,7 @@ namespace dxvk { if (unlikely(!PrimitiveCount)) return S_OK; - PrepareDraw(PrimitiveType); + PrepareDraw(PrimitiveType, false); uint32_t vertexCount = GetVertexCount(PrimitiveType, PrimitiveCount); @@ -2740,7 +2740,7 @@ namespace dxvk { if (unlikely(!PrimitiveCount)) return S_OK; - PrepareDraw(PrimitiveType); + PrepareDraw(PrimitiveType, false); uint32_t vertexCount = GetVertexCount(PrimitiveType, PrimitiveCount); @@ -2827,7 +2827,7 @@ namespace dxvk { D3D9CommonBuffer* dst = static_cast(pDestBuffer)->GetCommonBuffer(); D3D9VertexDecl* decl = static_cast (pVertexDecl); - PrepareDraw(D3DPT_FORCE_DWORD); + PrepareDraw(D3DPT_FORCE_DWORD, true); if (decl == nullptr) { DWORD FVF = dst->Desc()->FVF; @@ -6454,7 +6454,7 @@ namespace dxvk { } - void D3D9DeviceEx::PrepareDraw(D3DPRIMITIVETYPE PrimitiveType) { + void D3D9DeviceEx::PrepareDraw(D3DPRIMITIVETYPE PrimitiveType, bool UploadBuffers) { if (unlikely(m_activeHazardsRT != 0 || m_activeHazardsDS != 0)) MarkRenderHazards(); @@ -6467,7 +6467,7 @@ namespace dxvk { for (uint32_t i = 0; i < caps::MaxStreams; i++) { auto* vbo = GetCommonBuffer(m_state.vertexBuffers[i].vertexBuffer); - if (vbo != nullptr && vbo->NeedsUpload()) + if (vbo != nullptr && vbo->NeedsUpload() && UploadBuffers) FlushBuffer(vbo); } @@ -6483,7 +6483,7 @@ namespace dxvk { GenerateTextureMips(texturesToGen); auto* ibo = GetCommonBuffer(m_state.indices); - if (ibo != nullptr && ibo->NeedsUpload()) + if (ibo != nullptr && ibo->NeedsUpload() && UploadBuffers) FlushBuffer(ibo); UpdateFog(); diff --git a/src/d3d9/d3d9_device.h b/src/d3d9/d3d9_device.h index d7ac8c00..b58d2910 100644 --- a/src/d3d9/d3d9_device.h +++ b/src/d3d9/d3d9_device.h @@ -895,7 +895,7 @@ namespace dxvk { uint32_t GetInstanceCount() const; - void PrepareDraw(D3DPRIMITIVETYPE PrimitiveType); + void PrepareDraw(D3DPRIMITIVETYPE PrimitiveType, bool UploadBuffers); template void BindShader(