Skip to content

Commit

Permalink
[d3d9] Disable instancing for non-indexed draws
Browse files Browse the repository at this point in the history
  • Loading branch information
K0bin committed Dec 31, 2022
1 parent f94b42f commit 148dedd
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions src/d3d9/d3d9_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});

Expand Down Expand Up @@ -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);
});
Expand Down Expand Up @@ -2704,7 +2701,7 @@ namespace dxvk {
](DxvkContext* ctx) mutable {
Rc<DxvkShader> 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;
Expand Down

0 comments on commit 148dedd

Please sign in to comment.