mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 08:59:03 -06:00 
			
		
		
		
	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