summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-05-27 19:37:46 -0300
committerGravatar ReinUsesLisp2019-07-06 00:37:55 -0300
commit2e39c20da5701b8356bd1024f4f783c1db39a3fd (patch)
tree5fff3454afc3294b0eaaf0339febee508030aafe /src
parentMerge pull request #2601 from FernandoS27/texture_cache (diff)
downloadyuzu-2e39c20da5701b8356bd1024f4f783c1db39a3fd.tar.gz
yuzu-2e39c20da5701b8356bd1024f4f783c1db39a3fd.tar.xz
yuzu-2e39c20da5701b8356bd1024f4f783c1db39a3fd.zip
gl_rasterizer: Move index buffer uploading to its own method
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp21
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h4
2 files changed, 18 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index f45a3c5ef..e89f96aec 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -215,7 +215,15 @@ void RasterizerOpenGL::SetupVertexBuffer(GLuint vao) {
215 gpu.dirty_flags.vertex_array.reset(); 215 gpu.dirty_flags.vertex_array.reset();
216} 216}
217 217
218DrawParameters RasterizerOpenGL::SetupDraw() { 218GLintptr RasterizerOpenGL::SetupIndexBuffer() {
219 if (accelerate_draw != AccelDraw::Indexed) {
220 return 0;
221 }
222 const auto& regs = system.GPU().Maxwell3D().regs;
223 return buffer_cache.UploadMemory(regs.index_array.IndexStart(), CalculateIndexBufferSize());
224}
225
226DrawParameters RasterizerOpenGL::SetupDraw(GLintptr index_buffer_offset) {
219 const auto& gpu = system.GPU().Maxwell3D(); 227 const auto& gpu = system.GPU().Maxwell3D();
220 const auto& regs = gpu.regs; 228 const auto& regs = gpu.regs;
221 const bool is_indexed = accelerate_draw == AccelDraw::Indexed; 229 const bool is_indexed = accelerate_draw == AccelDraw::Indexed;
@@ -230,8 +238,7 @@ DrawParameters RasterizerOpenGL::SetupDraw() {
230 MICROPROFILE_SCOPE(OpenGL_Index); 238 MICROPROFILE_SCOPE(OpenGL_Index);
231 params.index_format = MaxwellToGL::IndexFormat(regs.index_array.format); 239 params.index_format = MaxwellToGL::IndexFormat(regs.index_array.format);
232 params.count = regs.index_array.count; 240 params.count = regs.index_array.count;
233 params.index_buffer_offset = 241 params.index_buffer_offset = index_buffer_offset;
234 buffer_cache.UploadMemory(regs.index_array.IndexStart(), CalculateIndexBufferSize());
235 params.base_vertex = static_cast<GLint>(regs.vb_element_base); 242 params.base_vertex = static_cast<GLint>(regs.vb_element_base);
236 } else { 243 } else {
237 params.count = regs.vertex_buffer.count; 244 params.count = regs.vertex_buffer.count;
@@ -643,10 +650,12 @@ void RasterizerOpenGL::DrawArrays() {
643 gpu.dirty_flags.vertex_array.set(); 650 gpu.dirty_flags.vertex_array.set();
644 } 651 }
645 652
646 const GLuint vao = SetupVertexFormat(); 653 const GLuint vertex_array = SetupVertexFormat();
647 SetupVertexBuffer(vao); 654
655 SetupVertexBuffer(vertex_array);
656 const GLintptr index_buffer_offset = SetupIndexBuffer();
648 657
649 DrawParameters params = SetupDraw(); 658 DrawParameters params = SetupDraw(index_buffer_offset);
650 texture_cache.GuardSamplers(true); 659 texture_cache.GuardSamplers(true);
651 SetupShaders(params.primitive_mode); 660 SetupShaders(params.primitive_mode);
652 texture_cache.GuardSamplers(false); 661 texture_cache.GuardSamplers(false);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index bf67e3a70..8f1757e25 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -220,7 +220,9 @@ private:
220 220
221 void SetupVertexBuffer(GLuint vao); 221 void SetupVertexBuffer(GLuint vao);
222 222
223 DrawParameters SetupDraw(); 223 GLintptr SetupIndexBuffer();
224
225 DrawParameters SetupDraw(GLintptr index_buffer_offset);
224 226
225 void SetupShaders(GLenum primitive_mode); 227 void SetupShaders(GLenum primitive_mode);
226 228