Browse Source

Fix draw indexed flag not being cleared for instanced draws, also avoid state updates in the middle of a indexed draw

gdkchan 6 years ago
parent
commit
375ee0ba96
1 changed files with 18 additions and 12 deletions
  1. 18 12
      Ryujinx.Graphics.Gpu/Engine/MethodDraw.cs

+ 18 - 12
Ryujinx.Graphics.Gpu/Engine/MethodDraw.cs

@@ -26,29 +26,35 @@ namespace Ryujinx.Graphics.Gpu.Engine
 
         private void DrawEnd(GpuState state, int argument)
         {
+            if (_instancedDrawPending)
+            {
+                _drawIndexed = false;
+
+                return;
+            }
+
             UpdateState(state);
 
             bool instanced = _vsUsesInstanceId || _isAnyVbInstanced;
 
             if (instanced)
             {
-                if (!_instancedDrawPending)
-                {
-                    _instancedDrawPending = true;
+                _instancedDrawPending = true;
+
+                _instancedIndexed = _drawIndexed;
 
-                    _instancedIndexed = _drawIndexed;
+                _instancedFirstIndex    = _firstIndex;
+                _instancedFirstVertex   = state.Get<int>(MethodOffset.FirstVertex);
+                _instancedFirstInstance = state.Get<int>(MethodOffset.FirstInstance);
 
-                    _instancedFirstIndex    = _firstIndex;
-                    _instancedFirstVertex   = state.Get<int>(MethodOffset.FirstVertex);
-                    _instancedFirstInstance = state.Get<int>(MethodOffset.FirstInstance);
+                _instancedIndexCount = _indexCount;
 
-                    _instancedIndexCount = _indexCount;
+                var drawState = state.Get<VertexBufferDrawState>(MethodOffset.VertexBufferDrawState);
 
-                    var drawState = state.Get<VertexBufferDrawState>(MethodOffset.VertexBufferDrawState);
+                _instancedDrawStateFirst = drawState.First;
+                _instancedDrawStateCount = drawState.Count;
 
-                    _instancedDrawStateFirst = drawState.First;
-                    _instancedDrawStateCount = drawState.Count;
-                }
+                _drawIndexed = false;
 
                 return;
             }