diff --git a/src/video_core/rasterizer_cache/pixel_format.h b/src/video_core/rasterizer_cache/pixel_format.h index 951ad0cb7..ab4dc2a76 100644 --- a/src/video_core/rasterizer_cache/pixel_format.h +++ b/src/video_core/rasterizer_cache/pixel_format.h @@ -103,6 +103,7 @@ inline PixelFormat PixelFormatFromDepthFormat(Pica::FramebufferRegs::DepthFormat } inline constexpr PixelFormat PixelFormatFromGPUPixelFormat(GPU::Regs::PixelFormat format) { + const u32 format_index = static_cast(format); switch (format) { // RGB565 and RGB5A1 are switched in PixelFormat compared to ColorFormat case GPU::Regs::PixelFormat::RGB565: @@ -110,7 +111,7 @@ inline constexpr PixelFormat PixelFormatFromGPUPixelFormat(GPU::Regs::PixelForma case GPU::Regs::PixelFormat::RGB5A1: return PixelFormat::RGB5A1; default: - return ((unsigned int)format < 5) ? (PixelFormat)format : PixelFormat::Invalid; + return (format_index < 5) ? static_cast(format) : PixelFormat::Invalid; } } @@ -179,7 +180,7 @@ static constexpr u32 GetFormatBpp(PixelFormat format) { case PixelFormat::A4: case PixelFormat::ETC1: return 4; - case PixelFormat::Invalid: + default: return 0; } } diff --git a/src/video_core/regs.h b/src/video_core/regs.h index 53dbfcd6e..c81a4ee23 100644 --- a/src/video_core/regs.h +++ b/src/video_core/regs.h @@ -3,13 +3,6 @@ // Refer to the license.txt file included. #pragma once - -#include -#include -#include - -#include "common/common_funcs.h" -#include "common/common_types.h" #include "video_core/regs_framebuffer.h" #include "video_core/regs_lighting.h" #include "video_core/regs_pipeline.h" diff --git a/src/video_core/regs_framebuffer.h b/src/video_core/regs_framebuffer.h index 596682cbb..c43274540 100644 --- a/src/video_core/regs_framebuffer.h +++ b/src/video_core/regs_framebuffer.h @@ -3,9 +3,7 @@ // Refer to the license.txt file included. #pragma once - #include - #include "common/assert.h" #include "common/bit_field.h" #include "common/common_funcs.h" diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index b8e67b4bc..7e385b61a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -1,28 +1,18 @@ -// Copyright 2015 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include -#include -#include -#include -#include -#include #include "common/alignment.h" #include "common/assert.h" #include "common/logging/log.h" #include "common/math_util.h" #include "common/microprofile.h" -#include "common/vector_math.h" -#include "core/hw/gpu.h" #include "video_core/pica_state.h" #include "video_core/regs_framebuffer.h" #include "video_core/regs_rasterizer.h" -#include "video_core/regs_texturing.h" #include "video_core/renderer_opengl/gl_rasterizer.h" #include "video_core/renderer_opengl/gl_shader_gen.h" #include "video_core/renderer_opengl/gl_vars.h" -#include "video_core/renderer_opengl/pica_to_gl.h" #include "video_core/renderer_opengl/renderer_opengl.h" #include "video_core/video_core.h" @@ -35,6 +25,13 @@ MICROPROFILE_DEFINE(OpenGL_Drawing, "OpenGL", "Drawing", MP_RGB(128, 128, 192)); MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); +#ifdef __APPLE__ +static bool IsVendorIntel() { + std::string gpu_vendor{reinterpret_cast(glGetString(GL_VENDOR))}; + return gpu_vendor == "Intel Inc."; +} +#endif + RasterizerOpenGL::RasterizerOpenGL(Frontend::EmuWindow& emu_window) : vertex_buffer(GL_ARRAY_BUFFER, VERTEX_BUFFER_SIZE), uniform_buffer(GL_UNIFORM_BUFFER, UNIFORM_BUFFER_SIZE, false), @@ -148,15 +145,13 @@ RasterizerOpenGL::RasterizerOpenGL(Frontend::EmuWindow& emu_window) if (IsVendorIntel()) { shader_program_manager = std::make_unique( emu_window, - VideoCore::g_separable_shader_enabled ? GLAD_GL_ARB_separate_shader_objects : false, - is_amd); + VideoCore::g_separable_shader_enabled ? GLAD_GL_ARB_separate_shader_objects : false); } else { shader_program_manager = std::make_unique( - emu_window, GLAD_GL_ARB_separate_shader_objects, is_amd); + emu_window, GLAD_GL_ARB_separate_shader_objects); } #else - shader_program_manager = std::make_unique( - emu_window, GLAD_GL_ARB_separate_shader_objects); + shader_program_manager = std::make_unique(emu_window, true); #endif glEnable(GL_BLEND); diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index a6557d4e7..21068fc9e 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -1,28 +1,15 @@ -// Copyright 2015 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once - -#include -#include -#include -#include -#include -#include -#include "common/bit_field.h" -#include "common/common_types.h" #include "common/vector_math.h" #include "core/hw/gpu.h" -#include "video_core/pica_state.h" #include "video_core/pica_types.h" #include "video_core/rasterizer_interface.h" -#include "video_core/regs_framebuffer.h" #include "video_core/regs_lighting.h" -#include "video_core/regs_rasterizer.h" #include "video_core/regs_texturing.h" #include "video_core/rasterizer_cache/rasterizer_cache.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" #include "video_core/renderer_opengl/gl_stream_buffer.h" diff --git a/src/video_core/renderer_opengl/gl_resource_manager.cpp b/src/video_core/renderer_opengl/gl_resource_manager.cpp index f185b2355..7d496f8d3 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.cpp +++ b/src/video_core/renderer_opengl/gl_resource_manager.cpp @@ -1,10 +1,7 @@ -// Copyright 2015 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include -#include -#include "common/common_types.h" #include "common/microprofile.h" #include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_shader_util.h" diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h index 004e1db01..0c306b584 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.h +++ b/src/video_core/renderer_opengl/gl_resource_manager.h @@ -1,4 +1,4 @@ -// Copyright 2015 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -8,7 +8,6 @@ #include #include #include "common/common_types.h" -#include "video_core/renderer_opengl/gl_shader_util.h" namespace OpenGL { diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index ba15e93d4..a5435e864 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -1,21 +1,13 @@ -// Copyright 2015 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include -#include #include #include -#include "common/assert.h" -#include "common/bit_field.h" #include "common/bit_set.h" #include "common/logging/log.h" #include "core/core.h" -#include "video_core/regs_framebuffer.h" -#include "video_core/regs_lighting.h" -#include "video_core/regs_rasterizer.h" -#include "video_core/regs_texturing.h" -#include "video_core/renderer_opengl/gl_rasterizer.h" +#include "video_core/pica_state.h" #include "video_core/renderer_opengl/gl_shader_decompiler.h" #include "video_core/renderer_opengl/gl_shader_gen.h" #include "video_core/renderer_opengl/gl_shader_util.h" diff --git a/src/video_core/renderer_opengl/gl_shader_gen.h b/src/video_core/renderer_opengl/gl_shader_gen.h index eb0e4cc23..027573216 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.h +++ b/src/video_core/renderer_opengl/gl_shader_gen.h @@ -3,13 +3,8 @@ // Refer to the license.txt file included. #pragma once - -#include -#include #include #include -#include -#include #include "common/hash.h" #include "video_core/regs.h" #include "video_core/shader/shader.h" diff --git a/src/video_core/renderer_opengl/gl_shader_manager.cpp b/src/video_core/renderer_opengl/gl_shader_manager.cpp index d928e7b34..5283fe59c 100644 --- a/src/video_core/renderer_opengl/gl_shader_manager.cpp +++ b/src/video_core/renderer_opengl/gl_shader_manager.cpp @@ -1,16 +1,18 @@ -// Copyright 2018 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include #include #include -#include #include +#include #include "core/frontend/scope_acquire_context.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_shader_disk_cache.h" #include "video_core/renderer_opengl/gl_shader_manager.h" #include "video_core/renderer_opengl/gl_vars.h" +#include "video_core/renderer_opengl/gl_state.h" #include "video_core/video_core.h" namespace OpenGL { diff --git a/src/video_core/renderer_opengl/gl_shader_manager.h b/src/video_core/renderer_opengl/gl_shader_manager.h index e914cc7c8..5ad448e0f 100644 --- a/src/video_core/renderer_opengl/gl_shader_manager.h +++ b/src/video_core/renderer_opengl/gl_shader_manager.h @@ -1,22 +1,25 @@ -// Copyright 2018 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include -#include #include "video_core/rasterizer_interface.h" -#include "video_core/regs_lighting.h" -#include "video_core/renderer_opengl/gl_resource_manager.h" -#include "video_core/renderer_opengl/gl_shader_gen.h" -#include "video_core/renderer_opengl/gl_state.h" #include "video_core/renderer_opengl/pica_to_gl.h" namespace Core { class System; } +namespace Pica { +struct Regs; +struct ShaderRegs; +namespace Shader { +struct ShaderSetup; +} +} + namespace OpenGL { enum class UniformBindings : GLuint { Common, VS, GS }; @@ -96,6 +99,8 @@ static_assert( static_assert(sizeof(VSUniformData) < 16384, "VSUniformData structure must be less than 16kb as per the OpenGL spec"); +class OpenGLState; + /// A class that manage different shader stages and configures them with given config data. class ShaderProgramManager { public: diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.cpp b/src/video_core/renderer_opengl/gl_stream_buffer.cpp index e100cc486..7985906c5 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.cpp +++ b/src/video_core/renderer_opengl/gl_stream_buffer.cpp @@ -1,9 +1,7 @@ -// Copyright 2018 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include -#include #include "common/alignment.h" #include "common/assert.h" #include "common/microprofile.h" diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.h b/src/video_core/renderer_opengl/gl_stream_buffer.h index ae7961bd7..da978735d 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.h +++ b/src/video_core/renderer_opengl/gl_stream_buffer.h @@ -1,12 +1,9 @@ -// Copyright 2018 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once - #include -#include -#include "common/common_types.h" #include "video_core/renderer_opengl/gl_resource_manager.h" namespace OpenGL { diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 4829a5b08..725fc8685 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -1,27 +1,14 @@ -// Copyright 2014 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include "common/assert.h" -#include "common/bit_field.h" #include "common/logging/log.h" #include "common/microprofile.h" #include "core/core.h" -#include "core/core_timing.h" #include "core/dumping/backend.h" #include "core/frontend/emu_window.h" #include "core/frontend/framebuffer_layout.h" -#include "core/hw/gpu.h" #include "core/hw/hw.h" #include "core/hw/lcd.h" #include "core/memory.h" @@ -30,6 +17,7 @@ #include "video_core/debug_utils/debug_utils.h" #include "video_core/rasterizer_interface.h" #include "video_core/renderer_opengl/gl_state.h" +#include "video_core/renderer_opengl/gl_shader_util.h" #include "video_core/renderer_opengl/gl_vars.h" #include "video_core/renderer_opengl/post_processing_opengl.h" #include "video_core/renderer_opengl/renderer_opengl.h" @@ -526,7 +514,6 @@ void RendererOpenGL::RenderToMailbox(const Layout::FramebufferLayout& layout, mailbox->ReloadRenderFrame(frame, layout.width, layout.height); } - GLuint render_texture = frame->color.handle; state.draw.draw_framebuffer = frame->render.handle; state.Apply(); DrawScreens(layout, flipped); @@ -1200,6 +1187,8 @@ static const char* GetSource(GLenum source) { UNREACHABLE(); } #undef RET + + return ""; } static const char* GetType(GLenum type) { @@ -1218,6 +1207,8 @@ static const char* GetType(GLenum type) { UNREACHABLE(); } #undef RET + + return ""; } static void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity, diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index 634d26ca4..87758d120 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -1,13 +1,10 @@ -// Copyright 2014 Citra Emulator Project +// Copyright 2022 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include -#include -#include "common/common_types.h" -#include "common/math_util.h" #include "core/hw/gpu.h" #include "video_core/renderer_base.h" #include "video_core/renderer_opengl/frame_dumper_opengl.h"