From 3c7de2affa03b0aaa79a8d42774fdd085d6d6893 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 19 Feb 2023 19:52:10 -0800 Subject: [PATCH 1/2] Fix rendering in dolphin --- src/Gl.cpp | 10 ++++++++++ src/Gl.h | 2 ++ src/components/Video.cpp | 1 + 3 files changed, 13 insertions(+) diff --git a/src/Gl.cpp b/src/Gl.cpp index 8c1a17cb..697d1102 100644 --- a/src/Gl.cpp +++ b/src/Gl.cpp @@ -57,6 +57,8 @@ static PFNGLRENDERBUFFERSTORAGEPROC s_glRenderbufferStorage; static PFNGLBLENDEQUATIONEXTPROC s_glBlendEquationEXT; +static PFNGLBINDSAMPLERPROC s_glBindSampler; + static void* getProcAddress(const char* symbol) { void* address = SDL_GL_GetProcAddress(symbol); @@ -179,6 +181,8 @@ void Gl::init(libretro::LoggerComponent* logger) s_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)getProcAddress("glDeleteRenderbuffers"); s_glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)getProcAddress("glBlendEquationEXT"); + + s_glBindSampler = (PFNGLBINDSAMPLERPROC)getProcAddress("glBindSampler"); } bool Gl::ok() @@ -600,3 +604,9 @@ void Gl::drawArrays(GLenum mode, GLint first, GLsizei count) check(__FUNCTION__); } +void Gl::bindSampler(GLuint unit, GLuint sampler) +{ + if (!s_ok) return; + s_glBindSampler(unit, sampler); + check(__FUNCTION__); +} diff --git a/src/Gl.h b/src/Gl.h index b2ac4610..7e6eecad 100644 --- a/src/Gl.h +++ b/src/Gl.h @@ -75,6 +75,8 @@ namespace Gl void viewport(GLint x, GLint y, GLsizei width, GLsizei height); void drawArrays(GLenum mode, GLint first, GLsizei count); + void bindSampler(GLuint unit, GLuint sampler); + int getVersion(); } diff --git a/src/components/Video.cpp b/src/components/Video.cpp index 1ab7ecaf..bdb9c3ab 100644 --- a/src/components/Video.cpp +++ b/src/components/Video.cpp @@ -787,5 +787,6 @@ void Video::postHwRenderReset() const Gl::disable(GL_BLEND); Gl::blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Gl::blendEquation(GL_FUNC_ADD); + Gl::bindSampler(0, 0); Gl::clearColor(0.0, 0.0, 0.0, 1.0); } From 0e2d9be8f8ffd914623fbb8c2ea43cc9dce86c2f Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 23 Feb 2023 22:12:55 -0800 Subject: [PATCH 2/2] Free GPU resources when unloading a core. --- src/libretro/Core.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libretro/Core.cpp b/src/libretro/Core.cpp index ba3e202b..bfaddd5c 100644 --- a/src/libretro/Core.cpp +++ b/src/libretro/Core.cpp @@ -440,6 +440,10 @@ bool libretro::Core::loadGame(const char* game_path, void* data, size_t size, st void libretro::Core::destroy() { + if (_needsHardwareRender && _hardwareRenderCallback.context_destroy) { + _hardwareRenderCallback.context_destroy(); + } + if (_gameLoaded) { _core.unloadGame();