|
@@ -215,7 +215,15 @@ void RasterizerOpenGL::SetupVertexBuffer(GLuint vao) {
|
|
|
gpu.dirty_flags.vertex_array.reset();
|
|
gpu.dirty_flags.vertex_array.reset();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-DrawParameters RasterizerOpenGL::SetupDraw() {
|
|
|
|
|
|
|
+GLintptr RasterizerOpenGL::SetupIndexBuffer() {
|
|
|
|
|
+ if (accelerate_draw != AccelDraw::Indexed) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ const auto& regs = system.GPU().Maxwell3D().regs;
|
|
|
|
|
+ return buffer_cache.UploadMemory(regs.index_array.IndexStart(), CalculateIndexBufferSize());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+DrawParameters RasterizerOpenGL::SetupDraw(GLintptr index_buffer_offset) {
|
|
|
const auto& gpu = system.GPU().Maxwell3D();
|
|
const auto& gpu = system.GPU().Maxwell3D();
|
|
|
const auto& regs = gpu.regs;
|
|
const auto& regs = gpu.regs;
|
|
|
const bool is_indexed = accelerate_draw == AccelDraw::Indexed;
|
|
const bool is_indexed = accelerate_draw == AccelDraw::Indexed;
|
|
@@ -230,8 +238,7 @@ DrawParameters RasterizerOpenGL::SetupDraw() {
|
|
|
MICROPROFILE_SCOPE(OpenGL_Index);
|
|
MICROPROFILE_SCOPE(OpenGL_Index);
|
|
|
params.index_format = MaxwellToGL::IndexFormat(regs.index_array.format);
|
|
params.index_format = MaxwellToGL::IndexFormat(regs.index_array.format);
|
|
|
params.count = regs.index_array.count;
|
|
params.count = regs.index_array.count;
|
|
|
- params.index_buffer_offset =
|
|
|
|
|
- buffer_cache.UploadMemory(regs.index_array.IndexStart(), CalculateIndexBufferSize());
|
|
|
|
|
|
|
+ params.index_buffer_offset = index_buffer_offset;
|
|
|
params.base_vertex = static_cast<GLint>(regs.vb_element_base);
|
|
params.base_vertex = static_cast<GLint>(regs.vb_element_base);
|
|
|
} else {
|
|
} else {
|
|
|
params.count = regs.vertex_buffer.count;
|
|
params.count = regs.vertex_buffer.count;
|
|
@@ -643,10 +650,12 @@ void RasterizerOpenGL::DrawArrays() {
|
|
|
gpu.dirty_flags.vertex_array.set();
|
|
gpu.dirty_flags.vertex_array.set();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const GLuint vao = SetupVertexFormat();
|
|
|
|
|
- SetupVertexBuffer(vao);
|
|
|
|
|
|
|
+ const GLuint vertex_array = SetupVertexFormat();
|
|
|
|
|
+
|
|
|
|
|
+ SetupVertexBuffer(vertex_array);
|
|
|
|
|
+ const GLintptr index_buffer_offset = SetupIndexBuffer();
|
|
|
|
|
|
|
|
- DrawParameters params = SetupDraw();
|
|
|
|
|
|
|
+ DrawParameters params = SetupDraw(index_buffer_offset);
|
|
|
texture_cache.GuardSamplers(true);
|
|
texture_cache.GuardSamplers(true);
|
|
|
SetupShaders(params.primitive_mode);
|
|
SetupShaders(params.primitive_mode);
|
|
|
texture_cache.GuardSamplers(false);
|
|
texture_cache.GuardSamplers(false);
|