gl_state: Remove completely
This commit is contained in:
		| @@ -71,8 +71,6 @@ add_library(video_core STATIC | ||||
|     renderer_opengl/gl_shader_util.h | ||||
|     renderer_opengl/gl_state_tracker.cpp | ||||
|     renderer_opengl/gl_state_tracker.h | ||||
|     renderer_opengl/gl_state.cpp | ||||
|     renderer_opengl/gl_state.h | ||||
|     renderer_opengl/gl_stream_buffer.cpp | ||||
|     renderer_opengl/gl_stream_buffer.h | ||||
|     renderer_opengl/gl_texture_cache.cpp | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "video_core/engines/maxwell_3d.h" | ||||
| #include "video_core/renderer_opengl/gl_framebuffer_cache.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
|  | ||||
| namespace OpenGL { | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,6 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "video_core/engines/maxwell_3d.h" | ||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/gl_texture_cache.h" | ||||
|  | ||||
| namespace OpenGL { | ||||
| @@ -63,7 +62,6 @@ public: | ||||
| private: | ||||
|     OGLFramebuffer CreateFramebuffer(const FramebufferCacheKey& key); | ||||
|  | ||||
|     OpenGLState local_state; | ||||
|     std::unordered_map<FramebufferCacheKey, OGLFramebuffer> cache; | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -359,8 +359,8 @@ void RasterizerOpenGL::ConfigureFramebuffers() { | ||||
|     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer_cache.GetFramebuffer(key)); | ||||
| } | ||||
|  | ||||
| void RasterizerOpenGL::ConfigureClearFramebuffer(OpenGLState& current_state, bool using_color_fb, | ||||
|                                                  bool using_depth_fb, bool using_stencil_fb) { | ||||
| void RasterizerOpenGL::ConfigureClearFramebuffer(bool using_color_fb, bool using_depth_fb, | ||||
|                                                  bool using_stencil_fb) { | ||||
|     using VideoCore::Surface::SurfaceType; | ||||
|  | ||||
|     auto& gpu = system.GPU().Maxwell3D(); | ||||
| @@ -396,10 +396,6 @@ void RasterizerOpenGL::Clear() { | ||||
|     bool use_depth{}; | ||||
|     bool use_stencil{}; | ||||
|  | ||||
|     OpenGLState prev_state{OpenGLState::GetCurState()}; | ||||
|     SCOPE_EXIT({ prev_state.Apply(); }); | ||||
|  | ||||
|     OpenGLState clear_state{OpenGLState::GetCurState()}; | ||||
|     if (regs.clear_buffers.R || regs.clear_buffers.G || regs.clear_buffers.B || | ||||
|         regs.clear_buffers.A) { | ||||
|         use_color = true; | ||||
| @@ -430,7 +426,7 @@ void RasterizerOpenGL::Clear() { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     ConfigureClearFramebuffer(clear_state, use_color, use_depth, use_stencil); | ||||
|     ConfigureClearFramebuffer(use_color, use_depth, use_stencil); | ||||
|  | ||||
|     SyncRasterizeEnable(); | ||||
|     if (regs.clear_flags.scissor) { | ||||
| @@ -444,8 +440,6 @@ void RasterizerOpenGL::Clear() { | ||||
|  | ||||
|     UNIMPLEMENTED_IF(regs.clear_flags.viewport); | ||||
|  | ||||
|     clear_state.Apply(); | ||||
|  | ||||
|     if (use_color) { | ||||
|         glClearBufferfv(GL_COLOR, 0, regs.clear_color); | ||||
|     } | ||||
| @@ -548,7 +542,6 @@ void RasterizerOpenGL::Draw(bool is_indexed, bool is_instanced) { | ||||
|     bind_ssbo_pushbuffer.Bind(); | ||||
|  | ||||
|     program_manager.Update(); | ||||
|     state.Apply(); | ||||
|  | ||||
|     if (texture_cache.TextureBarrier()) { | ||||
|         glTextureBarrier(); | ||||
|   | ||||
| @@ -30,7 +30,6 @@ | ||||
| #include "video_core/renderer_opengl/gl_shader_cache.h" | ||||
| #include "video_core/renderer_opengl/gl_shader_decompiler.h" | ||||
| #include "video_core/renderer_opengl/gl_shader_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/gl_texture_cache.h" | ||||
| #include "video_core/renderer_opengl/utils.h" | ||||
| #include "video_core/textures/texture.h" | ||||
| @@ -86,8 +85,7 @@ private: | ||||
|     /// Configures the color and depth framebuffer states. | ||||
|     void ConfigureFramebuffers(); | ||||
|  | ||||
|     void ConfigureClearFramebuffer(OpenGLState& current_state, bool using_color_fb, | ||||
|                                    bool using_depth_fb, bool using_stencil_fb); | ||||
|     void ConfigureClearFramebuffer(bool using_color_fb, bool using_depth_fb, bool using_stencil_fb); | ||||
|  | ||||
|     /// Configures the current constbuffers to use for the draw command. | ||||
|     void SetupDrawConstBuffers(std::size_t stage_index, const Shader& shader); | ||||
| @@ -208,7 +206,6 @@ private: | ||||
|     void SetupShaders(GLenum primitive_mode); | ||||
|  | ||||
|     const Device device; | ||||
|     OpenGLState state; | ||||
|  | ||||
|     TextureCacheOpenGL texture_cache; | ||||
|     ShaderCacheOpenGL shader_cache; | ||||
|   | ||||
| @@ -8,7 +8,6 @@ | ||||
| #include "common/microprofile.h" | ||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_shader_util.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
|  | ||||
| MICROPROFILE_DEFINE(OpenGL_ResourceCreation, "OpenGL", "Resource Creation", MP_RGB(128, 128, 192)); | ||||
| MICROPROFILE_DEFINE(OpenGL_ResourceDeletion, "OpenGL", "Resource Deletion", MP_RGB(128, 128, 192)); | ||||
|   | ||||
| @@ -9,7 +9,6 @@ | ||||
| #include <glad/glad.h> | ||||
|  | ||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/maxwell_to_gl.h" | ||||
|  | ||||
| namespace OpenGL::GLShader { | ||||
|   | ||||
| @@ -1,90 +0,0 @@ | ||||
| // Copyright 2015 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include <algorithm> | ||||
| #include <iterator> | ||||
| #include <glad/glad.h> | ||||
| #include "common/assert.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "common/microprofile.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
|  | ||||
| MICROPROFILE_DEFINE(OpenGL_State, "OpenGL", "State Change", MP_RGB(192, 128, 128)); | ||||
|  | ||||
| namespace OpenGL { | ||||
|  | ||||
| using Maxwell = Tegra::Engines::Maxwell3D::Regs; | ||||
|  | ||||
| OpenGLState OpenGLState::cur_state; | ||||
|  | ||||
| namespace { | ||||
|  | ||||
| template <typename T> | ||||
| bool UpdateValue(T& current_value, const T new_value) { | ||||
|     const bool changed = current_value != new_value; | ||||
|     current_value = new_value; | ||||
|     return changed; | ||||
| } | ||||
|  | ||||
| template <typename T1, typename T2> | ||||
| bool UpdateTie(T1 current_value, const T2 new_value) { | ||||
|     const bool changed = current_value != new_value; | ||||
|     current_value = new_value; | ||||
|     return changed; | ||||
| } | ||||
|  | ||||
| template <typename T> | ||||
| std::optional<std::pair<GLuint, GLsizei>> UpdateArray(T& current_values, const T& new_values) { | ||||
|     std::optional<std::size_t> first; | ||||
|     std::size_t last; | ||||
|     for (std::size_t i = 0; i < std::size(current_values); ++i) { | ||||
|         if (!UpdateValue(current_values[i], new_values[i])) { | ||||
|             continue; | ||||
|         } | ||||
|         if (!first) { | ||||
|             first = i; | ||||
|         } | ||||
|         last = i; | ||||
|     } | ||||
|     if (!first) { | ||||
|         return std::nullopt; | ||||
|     } | ||||
|     return std::make_pair(static_cast<GLuint>(*first), static_cast<GLsizei>(last - *first + 1)); | ||||
| } | ||||
|  | ||||
| void Enable(GLenum cap, bool enable) { | ||||
|     if (enable) { | ||||
|         glEnable(cap); | ||||
|     } else { | ||||
|         glDisable(cap); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void Enable(GLenum cap, GLuint index, bool enable) { | ||||
|     if (enable) { | ||||
|         glEnablei(cap, index); | ||||
|     } else { | ||||
|         glDisablei(cap, index); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void Enable(GLenum cap, bool& current_value, bool new_value) { | ||||
|     if (UpdateValue(current_value, new_value)) { | ||||
|         Enable(cap, new_value); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void Enable(GLenum cap, GLuint index, bool& current_value, bool new_value) { | ||||
|     if (UpdateValue(current_value, new_value)) { | ||||
|         Enable(cap, index, new_value); | ||||
|     } | ||||
| } | ||||
|  | ||||
| } // Anonymous namespace | ||||
|  | ||||
| OpenGLState::OpenGLState() = default; | ||||
|  | ||||
| void OpenGLState::Apply() {} | ||||
|  | ||||
| } // namespace OpenGL | ||||
| @@ -1,31 +0,0 @@ | ||||
| // Copyright 2015 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <array> | ||||
| #include <type_traits> | ||||
| #include <glad/glad.h> | ||||
| #include "video_core/engines/maxwell_3d.h" | ||||
|  | ||||
| namespace OpenGL { | ||||
|  | ||||
| class OpenGLState { | ||||
| public: | ||||
|     OpenGLState(); | ||||
|  | ||||
|     /// Get the currently active OpenGL state | ||||
|     static OpenGLState GetCurState() { | ||||
|         return cur_state; | ||||
|     } | ||||
|  | ||||
|     /// Apply this state as the current OpenGL state | ||||
|     void Apply(); | ||||
|  | ||||
| private: | ||||
|     static OpenGLState cur_state; | ||||
| }; | ||||
| static_assert(std::is_trivially_copyable_v<OpenGLState>); | ||||
|  | ||||
| } // namespace OpenGL | ||||
| @@ -7,7 +7,6 @@ | ||||
| #include "common/alignment.h" | ||||
| #include "common/assert.h" | ||||
| #include "common/microprofile.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/gl_stream_buffer.h" | ||||
|  | ||||
| MICROPROFILE_DEFINE(OpenGL_StreamBuffer, "OpenGL", "Stream Buffer Orphaning", | ||||
|   | ||||
| @@ -10,7 +10,6 @@ | ||||
| #include "core/core.h" | ||||
| #include "video_core/morton.h" | ||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/gl_texture_cache.h" | ||||
| #include "video_core/renderer_opengl/utils.h" | ||||
| #include "video_core/texture_cache/surface_base.h" | ||||
|   | ||||
| @@ -575,8 +575,6 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { | ||||
|     }; | ||||
|     glNamedBufferSubData(vertex_buffer.handle, 0, sizeof(vertices), std::data(vertices)); | ||||
|  | ||||
|     state.Apply(); | ||||
|  | ||||
|     // TODO: Signal state tracker about these changes | ||||
|     program_manager.UseVertexShader(vertex_program.handle); | ||||
|     program_manager.UseGeometryShader(0); | ||||
| @@ -616,9 +614,6 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { | ||||
|  | ||||
|     glClear(GL_COLOR_BUFFER_BIT); | ||||
|     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||||
|  | ||||
|     // Restore default state | ||||
|     state.Apply(); | ||||
| } | ||||
|  | ||||
| void RendererOpenGL::TryPresent(int timeout_ms) { | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
| #include "video_core/renderer_base.h" | ||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_shader_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
|  | ||||
| namespace Core { | ||||
| class System; | ||||
| @@ -92,8 +91,6 @@ private: | ||||
|     Core::Frontend::EmuWindow& emu_window; | ||||
|     Core::System& system; | ||||
|  | ||||
|     OpenGLState state; | ||||
|  | ||||
|     // OpenGL object IDs | ||||
|     OGLBuffer vertex_buffer; | ||||
|     OGLProgram vertex_program; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user