diff options
author | Feng Chen <vonchenplus@gmail.com> | 2022-12-06 06:45:26 +0100 |
---|---|---|
committer | Feng Chen <vonchenplus@gmail.com> | 2022-12-08 03:12:19 +0100 |
commit | bf0b957c05013f33855e67c31a48e61b1e86d356 (patch) | |
tree | 72db2458cb7e5b7572b53527e0755d4fe45e9db0 /src/video_core/renderer_opengl | |
parent | Merge pull request #9381 from liamwhite/uninit (diff) | |
download | yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar.gz yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar.bz2 yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar.lz yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar.xz yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.tar.zst yuzu-bf0b957c05013f33855e67c31a48e61b1e86d356.zip |
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 16 | ||||
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 6 |
2 files changed, 13 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index f71a316b6..64ed6f628 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -224,16 +224,18 @@ void RasterizerOpenGL::Draw(bool is_indexed, u32 instance_count) { SyncState(); - const GLenum primitive_mode = MaxwellToGL::PrimitiveTopology(maxwell3d->regs.draw.topology); + const auto& draw_state = maxwell3d->draw_manager->GetDrawState(); + + const GLenum primitive_mode = MaxwellToGL::PrimitiveTopology(draw_state.topology); BeginTransformFeedback(pipeline, primitive_mode); - const GLuint base_instance = static_cast<GLuint>(maxwell3d->regs.global_base_instance_index); + const GLuint base_instance = static_cast<GLuint>(draw_state.base_instance); const GLsizei num_instances = static_cast<GLsizei>(instance_count); if (is_indexed) { - const GLint base_vertex = static_cast<GLint>(maxwell3d->regs.global_base_vertex_index); - const GLsizei num_vertices = static_cast<GLsizei>(maxwell3d->regs.index_buffer.count); + const GLint base_vertex = static_cast<GLint>(draw_state.base_index); + const GLsizei num_vertices = static_cast<GLsizei>(draw_state.index_buffer.count); const GLvoid* const offset = buffer_cache_runtime.IndexOffset(); - const GLenum format = MaxwellToGL::IndexFormat(maxwell3d->regs.index_buffer.format); + const GLenum format = MaxwellToGL::IndexFormat(draw_state.index_buffer.format); if (num_instances == 1 && base_instance == 0 && base_vertex == 0) { glDrawElements(primitive_mode, num_vertices, format, offset); } else if (num_instances == 1 && base_instance == 0) { @@ -252,8 +254,8 @@ void RasterizerOpenGL::Draw(bool is_indexed, u32 instance_count) { base_instance); } } else { - const GLint base_vertex = static_cast<GLint>(maxwell3d->regs.vertex_buffer.first); - const GLsizei num_vertices = static_cast<GLsizei>(maxwell3d->regs.vertex_buffer.count); + const GLint base_vertex = static_cast<GLint>(draw_state.vertex_buffer.first); + const GLsizei num_vertices = static_cast<GLsizei>(draw_state.vertex_buffer.count); if (num_instances == 1 && base_instance == 0) { glDrawArrays(primitive_mode, base_vertex, num_vertices); } else if (base_instance == 0) { diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index a38060100..a59d0d24e 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp @@ -22,6 +22,7 @@ #include "shader_recompiler/frontend/maxwell/control_flow.h" #include "shader_recompiler/frontend/maxwell/translate_program.h" #include "shader_recompiler/profile.h" +#include "video_core/engines/draw_manager.h" #include "video_core/engines/kepler_compute.h" #include "video_core/engines/maxwell_3d.h" #include "video_core/memory_manager.h" @@ -327,7 +328,7 @@ GraphicsPipeline* ShaderCache::CurrentGraphicsPipeline() { const auto& regs{maxwell3d->regs}; graphics_key.raw = 0; graphics_key.early_z.Assign(regs.mandated_early_z != 0 ? 1 : 0); - graphics_key.gs_input_topology.Assign(regs.draw.topology.Value()); + graphics_key.gs_input_topology.Assign(maxwell3d->draw_manager->GetDrawState().topology); graphics_key.tessellation_primitive.Assign(regs.tessellation.params.domain_type.Value()); graphics_key.tessellation_spacing.Assign(regs.tessellation.params.spacing.Value()); graphics_key.tessellation_clockwise.Assign( @@ -371,7 +372,8 @@ GraphicsPipeline* ShaderCache::BuiltPipeline(GraphicsPipeline* pipeline) const n // If games are using a small index count, we can assume these are full screen quads. // Usually these shaders are only used once for building textures so we can assume they // can't be built async - if (maxwell3d->regs.index_buffer.count <= 6 || maxwell3d->regs.vertex_buffer.count <= 6) { + const auto& draw_state = maxwell3d->draw_manager->GetDrawState(); + if (draw_state.index_buffer.count <= 6 || draw_state.vertex_buffer.count <= 6) { return pipeline; } return nullptr; |