Преглед изворни кода

VideoCore: Use correct register for immediate mode attribute count

Yuri Kunde Schlesner пре 9 година
родитељ
комит
fccb28d2e9
2 измењених фајлова са 13 додато и 7 уклоњено
  1. 7 6
      src/video_core/command_processor.cpp
  2. 6 1
      src/video_core/pica.h

+ 7 - 6
src/video_core/command_processor.cpp

@@ -128,17 +128,18 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
                 g_state.input_default_attributes.attr[setup.index] = attribute;
                 setup.index++;
             } else {
-                // Put each attribute into an immediate input buffer.
-                // When all specified immediate attributes are present, the Vertex Shader is invoked
-                // and everything is
-                // sent to the primitive assembler.
+                // Put each attribute into an immediate input buffer.  When all specified immediate
+                // attributes are present, the Vertex Shader is invoked and everything is sent to
+                // the primitive assembler.
 
                 auto& immediate_input = g_state.immediate.input_vertex;
                 auto& immediate_attribute_id = g_state.immediate.current_attribute;
 
-                immediate_input.attr[immediate_attribute_id++] = attribute;
+                immediate_input.attr[immediate_attribute_id] = attribute;
 
-                if (immediate_attribute_id > regs.vs.max_input_attribute_index) {
+                if (immediate_attribute_id < regs.max_input_attrib_index) {
+                    immediate_attribute_id += 1;
+                } else {
                     MICROPROFILE_SCOPE(GPU_Drawing);
                     immediate_attribute_id = 0;
 

+ 6 - 1
src/video_core/pica.h

@@ -1176,7 +1176,12 @@ struct Regs {
         }
     } command_buffer;
 
-    INSERT_PADDING_WORDS(0x07);
+    INSERT_PADDING_WORDS(4);
+
+    /// Number of input attributes to the vertex shader minus 1
+    BitField<0, 4, u32> max_input_attrib_index;
+
+    INSERT_PADDING_WORDS(2);
 
     enum class GPUMode : u32 {
         Drawing = 0,