diff options
| author | Markus Wick <markus@selfnet.de> | 2015-08-06 19:46:58 +0200 |
|---|---|---|
| committer | Markus Wick <markus@selfnet.de> | 2015-08-06 19:46:58 +0200 |
| commit | debb1fbfdd584b6d23e8e2389f8ce6fa06ea8306 (patch) | |
| tree | 4215b2815d00860a7da8fd77906cfb79a59fb68f /Source/Core/VideoBackends | |
| parent | 3f781bcaf4a8403da582afb676ae2bd3995e477d (diff) | |
| parent | d3cf4034de449570f7b01d98047544bde06047ed (diff) | |
Merge pull request #2775 from degasus/master
DriverDetails: Disable GL_ARB_copy_image on mesa.
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/main.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.h | 1 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/TextureCache.cpp | 8 |
4 files changed, 13 insertions, 10 deletions
diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 7671e3a027..c172d81127 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -84,7 +84,6 @@ void InitBackendInfo() g_Config.backend_info.bSupportsPostProcessing = false; g_Config.backend_info.bSupportsPaletteConversion = true; g_Config.backend_info.bSupportsClipControl = true; - g_Config.backend_info.bSupportsCopySubImage = true; IDXGIFactory* factory; IDXGIAdapter* ad; diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 79b9e5b5a1..a81eb675b6 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -303,7 +303,7 @@ static void InitDriverInfo() int major = 0; int minor = 0; int release = 0; - sscanf(g_ogl_config.gl_version, "%*s Mesa %d.%d.%d", &major, &minor, &release); + sscanf(g_ogl_config.gl_version, "%*s (Core Profile) Mesa %d.%d.%d", &major, &minor, &release); version = 100*major + 10*minor + release; } break; @@ -469,10 +469,11 @@ Renderer::Renderer() g_Config.backend_info.bSupportsGeometryShaders = GLExtensions::Version() >= 320; g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_ARB_texture_buffer_object"); g_Config.backend_info.bSupportsClipControl = GLExtensions::Supports("GL_ARB_clip_control"); - g_Config.backend_info.bSupportsCopySubImage = GLExtensions::Supports("GL_ARB_copy_image") || - GLExtensions::Supports("GL_NV_copy_image") || - GLExtensions::Supports("GL_EXT_copy_image") || - GLExtensions::Supports("GL_OES_copy_image"); + g_ogl_config.bSupportsCopySubImage = (GLExtensions::Supports("GL_ARB_copy_image") || + GLExtensions::Supports("GL_NV_copy_image") || + GLExtensions::Supports("GL_EXT_copy_image") || + GLExtensions::Supports("GL_OES_copy_image")) && + !DriverDetails::HasBug(DriverDetails::BUG_BROKENCOPYIMAGE); // Desktop OpenGL supports the binding layout if it supports 420pack // OpenGL ES 3.1 supports it implicitly without an extension @@ -603,7 +604,7 @@ Renderer::Renderer() g_ogl_config.bSupportSampleShading ? "" : "SSAA ", g_ActiveConfig.backend_info.bSupportsGSInstancing ? "" : "GSInstancing ", g_ActiveConfig.backend_info.bSupportsClipControl ? "" : "ClipControl ", - g_ActiveConfig.backend_info.bSupportsCopySubImage ? "" : "CopyImageSubData " + g_ogl_config.bSupportsCopySubImage ? "" : "CopyImageSubData " ); s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; diff --git a/Source/Core/VideoBackends/OGL/Render.h b/Source/Core/VideoBackends/OGL/Render.h index e2b3d0aa24..78f8a76ead 100644 --- a/Source/Core/VideoBackends/OGL/Render.h +++ b/Source/Core/VideoBackends/OGL/Render.h @@ -36,6 +36,7 @@ struct VideoConfig bool bSupportViewportFloat; bool bSupportsAEP; bool bSupportsDebug; + bool bSupportsCopySubImage; const char* gl_vendor; const char* gl_renderer; diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp index 92f2b8a788..c11c9dfc45 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp @@ -147,7 +147,7 @@ void TextureCache::TCacheEntry::CopyRectangleFromTexture( TCacheEntry* srcentry = (TCacheEntry*)source; if (srcrect.GetWidth() == dstrect.GetWidth() && srcrect.GetHeight() == dstrect.GetHeight() - && g_ActiveConfig.backend_info.bSupportsCopySubImage) + && g_ogl_config.bSupportsCopySubImage) { glCopyImageSubData( srcentry->texture, @@ -167,9 +167,11 @@ void TextureCache::TCacheEntry::CopyRectangleFromTexture( 1); return; } - else if (!config.rendertarget) + else if (!framebuffer) { - return; + glGenFramebuffers(1, &framebuffer); + FramebufferManager::SetFramebuffer(framebuffer); + FramebufferManager::FramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_ARRAY, texture, 0); } g_renderer->ResetAPIState(); FramebufferManager::SetFramebuffer(framebuffer); |
