Fix D3D11 to properly issue instanced draws even if instance count is 1

This commit is contained in:
Wojtek Figat
2024-07-02 00:54:49 +02:00
parent 1328e869a9
commit 9486466abf
2 changed files with 3 additions and 9 deletions

View File

@@ -485,7 +485,7 @@ public:
/// </summary>
/// <param name="startVertex">A value added to each index before reading a vertex from the vertex buffer.</param>
/// <param name="verticesCount">The vertices count.</param>
API_FUNCTION() FORCE_INLINE void Draw(uint32 startVertex, uint32 verticesCount)
API_FUNCTION() FORCE_INLINE void Draw(int32 startVertex, uint32 verticesCount)
{
DrawInstanced(verticesCount, 1, 0, startVertex);
}

View File

@@ -487,20 +487,14 @@ void GPUContextDX11::ResolveMultisample(GPUTexture* sourceMultisampleTexture, GP
void GPUContextDX11::DrawInstanced(uint32 verticesCount, uint32 instanceCount, int32 startInstance, int32 startVertex)
{
onDrawCall();
if (instanceCount > 1)
_context->DrawInstanced(verticesCount, instanceCount, startVertex, startInstance);
else
_context->Draw(verticesCount, startVertex);
_context->DrawInstanced(verticesCount, instanceCount, startVertex, startInstance);
RENDER_STAT_DRAW_CALL(verticesCount * instanceCount, verticesCount * instanceCount / 3);
}
void GPUContextDX11::DrawIndexedInstanced(uint32 indicesCount, uint32 instanceCount, int32 startInstance, int32 startVertex, int32 startIndex)
{
onDrawCall();
if (instanceCount > 1)
_context->DrawIndexedInstanced(indicesCount, instanceCount, startIndex, startVertex, startInstance);
else
_context->DrawIndexed(indicesCount, startIndex, startVertex);
_context->DrawIndexedInstanced(indicesCount, instanceCount, startIndex, startVertex, startInstance);
RENDER_STAT_DRAW_CALL(0, indicesCount / 3 * instanceCount);
}