summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-12-26 16:15:24 -0300
committerGravatar ReinUsesLisp2020-02-28 17:56:35 -0300
commitb92dfcd7f2a03b04a1d6090d7dd2684986f7adee (patch)
treed6c0be18f991e4a36c9e8018cba19137cb943459 /src
parentgl_state: Remove program tracking (diff)
downloadyuzu-b92dfcd7f2a03b04a1d6090d7dd2684986f7adee.tar.gz
yuzu-b92dfcd7f2a03b04a1d6090d7dd2684986f7adee.tar.xz
yuzu-b92dfcd7f2a03b04a1d6090d7dd2684986f7adee.zip
gl_state: Remove completely
Diffstat (limited to 'src')
-rw-r--r--src/video_core/CMakeLists.txt2
-rw-r--r--src/video_core/renderer_opengl/gl_framebuffer_cache.cpp1
-rw-r--r--src/video_core/renderer_opengl/gl_framebuffer_cache.h2
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp13
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h5
-rw-r--r--src/video_core/renderer_opengl/gl_resource_manager.cpp1
-rw-r--r--src/video_core/renderer_opengl/gl_shader_manager.h1
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp90
-rw-r--r--src/video_core/renderer_opengl/gl_state.h31
-rw-r--r--src/video_core/renderer_opengl/gl_stream_buffer.cpp1
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp1
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp5
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.h3
13 files changed, 4 insertions, 152 deletions
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index db65e7bf3..b89752882 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -71,8 +71,6 @@ add_library(video_core STATIC
71 renderer_opengl/gl_shader_util.h 71 renderer_opengl/gl_shader_util.h
72 renderer_opengl/gl_state_tracker.cpp 72 renderer_opengl/gl_state_tracker.cpp
73 renderer_opengl/gl_state_tracker.h 73 renderer_opengl/gl_state_tracker.h
74 renderer_opengl/gl_state.cpp
75 renderer_opengl/gl_state.h
76 renderer_opengl/gl_stream_buffer.cpp 74 renderer_opengl/gl_stream_buffer.cpp
77 renderer_opengl/gl_stream_buffer.h 75 renderer_opengl/gl_stream_buffer.h
78 renderer_opengl/gl_texture_cache.cpp 76 renderer_opengl/gl_texture_cache.cpp
diff --git a/src/video_core/renderer_opengl/gl_framebuffer_cache.cpp b/src/video_core/renderer_opengl/gl_framebuffer_cache.cpp
index d624a6272..b8a512cb6 100644
--- a/src/video_core/renderer_opengl/gl_framebuffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_framebuffer_cache.cpp
@@ -11,7 +11,6 @@
11#include "common/common_types.h" 11#include "common/common_types.h"
12#include "video_core/engines/maxwell_3d.h" 12#include "video_core/engines/maxwell_3d.h"
13#include "video_core/renderer_opengl/gl_framebuffer_cache.h" 13#include "video_core/renderer_opengl/gl_framebuffer_cache.h"
14#include "video_core/renderer_opengl/gl_state.h"
15 14
16namespace OpenGL { 15namespace OpenGL {
17 16
diff --git a/src/video_core/renderer_opengl/gl_framebuffer_cache.h b/src/video_core/renderer_opengl/gl_framebuffer_cache.h
index 02ec80ae9..8f698fee0 100644
--- a/src/video_core/renderer_opengl/gl_framebuffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_framebuffer_cache.h
@@ -13,7 +13,6 @@
13#include "common/common_types.h" 13#include "common/common_types.h"
14#include "video_core/engines/maxwell_3d.h" 14#include "video_core/engines/maxwell_3d.h"
15#include "video_core/renderer_opengl/gl_resource_manager.h" 15#include "video_core/renderer_opengl/gl_resource_manager.h"
16#include "video_core/renderer_opengl/gl_state.h"
17#include "video_core/renderer_opengl/gl_texture_cache.h" 16#include "video_core/renderer_opengl/gl_texture_cache.h"
18 17
19namespace OpenGL { 18namespace OpenGL {
@@ -63,7 +62,6 @@ public:
63private: 62private:
64 OGLFramebuffer CreateFramebuffer(const FramebufferCacheKey& key); 63 OGLFramebuffer CreateFramebuffer(const FramebufferCacheKey& key);
65 64
66 OpenGLState local_state;
67 std::unordered_map<FramebufferCacheKey, OGLFramebuffer> cache; 65 std::unordered_map<FramebufferCacheKey, OGLFramebuffer> cache;
68}; 66};
69 67
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 84c4d110c..3ce2a7124 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -359,8 +359,8 @@ void RasterizerOpenGL::ConfigureFramebuffers() {
359 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer_cache.GetFramebuffer(key)); 359 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer_cache.GetFramebuffer(key));
360} 360}
361 361
362void RasterizerOpenGL::ConfigureClearFramebuffer(OpenGLState& current_state, bool using_color_fb, 362void RasterizerOpenGL::ConfigureClearFramebuffer(bool using_color_fb, bool using_depth_fb,
363 bool using_depth_fb, bool using_stencil_fb) { 363 bool using_stencil_fb) {
364 using VideoCore::Surface::SurfaceType; 364 using VideoCore::Surface::SurfaceType;
365 365
366 auto& gpu = system.GPU().Maxwell3D(); 366 auto& gpu = system.GPU().Maxwell3D();
@@ -396,10 +396,6 @@ void RasterizerOpenGL::Clear() {
396 bool use_depth{}; 396 bool use_depth{};
397 bool use_stencil{}; 397 bool use_stencil{};
398 398
399 OpenGLState prev_state{OpenGLState::GetCurState()};
400 SCOPE_EXIT({ prev_state.Apply(); });
401
402 OpenGLState clear_state{OpenGLState::GetCurState()};
403 if (regs.clear_buffers.R || regs.clear_buffers.G || regs.clear_buffers.B || 399 if (regs.clear_buffers.R || regs.clear_buffers.G || regs.clear_buffers.B ||
404 regs.clear_buffers.A) { 400 regs.clear_buffers.A) {
405 use_color = true; 401 use_color = true;
@@ -430,7 +426,7 @@ void RasterizerOpenGL::Clear() {
430 return; 426 return;
431 } 427 }
432 428
433 ConfigureClearFramebuffer(clear_state, use_color, use_depth, use_stencil); 429 ConfigureClearFramebuffer(use_color, use_depth, use_stencil);
434 430
435 SyncRasterizeEnable(); 431 SyncRasterizeEnable();
436 if (regs.clear_flags.scissor) { 432 if (regs.clear_flags.scissor) {
@@ -444,8 +440,6 @@ void RasterizerOpenGL::Clear() {
444 440
445 UNIMPLEMENTED_IF(regs.clear_flags.viewport); 441 UNIMPLEMENTED_IF(regs.clear_flags.viewport);
446 442
447 clear_state.Apply();
448
449 if (use_color) { 443 if (use_color) {
450 glClearBufferfv(GL_COLOR, 0, regs.clear_color); 444 glClearBufferfv(GL_COLOR, 0, regs.clear_color);
451 } 445 }
@@ -548,7 +542,6 @@ void RasterizerOpenGL::Draw(bool is_indexed, bool is_instanced) {
548 bind_ssbo_pushbuffer.Bind(); 542 bind_ssbo_pushbuffer.Bind();
549 543
550 program_manager.Update(); 544 program_manager.Update();
551 state.Apply();
552 545
553 if (texture_cache.TextureBarrier()) { 546 if (texture_cache.TextureBarrier()) {
554 glTextureBarrier(); 547 glTextureBarrier();
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index b8158c152..48443bdff 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -30,7 +30,6 @@
30#include "video_core/renderer_opengl/gl_shader_cache.h" 30#include "video_core/renderer_opengl/gl_shader_cache.h"
31#include "video_core/renderer_opengl/gl_shader_decompiler.h" 31#include "video_core/renderer_opengl/gl_shader_decompiler.h"
32#include "video_core/renderer_opengl/gl_shader_manager.h" 32#include "video_core/renderer_opengl/gl_shader_manager.h"
33#include "video_core/renderer_opengl/gl_state.h"
34#include "video_core/renderer_opengl/gl_texture_cache.h" 33#include "video_core/renderer_opengl/gl_texture_cache.h"
35#include "video_core/renderer_opengl/utils.h" 34#include "video_core/renderer_opengl/utils.h"
36#include "video_core/textures/texture.h" 35#include "video_core/textures/texture.h"
@@ -86,8 +85,7 @@ private:
86 /// Configures the color and depth framebuffer states. 85 /// Configures the color and depth framebuffer states.
87 void ConfigureFramebuffers(); 86 void ConfigureFramebuffers();
88 87
89 void ConfigureClearFramebuffer(OpenGLState& current_state, bool using_color_fb, 88 void ConfigureClearFramebuffer(bool using_color_fb, bool using_depth_fb, bool using_stencil_fb);
90 bool using_depth_fb, bool using_stencil_fb);
91 89
92 /// Configures the current constbuffers to use for the draw command. 90 /// Configures the current constbuffers to use for the draw command.
93 void SetupDrawConstBuffers(std::size_t stage_index, const Shader& shader); 91 void SetupDrawConstBuffers(std::size_t stage_index, const Shader& shader);
@@ -208,7 +206,6 @@ private:
208 void SetupShaders(GLenum primitive_mode); 206 void SetupShaders(GLenum primitive_mode);
209 207
210 const Device device; 208 const Device device;
211 OpenGLState state;
212 209
213 TextureCacheOpenGL texture_cache; 210 TextureCacheOpenGL texture_cache;
214 ShaderCacheOpenGL shader_cache; 211 ShaderCacheOpenGL shader_cache;
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.cpp b/src/video_core/renderer_opengl/gl_resource_manager.cpp
index 404fd6556..97803d480 100644
--- a/src/video_core/renderer_opengl/gl_resource_manager.cpp
+++ b/src/video_core/renderer_opengl/gl_resource_manager.cpp
@@ -8,7 +8,6 @@
8#include "common/microprofile.h" 8#include "common/microprofile.h"
9#include "video_core/renderer_opengl/gl_resource_manager.h" 9#include "video_core/renderer_opengl/gl_resource_manager.h"
10#include "video_core/renderer_opengl/gl_shader_util.h" 10#include "video_core/renderer_opengl/gl_shader_util.h"
11#include "video_core/renderer_opengl/gl_state.h"
12 11
13MICROPROFILE_DEFINE(OpenGL_ResourceCreation, "OpenGL", "Resource Creation", MP_RGB(128, 128, 192)); 12MICROPROFILE_DEFINE(OpenGL_ResourceCreation, "OpenGL", "Resource Creation", MP_RGB(128, 128, 192));
14MICROPROFILE_DEFINE(OpenGL_ResourceDeletion, "OpenGL", "Resource Deletion", MP_RGB(128, 128, 192)); 13MICROPROFILE_DEFINE(OpenGL_ResourceDeletion, "OpenGL", "Resource Deletion", MP_RGB(128, 128, 192));
diff --git a/src/video_core/renderer_opengl/gl_shader_manager.h b/src/video_core/renderer_opengl/gl_shader_manager.h
index db23a27e8..e94cd75aa 100644
--- a/src/video_core/renderer_opengl/gl_shader_manager.h
+++ b/src/video_core/renderer_opengl/gl_shader_manager.h
@@ -9,7 +9,6 @@
9#include <glad/glad.h> 9#include <glad/glad.h>
10 10
11#include "video_core/renderer_opengl/gl_resource_manager.h" 11#include "video_core/renderer_opengl/gl_resource_manager.h"
12#include "video_core/renderer_opengl/gl_state.h"
13#include "video_core/renderer_opengl/maxwell_to_gl.h" 12#include "video_core/renderer_opengl/maxwell_to_gl.h"
14 13
15namespace OpenGL::GLShader { 14namespace OpenGL::GLShader {
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
deleted file mode 100644
index e8a23d41d..000000000
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
1// Copyright 2015 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <algorithm>
6#include <iterator>
7#include <glad/glad.h>
8#include "common/assert.h"
9#include "common/logging/log.h"
10#include "common/microprofile.h"
11#include "video_core/renderer_opengl/gl_state.h"
12
13MICROPROFILE_DEFINE(OpenGL_State, "OpenGL", "State Change", MP_RGB(192, 128, 128));
14
15namespace OpenGL {
16
17using Maxwell = Tegra::Engines::Maxwell3D::Regs;
18
19OpenGLState OpenGLState::cur_state;
20
21namespace {
22
23template <typename T>
24bool UpdateValue(T& current_value, const T new_value) {
25 const bool changed = current_value != new_value;
26 current_value = new_value;
27 return changed;
28}
29
30template <typename T1, typename T2>
31bool UpdateTie(T1 current_value, const T2 new_value) {
32 const bool changed = current_value != new_value;
33 current_value = new_value;
34 return changed;
35}
36
37template <typename T>
38std::optional<std::pair<GLuint, GLsizei>> UpdateArray(T& current_values, const T& new_values) {
39 std::optional<std::size_t> first;
40 std::size_t last;
41 for (std::size_t i = 0; i < std::size(current_values); ++i) {
42 if (!UpdateValue(current_values[i], new_values[i])) {
43 continue;
44 }
45 if (!first) {
46 first = i;
47 }
48 last = i;
49 }
50 if (!first) {
51 return std::nullopt;
52 }
53 return std::make_pair(static_cast<GLuint>(*first), static_cast<GLsizei>(last - *first + 1));
54}
55
56void Enable(GLenum cap, bool enable) {
57 if (enable) {
58 glEnable(cap);
59 } else {
60 glDisable(cap);
61 }
62}
63
64void Enable(GLenum cap, GLuint index, bool enable) {
65 if (enable) {
66 glEnablei(cap, index);
67 } else {
68 glDisablei(cap, index);
69 }
70}
71
72void Enable(GLenum cap, bool& current_value, bool new_value) {
73 if (UpdateValue(current_value, new_value)) {
74 Enable(cap, new_value);
75 }
76}
77
78void Enable(GLenum cap, GLuint index, bool& current_value, bool new_value) {
79 if (UpdateValue(current_value, new_value)) {
80 Enable(cap, index, new_value);
81 }
82}
83
84} // Anonymous namespace
85
86OpenGLState::OpenGLState() = default;
87
88void OpenGLState::Apply() {}
89
90} // namespace OpenGL
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h
deleted file mode 100644
index f62e2e2e1..000000000
--- a/src/video_core/renderer_opengl/gl_state.h
+++ /dev/null
@@ -1,31 +0,0 @@
1// Copyright 2015 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <array>
8#include <type_traits>
9#include <glad/glad.h>
10#include "video_core/engines/maxwell_3d.h"
11
12namespace OpenGL {
13
14class OpenGLState {
15public:
16 OpenGLState();
17
18 /// Get the currently active OpenGL state
19 static OpenGLState GetCurState() {
20 return cur_state;
21 }
22
23 /// Apply this state as the current OpenGL state
24 void Apply();
25
26private:
27 static OpenGLState cur_state;
28};
29static_assert(std::is_trivially_copyable_v<OpenGLState>);
30
31} // namespace OpenGL
diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.cpp b/src/video_core/renderer_opengl/gl_stream_buffer.cpp
index 35ba334e4..6ec328c53 100644
--- a/src/video_core/renderer_opengl/gl_stream_buffer.cpp
+++ b/src/video_core/renderer_opengl/gl_stream_buffer.cpp
@@ -7,7 +7,6 @@
7#include "common/alignment.h" 7#include "common/alignment.h"
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/microprofile.h" 9#include "common/microprofile.h"
10#include "video_core/renderer_opengl/gl_state.h"
11#include "video_core/renderer_opengl/gl_stream_buffer.h" 10#include "video_core/renderer_opengl/gl_stream_buffer.h"
12 11
13MICROPROFILE_DEFINE(OpenGL_StreamBuffer, "OpenGL", "Stream Buffer Orphaning", 12MICROPROFILE_DEFINE(OpenGL_StreamBuffer, "OpenGL", "Stream Buffer Orphaning",
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 5fe6aa5d6..e2a58f0ad 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -10,7 +10,6 @@
10#include "core/core.h" 10#include "core/core.h"
11#include "video_core/morton.h" 11#include "video_core/morton.h"
12#include "video_core/renderer_opengl/gl_resource_manager.h" 12#include "video_core/renderer_opengl/gl_resource_manager.h"
13#include "video_core/renderer_opengl/gl_state.h"
14#include "video_core/renderer_opengl/gl_texture_cache.h" 13#include "video_core/renderer_opengl/gl_texture_cache.h"
15#include "video_core/renderer_opengl/utils.h" 14#include "video_core/renderer_opengl/utils.h"
16#include "video_core/texture_cache/surface_base.h" 15#include "video_core/texture_cache/surface_base.h"
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index ace3aec88..5e16bb99b 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -575,8 +575,6 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
575 }; 575 };
576 glNamedBufferSubData(vertex_buffer.handle, 0, sizeof(vertices), std::data(vertices)); 576 glNamedBufferSubData(vertex_buffer.handle, 0, sizeof(vertices), std::data(vertices));
577 577
578 state.Apply();
579
580 // TODO: Signal state tracker about these changes 578 // TODO: Signal state tracker about these changes
581 program_manager.UseVertexShader(vertex_program.handle); 579 program_manager.UseVertexShader(vertex_program.handle);
582 program_manager.UseGeometryShader(0); 580 program_manager.UseGeometryShader(0);
@@ -616,9 +614,6 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
616 614
617 glClear(GL_COLOR_BUFFER_BIT); 615 glClear(GL_COLOR_BUFFER_BIT);
618 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 616 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
619
620 // Restore default state
621 state.Apply();
622} 617}
623 618
624void RendererOpenGL::TryPresent(int timeout_ms) { 619void RendererOpenGL::TryPresent(int timeout_ms) {
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h
index f1225269f..ca670e7c8 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.h
+++ b/src/video_core/renderer_opengl/renderer_opengl.h
@@ -11,7 +11,6 @@
11#include "video_core/renderer_base.h" 11#include "video_core/renderer_base.h"
12#include "video_core/renderer_opengl/gl_resource_manager.h" 12#include "video_core/renderer_opengl/gl_resource_manager.h"
13#include "video_core/renderer_opengl/gl_shader_manager.h" 13#include "video_core/renderer_opengl/gl_shader_manager.h"
14#include "video_core/renderer_opengl/gl_state.h"
15 14
16namespace Core { 15namespace Core {
17class System; 16class System;
@@ -92,8 +91,6 @@ private:
92 Core::Frontend::EmuWindow& emu_window; 91 Core::Frontend::EmuWindow& emu_window;
93 Core::System& system; 92 Core::System& system;
94 93
95 OpenGLState state;
96
97 // OpenGL object IDs 94 // OpenGL object IDs
98 OGLBuffer vertex_buffer; 95 OGLBuffer vertex_buffer;
99 OGLProgram vertex_program; 96 OGLProgram vertex_program;