diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 4a4d31cad6ec..30b56bc78651 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -2467,15 +2467,14 @@ namespace dxvk { EmitCs([this, cPrimType = PrimitiveType, cPrimCount = PrimitiveCount, - cStartVertex = StartVertex, - cInstanceCount = GetInstanceCount() + cStartVertex = StartVertex ](DxvkContext* ctx) { - auto drawInfo = GenerateDrawInfo(cPrimType, cPrimCount, cInstanceCount); + uint32_t vertexCount = GetVertexCount(cPrimType, cPrimCount); ApplyPrimitiveType(ctx, cPrimType); ctx->draw( - drawInfo.vertexCount, drawInfo.instanceCount, + vertexCount, 1, cStartVertex, 0); }); @@ -2548,16 +2547,14 @@ namespace dxvk { cBufferSlice = std::move(upSlice.slice), cPrimType = PrimitiveType, cPrimCount = PrimitiveCount, - cInstanceCount = GetInstanceCount(), - cStride = VertexStreamZeroStride + cStride = VertexStreamZeroStride, + cVertexCount = vertexCount ](DxvkContext* ctx) mutable { - auto drawInfo = GenerateDrawInfo(cPrimType, cPrimCount, cInstanceCount); - ApplyPrimitiveType(ctx, cPrimType); ctx->bindVertexBuffer(0, std::move(cBufferSlice), cStride); ctx->draw( - drawInfo.vertexCount, drawInfo.instanceCount, + cVertexCount, 1, 0, 0); ctx->bindVertexBuffer(0, DxvkBufferSlice(), 0); }); @@ -2704,7 +2701,7 @@ namespace dxvk { ](DxvkContext* ctx) mutable { Rc shader = m_swvpEmulator.GetShaderModule(this, cDecl); - auto drawInfo = GenerateDrawInfo(D3DPT_POINTLIST, cVertexCount, cInstanceCount); + auto drawInfo = GenerateDrawInfo(D3DPT_POINTLIST, cVertexCount, cIndexed ? cInstanceCount : 1); if (drawInfo.instanceCount != 1) { drawInfo.instanceCount = 1; diff --git a/src/d3d9/d3d9_device.h b/src/d3d9/d3d9_device.h index 63e9fd476fea..1f956ce1d1cf 100644 --- a/src/d3d9/d3d9_device.h +++ b/src/d3d9/d3d9_device.h @@ -872,7 +872,7 @@ namespace dxvk { D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, UINT InstanceCount); - + uint32_t GetInstanceCount() const; void PrepareDraw(D3DPRIMITIVETYPE PrimitiveType);