From c43ae67b3bac38fa65316329a00a1f62dcb9ead6 Mon Sep 17 00:00:00 2001 From: booto Date: Sat, 25 Jul 2015 01:46:41 +0800 Subject: RealXFB sizes don't get scaled by IR When calculating the size of the undisplayed margin in the case where fbWidth != fbStride for RealXFB for displaying in the output window, we do not scale by IR - RealXFB is implicitly 1x. --- Source/Core/VideoBackends/OGL/Render.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 85e7956b09..7fefeaff81 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1456,10 +1456,16 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co xfbSource = (const XFBSource*) xfbSourceList[i]; TargetRectangle drawRc; + TargetRectangle sourceRc; + sourceRc.left = xfbSource->sourceRc.left; + sourceRc.right = xfbSource->sourceRc.right; + sourceRc.top = xfbSource->sourceRc.top; + sourceRc.bottom = xfbSource->sourceRc.bottom; if (g_ActiveConfig.bUseRealXFB) { drawRc = flipped_trc; + sourceRc.right -= fbStride - fbWidth; } else { @@ -1481,18 +1487,12 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co //drawRc.bottom *= vScale; //drawRc.left *= hScale; //drawRc.right *= hScale; + + sourceRc.right -= Renderer::EFBToScaledX(fbStride - fbWidth); } // Tell the OSD Menu about the current internal resolution OSDInternalW = xfbSource->sourceRc.GetWidth(); OSDInternalH = xfbSource->sourceRc.GetHeight(); - TargetRectangle sourceRc; - sourceRc.left = xfbSource->sourceRc.left; - sourceRc.right = xfbSource->sourceRc.right; - sourceRc.top = xfbSource->sourceRc.top; - sourceRc.bottom = xfbSource->sourceRc.bottom; - - sourceRc.right -= Renderer::EFBToScaledX(fbStride - fbWidth); - BlitScreen(sourceRc, drawRc, xfbSource->texture, xfbSource->texWidth, xfbSource->texHeight); } } -- cgit v1.2.3 From 0faba3b01806df0ea74e01257d3cc48ea5538771 Mon Sep 17 00:00:00 2001 From: mirrorbender Date: Mon, 20 Jul 2015 20:12:29 -0400 Subject: Changed the aspect ratio settings to account for NTSC/PAL pixel aspect ratios and VI scaling. --- Source/Core/VideoBackends/OGL/Render.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 7fefeaff81..79b9e5b5a1 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1654,14 +1654,18 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co s_backbuffer_height = H; s_last_efb_scale = g_ActiveConfig.iEFBScale; } - - if (xfbchanged || WindowResized || (s_last_multisample_mode != g_ActiveConfig.iMultisampleMode) || (s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0))) + bool TargetSizeChanged = false; + if (CalculateTargetSize(s_backbuffer_width, s_backbuffer_height)) + { + TargetSizeChanged = true; + } + if (TargetSizeChanged || xfbchanged || WindowResized || (s_last_multisample_mode != g_ActiveConfig.iMultisampleMode) || (s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0))) { s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; UpdateDrawRectangle(s_backbuffer_width, s_backbuffer_height); - if (CalculateTargetSize(s_backbuffer_width, s_backbuffer_height) || s_last_multisample_mode != g_ActiveConfig.iMultisampleMode || s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0)) + if (TargetSizeChanged || s_last_multisample_mode != g_ActiveConfig.iMultisampleMode || s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0)) { s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; -- cgit v1.2.3 From e2f42f8fd07d78293316f3722662464af93d2b08 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 25 Jul 2015 12:10:52 +0200 Subject: OGL: Move copy_image variable into backend. --- Source/Core/VideoBackends/OGL/Render.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 79b9e5b5a1..55d3a76e4a 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -469,10 +469,10 @@ 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"); // Desktop OpenGL supports the binding layout if it supports 420pack // OpenGL ES 3.1 supports it implicitly without an extension @@ -603,7 +603,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; -- cgit v1.2.3 From d3cf4034de449570f7b01d98047544bde06047ed Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 25 Jul 2015 12:20:00 +0200 Subject: DriverDetails: Disable GL_ARB_copy_image on mesa. --- Source/Core/VideoBackends/OGL/Render.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 55d3a76e4a..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_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"); + 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 -- cgit v1.2.3 From b4e4a4cef44365a93ba980c261bdf2f4b8769fef Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 22 Aug 2015 09:12:19 -0500 Subject: Disable OpenGL ES 3.1 on all Qualcomm Adreno devices. Their new driver that supports GLES3.1 + AEP has issues with it. At the very least they don't implement all of the geometry shader features fully which causes shader linker issues when we attempt to use them. I don't have a device so I can't fully test, so until I do I'm going to blanket disable the whole thing. --- Source/Core/VideoBackends/OGL/Render.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index a81eb675b6..e0d48b52e2 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -495,7 +495,7 @@ Renderer::Renderer() if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) { - if (strstr(g_ogl_config.glsl_version, "3.0")) + if (strstr(g_ogl_config.glsl_version, "3.0") || DriverDetails::HasBug(DriverDetails::BUG_BROKENGLES31)) { g_ogl_config.eSupportedGLSLVersion = GLSLES_300; g_ogl_config.bSupportsAEP = false; -- cgit v1.2.3 From 447b1b09e3e141003d0170cb5c51e3e32f1ddb00 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 26 Aug 2015 00:09:32 -0500 Subject: Support OpenGL ES 3.2. OpenGL ES 3.2 adds a few things we care about supporting in core. In particular: - GL_{ARB,EXT,OES}_draw_elements_base_vertex - KHR_Debug - Sample Shading - GL_{ARB,EXT,OES,NV}_copy_image - Geometry shaders - Geometry shader instancing (If they support GL_{EXT,OES}_geometry_point_size) Nvidia was the first to release an OpenGL ES 3.2 driver which I uesd to test this on. This also enables GS Instancing on GLES 3.1 hardware if it supports all of the required extensions. --- Source/Core/VideoBackends/OGL/Render.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index e0d48b52e2..7245290f92 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -150,7 +150,7 @@ static void ApplySSAASettings() { glEnable(GL_SAMPLE_SHADING_ARB); GLfloat min_sample_shading_value = static_cast(s_MSAASamples); - glMinSampleShadingARB(min_sample_shading_value); + glMinSampleShading(min_sample_shading_value); } else { @@ -491,25 +491,42 @@ Renderer::Renderer() g_ogl_config.bSupportSampleShading = GLExtensions::Supports("GL_ARB_sample_shading"); g_ogl_config.bSupportOGL31 = GLExtensions::Version() >= 310; g_ogl_config.bSupportViewportFloat = GLExtensions::Supports("GL_ARB_viewport_array"); - g_ogl_config.bSupportsDebug = GLExtensions::Supports("GL_KHR_debug") || GLExtensions::Supports("GL_ARB_debug_output"); + g_ogl_config.bSupportsDebug = GLExtensions::Supports("GL_KHR_debug") || + GLExtensions::Supports("GL_ARB_debug_output"); if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) { + g_ogl_config.SupportedESPointSize = GLExtensions::Supports("GL_OES_geometry_point_size") ? 1 : GLExtensions::Supports("GL_EXT_geometry_point_size") ? 2 : 0; + if (strstr(g_ogl_config.glsl_version, "3.0") || DriverDetails::HasBug(DriverDetails::BUG_BROKENGLES31)) { g_ogl_config.eSupportedGLSLVersion = GLSLES_300; g_ogl_config.bSupportsAEP = false; g_Config.backend_info.bSupportsGeometryShaders = false; } - else + else if (strstr(g_ogl_config.glsl_version, "3.1")) { g_ogl_config.eSupportedGLSLVersion = GLSLES_310; g_ogl_config.bSupportsAEP = GLExtensions::Supports("GL_ANDROID_extension_pack_es31a"); g_Config.backend_info.bSupportsBindingLayout = true; g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP; + g_Config.backend_info.bSupportsGSInstancing = g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0; //g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_EXT_texture_buffer"); } + else + { + g_ogl_config.eSupportedGLSLVersion = GLSLES_320; + g_ogl_config.bSupportsAEP = GLExtensions::Supports("GL_ANDROID_extension_pack_es31a"); + g_Config.backend_info.bSupportsBindingLayout = true; + g_Config.backend_info.bSupportsEarlyZ = true; + g_Config.backend_info.bSupportsGeometryShaders = true; + g_Config.backend_info.bSupportsGSInstancing = g_ogl_config.SupportedESPointSize > 0; + g_ogl_config.bSupportsCopySubImage = true; + g_ogl_config.bSupportsGLBaseVertex = true; + g_ogl_config.bSupportSampleShading = true; + g_ogl_config.bSupportsDebug = true; + } } else { -- cgit v1.2.3 From 7a35f9285b354c8fd24295e11bcb85a2b99b3de5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 1 Sep 2015 05:23:43 -0500 Subject: [GLES] Support texture_buffer for palette texture conversion. OpenGL ES 3.2 adds this feature to core It was available to GLES 3.1 as GL_{EXT, OES}_texture_buffer as well. For the non-Nvidia vendors that implemented this is: - Qualcomm's Adreno 4xx - IMGTec's PowerVR Rogue --- Source/Core/VideoBackends/OGL/Render.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 7245290f92..4ac2b0462d 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -467,7 +467,9 @@ Renderer::Renderer() g_Config.backend_info.bSupportsBBox = GLExtensions::Supports("GL_ARB_shader_storage_buffer_object"); g_Config.backend_info.bSupportsGSInstancing = GLExtensions::Supports("GL_ARB_gpu_shader5"); g_Config.backend_info.bSupportsGeometryShaders = GLExtensions::Version() >= 320; - g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_ARB_texture_buffer_object"); + g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_ARB_texture_buffer_object") || + GLExtensions::Supports("GL_OES_texture_buffer") || + GLExtensions::Supports("GL_EXT_texture_buffer"); g_Config.backend_info.bSupportsClipControl = GLExtensions::Supports("GL_ARB_clip_control"); g_ogl_config.bSupportsCopySubImage = (GLExtensions::Supports("GL_ARB_copy_image") || GLExtensions::Supports("GL_NV_copy_image") || @@ -497,6 +499,9 @@ Renderer::Renderer() if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) { g_ogl_config.SupportedESPointSize = GLExtensions::Supports("GL_OES_geometry_point_size") ? 1 : GLExtensions::Supports("GL_EXT_geometry_point_size") ? 2 : 0; + g_ogl_config.SupportedESTextureBuffer = GLExtensions::Supports("VERSION_GLES_3_2") ? ES_TEXBUF_TYPE::TEXBUF_CORE : + GLExtensions::Supports("GL_OES_texture_buffer") ? ES_TEXBUF_TYPE::TEXBUF_OES : + GLExtensions::Supports("GL_EXT_texture_buffer") ? ES_TEXBUF_TYPE::TEXBUF_EXT : ES_TEXBUF_TYPE::TEXBUF_NONE; if (strstr(g_ogl_config.glsl_version, "3.0") || DriverDetails::HasBug(DriverDetails::BUG_BROKENGLES31)) { @@ -512,7 +517,6 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP; g_Config.backend_info.bSupportsGSInstancing = g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0; - //g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_EXT_texture_buffer"); } else { @@ -522,6 +526,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsGeometryShaders = true; g_Config.backend_info.bSupportsGSInstancing = g_ogl_config.SupportedESPointSize > 0; + g_Config.backend_info.bSupportsPaletteConversion = true; g_ogl_config.bSupportsCopySubImage = true; g_ogl_config.bSupportsGLBaseVertex = true; g_ogl_config.bSupportSampleShading = true; -- cgit v1.2.3 From 5fa4c8d930a8085286a6e29f2a1729fc9710dd3f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 4 Sep 2015 20:25:59 -0500 Subject: Support EXT_blend_func_extended in GLES. This lets us get dual source blending on GLES targets. --- Source/Core/VideoBackends/OGL/Render.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 4ac2b0462d..82d9621155 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -460,7 +460,8 @@ Renderer::Renderer() glClearDepthf = ClearDepthf; } - g_Config.backend_info.bSupportsDualSourceBlend = GLExtensions::Supports("GL_ARB_blend_func_extended"); + g_Config.backend_info.bSupportsDualSourceBlend = GLExtensions::Supports("GL_ARB_blend_func_extended") || + GLExtensions::Supports("GL_EXT_blend_func_extended"); g_Config.backend_info.bSupportsPrimitiveRestart = !DriverDetails::HasBug(DriverDetails::BUG_PRIMITIVERESTART) && ((GLExtensions::Version() >= 310) || GLExtensions::Supports("GL_NV_primitive_restart")); g_Config.backend_info.bSupportsEarlyZ = GLExtensions::Supports("GL_ARB_shader_image_load_store"); -- cgit v1.2.3 From 961873827853891aba6bc43243c01bf70e2c1f4b Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 4 Sep 2015 23:45:35 -0500 Subject: Remove all of our workarounds for Qualcomm devices we don't support anymore. --- Source/Core/VideoBackends/OGL/Render.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 82d9621155..638685d92c 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1705,30 +1705,25 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co } // --------------------------------------------------------------------- - if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENSWAP)) - { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Reset viewport for drawing text - glViewport(0, 0, GLInterface->GetBackBufferWidth(), GLInterface->GetBackBufferHeight()); + // Reset viewport for drawing text + glViewport(0, 0, GLInterface->GetBackBufferWidth(), GLInterface->GetBackBufferHeight()); - ShowEfbCopyRegions(); - DrawDebugText(); + ShowEfbCopyRegions(); + DrawDebugText(); + + // Do our OSD callbacks + OSD::DoCallbacks(OSD::OSD_ONFRAME); + OSD::DrawMessages(); - // Do our OSD callbacks - OSD::DoCallbacks(OSD::OSD_ONFRAME); - OSD::DrawMessages(); - } // Copy the rendered frame to the real window GLInterface->Swap(); // Clear framebuffer - if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENSWAP)) - { - glClearColor(0, 0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (s_vsync != g_ActiveConfig.IsVSync()) { -- cgit v1.2.3 From 7650117c266b3eed1c3bdae0feb2828a6482bfe0 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 1 Sep 2015 00:17:24 -0500 Subject: Properly support MSAA and SSAA as separate features(+GLES) SSAA relies on MSAA being active to work. We only supports 4x SSAA while in fact you can enable SSAA at any MSAA level. I even managed to run 64xMSAA + SSAA on my Quadro which made some pretty sleek looking games. They were very cinematic though. With this, it properly fixes up SSAA and MSAA support in GLES as well. Before they were broken when stereo rendering was enabled. Now in GLES they can properly support MSAA and also stereo rendering with MSAA enabled(with proper extensions). --- Source/Core/VideoBackends/OGL/Render.cpp | 61 +++++++++++++++++++------------- 1 file changed, 36 insertions(+), 25 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 638685d92c..95059819c1 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -73,10 +73,8 @@ enum MultisampleMode MULTISAMPLE_2X, MULTISAMPLE_4X, MULTISAMPLE_8X, - MULTISAMPLE_SSAA_4X, }; - VideoConfig g_ogl_config; // Declarations and definitions @@ -90,6 +88,7 @@ static RasterFont* s_pfont = nullptr; // 1 for no MSAA. Use s_MSAASamples > 1 to check for MSAA. static int s_MSAASamples = 1; static int s_last_multisample_mode = 0; +static bool s_last_ssaa_mode = false; static bool s_last_stereo_mode = false; static bool s_last_xfb_mode = false; @@ -119,14 +118,12 @@ static int GetNumMSAASamples(int MSAAMode) break; case MULTISAMPLE_4X: - case MULTISAMPLE_SSAA_4X: samples = 4; break; case MULTISAMPLE_8X: samples = 8; break; - default: samples = 1; } @@ -141,28 +138,23 @@ static int GetNumMSAASamples(int MSAAMode) static void ApplySSAASettings() { - // GLES3 doesn't support SSAA - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL) + if (g_ActiveConfig.bSSAA) { - if (g_ActiveConfig.iMultisampleMode == MULTISAMPLE_SSAA_4X) + if (g_ActiveConfig.backend_info.bSupportsSSAA) { - if (g_ogl_config.bSupportSampleShading) - { - glEnable(GL_SAMPLE_SHADING_ARB); - GLfloat min_sample_shading_value = static_cast(s_MSAASamples); - glMinSampleShading(min_sample_shading_value); - } - else - { - // TODO: move this to InitBackendInfo - OSD::AddMessage("SSAA Anti Aliasing isn't supported by your GPU.", 10000); - } + glEnable(GL_SAMPLE_SHADING_ARB); + glMinSampleShading(1.0f); } - else if (g_ogl_config.bSupportSampleShading) + else { - glDisable(GL_SAMPLE_SHADING_ARB); + // TODO: move this to InitBackendInfo + OSD::AddMessage("SSAA Anti Aliasing isn't supported by your GPU.", 10000); } } + else if (g_ActiveConfig.backend_info.bSupportsSSAA) + { + glDisable(GL_SAMPLE_SHADING_ARB); + } } static void GLAPIENTRY ErrorCallback( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) @@ -491,11 +483,15 @@ Renderer::Renderer() g_ogl_config.bSupportsGLBufferStorage = GLExtensions::Supports("GL_ARB_buffer_storage") || GLExtensions::Supports("GL_EXT_buffer_storage"); g_ogl_config.bSupportsMSAA = GLExtensions::Supports("GL_ARB_texture_multisample"); - g_ogl_config.bSupportSampleShading = GLExtensions::Supports("GL_ARB_sample_shading"); + g_ActiveConfig.backend_info.bSupportsSSAA = GLExtensions::Supports("GL_ARB_sample_shading") || + GLExtensions::Supports("GL_OES_sample_shading"); g_ogl_config.bSupportOGL31 = GLExtensions::Version() >= 310; g_ogl_config.bSupportViewportFloat = GLExtensions::Supports("GL_ARB_viewport_array"); g_ogl_config.bSupportsDebug = GLExtensions::Supports("GL_KHR_debug") || GLExtensions::Supports("GL_ARB_debug_output"); + g_ogl_config.bSupports3DTextureStorage = GLExtensions::Supports("GL_ARB_texture_storage_multisample") || + GLExtensions::Supports("GL_OES_texture_storage_multisample_2d_array"); + g_ogl_config.bSupports2DTextureStorage = GLExtensions::Supports("GL_ARB_texture_storage_multisample"); if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) { @@ -518,6 +514,14 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP; g_Config.backend_info.bSupportsGSInstancing = g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0; + g_ogl_config.bSupportsMSAA = true; + g_ogl_config.bSupports2DTextureStorage = true; + if (g_ActiveConfig.iStereoMode > 0 && g_ActiveConfig.iMultisampleMode > 1 && !g_ogl_config.bSupports3DTextureStorage) + { + // GLES 3.1 can't support stereo rendering and MSAA + OSD::AddMessage("MSAA Stereo rendering isn't supported by your GPU.", 10000); + g_ActiveConfig.iMultisampleMode = 1; + } } else { @@ -528,10 +532,13 @@ Renderer::Renderer() g_Config.backend_info.bSupportsGeometryShaders = true; g_Config.backend_info.bSupportsGSInstancing = g_ogl_config.SupportedESPointSize > 0; g_Config.backend_info.bSupportsPaletteConversion = true; + g_Config.backend_info.bSupportsSSAA = true; g_ogl_config.bSupportsCopySubImage = true; g_ogl_config.bSupportsGLBaseVertex = true; - g_ogl_config.bSupportSampleShading = true; g_ogl_config.bSupportsDebug = true; + g_ogl_config.bSupportsMSAA = true; + g_ogl_config.bSupports2DTextureStorage = true; + g_ogl_config.bSupports3DTextureStorage = true; } } else @@ -624,13 +631,14 @@ Renderer::Renderer() g_ogl_config.bSupportsGLBufferStorage ? "" : "BufferStorage ", g_ogl_config.bSupportsGLSync ? "" : "Sync ", g_ogl_config.bSupportsMSAA ? "" : "MSAA ", - g_ogl_config.bSupportSampleShading ? "" : "SSAA ", + g_ActiveConfig.backend_info.bSupportsSSAA ? "" : "SSAA ", g_ActiveConfig.backend_info.bSupportsGSInstancing ? "" : "GSInstancing ", g_ActiveConfig.backend_info.bSupportsClipControl ? "" : "ClipControl ", g_ogl_config.bSupportsCopySubImage ? "" : "CopyImageSubData " ); s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; + s_last_ssaa_mode = g_ActiveConfig.bSSAA; s_MSAASamples = GetNumMSAASamples(s_last_multisample_mode); ApplySSAASettings(); @@ -1683,16 +1691,19 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co { TargetSizeChanged = true; } - if (TargetSizeChanged || xfbchanged || WindowResized || (s_last_multisample_mode != g_ActiveConfig.iMultisampleMode) || (s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0))) + if (TargetSizeChanged || xfbchanged || WindowResized || s_last_ssaa_mode != g_ActiveConfig.bSSAA || + (s_last_multisample_mode != g_ActiveConfig.iMultisampleMode) || (s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0))) { s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; UpdateDrawRectangle(s_backbuffer_width, s_backbuffer_height); - if (TargetSizeChanged || s_last_multisample_mode != g_ActiveConfig.iMultisampleMode || s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0)) + if (TargetSizeChanged || s_last_ssaa_mode != g_ActiveConfig.bSSAA || + s_last_multisample_mode != g_ActiveConfig.iMultisampleMode || s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0)) { s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; + s_last_ssaa_mode = g_ActiveConfig.bSSAA; s_MSAASamples = GetNumMSAASamples(s_last_multisample_mode); ApplySSAASettings(); -- cgit v1.2.3 From 1c0366993a582e76333ed18421e92424261901f2 Mon Sep 17 00:00:00 2001 From: degasus Date: Sun, 6 Sep 2015 13:58:18 +0200 Subject: VideoBackends: Reimplement SSAA, now for D3D + OGL --- Source/Core/VideoBackends/OGL/Render.cpp | 47 +++++++++++--------------------- 1 file changed, 16 insertions(+), 31 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 95059819c1..117c6f1bdc 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -88,7 +88,6 @@ static RasterFont* s_pfont = nullptr; // 1 for no MSAA. Use s_MSAASamples > 1 to check for MSAA. static int s_MSAASamples = 1; static int s_last_multisample_mode = 0; -static bool s_last_ssaa_mode = false; static bool s_last_stereo_mode = false; static bool s_last_xfb_mode = false; @@ -136,27 +135,6 @@ static int GetNumMSAASamples(int MSAAMode) return g_ogl_config.max_samples; } -static void ApplySSAASettings() -{ - if (g_ActiveConfig.bSSAA) - { - if (g_ActiveConfig.backend_info.bSupportsSSAA) - { - glEnable(GL_SAMPLE_SHADING_ARB); - glMinSampleShading(1.0f); - } - else - { - // TODO: move this to InitBackendInfo - OSD::AddMessage("SSAA Anti Aliasing isn't supported by your GPU.", 10000); - } - } - else if (g_ActiveConfig.backend_info.bSupportsSSAA) - { - glDisable(GL_SAMPLE_SHADING_ARB); - } -} - static void GLAPIENTRY ErrorCallback( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) { const char *s_source; @@ -483,8 +461,6 @@ Renderer::Renderer() g_ogl_config.bSupportsGLBufferStorage = GLExtensions::Supports("GL_ARB_buffer_storage") || GLExtensions::Supports("GL_EXT_buffer_storage"); g_ogl_config.bSupportsMSAA = GLExtensions::Supports("GL_ARB_texture_multisample"); - g_ActiveConfig.backend_info.bSupportsSSAA = GLExtensions::Supports("GL_ARB_sample_shading") || - GLExtensions::Supports("GL_OES_sample_shading"); g_ogl_config.bSupportOGL31 = GLExtensions::Version() >= 310; g_ogl_config.bSupportViewportFloat = GLExtensions::Supports("GL_ARB_viewport_array"); g_ogl_config.bSupportsDebug = GLExtensions::Supports("GL_KHR_debug") || @@ -514,6 +490,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP; g_Config.backend_info.bSupportsGSInstancing = g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0; + g_Config.backend_info.bSupportsSSAA = g_ogl_config.bSupportsAEP; g_ogl_config.bSupportsMSAA = true; g_ogl_config.bSupports2DTextureStorage = true; if (g_ActiveConfig.iStereoMode > 0 && g_ActiveConfig.iMultisampleMode > 1 && !g_ogl_config.bSupports3DTextureStorage) @@ -555,16 +532,28 @@ Renderer::Renderer() g_ogl_config.eSupportedGLSLVersion = GLSL_130; g_Config.backend_info.bSupportsEarlyZ = false; // layout keyword is only supported on glsl150+ g_Config.backend_info.bSupportsGeometryShaders = false; // geometry shaders are only supported on glsl150+ + g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } else if (strstr(g_ogl_config.glsl_version, "1.40")) { g_ogl_config.eSupportedGLSLVersion = GLSL_140; g_Config.backend_info.bSupportsEarlyZ = false; // layout keyword is only supported on glsl150+ g_Config.backend_info.bSupportsGeometryShaders = false; // geometry shaders are only supported on glsl150+ + g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } - else + else if (strstr(g_ogl_config.glsl_version, "1.50")) { g_ogl_config.eSupportedGLSLVersion = GLSL_150; + g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ + } + else if (strstr(g_ogl_config.glsl_version, "3.30")) + { + g_ogl_config.eSupportedGLSLVersion = GLSL_330; + g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ + } + else + { + g_ogl_config.eSupportedGLSLVersion = GLSL_400; } // Desktop OpenGL can't have the Android Extension Pack @@ -638,9 +627,7 @@ Renderer::Renderer() ); s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; - s_last_ssaa_mode = g_ActiveConfig.bSSAA; s_MSAASamples = GetNumMSAASamples(s_last_multisample_mode); - ApplySSAASettings(); s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; @@ -1691,21 +1678,19 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co { TargetSizeChanged = true; } - if (TargetSizeChanged || xfbchanged || WindowResized || s_last_ssaa_mode != g_ActiveConfig.bSSAA || + if (TargetSizeChanged || xfbchanged || WindowResized || (s_last_multisample_mode != g_ActiveConfig.iMultisampleMode) || (s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0))) { s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; UpdateDrawRectangle(s_backbuffer_width, s_backbuffer_height); - if (TargetSizeChanged || s_last_ssaa_mode != g_ActiveConfig.bSSAA || + if (TargetSizeChanged || s_last_multisample_mode != g_ActiveConfig.iMultisampleMode || s_last_stereo_mode != (g_ActiveConfig.iStereoMode > 0)) { s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_multisample_mode = g_ActiveConfig.iMultisampleMode; - s_last_ssaa_mode = g_ActiveConfig.bSSAA; s_MSAASamples = GetNumMSAASamples(s_last_multisample_mode); - ApplySSAASettings(); delete g_framebuffer_manager; g_framebuffer_manager = new FramebufferManager(s_target_width, s_target_height, -- cgit v1.2.3 From bfb544e1fbe4ce55a59d470309e06dc2c22600fb Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 7 Sep 2015 12:07:27 -0500 Subject: [GLES] Enable bounding box support. --- Source/Core/VideoBackends/OGL/Render.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 117c6f1bdc..2b45508182 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -491,6 +491,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP; g_Config.backend_info.bSupportsGSInstancing = g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0; g_Config.backend_info.bSupportsSSAA = g_ogl_config.bSupportsAEP; + g_Config.backend_info.bSupportsBBox = true; g_ogl_config.bSupportsMSAA = true; g_ogl_config.bSupports2DTextureStorage = true; if (g_ActiveConfig.iStereoMode > 0 && g_ActiveConfig.iMultisampleMode > 1 && !g_ogl_config.bSupports3DTextureStorage) @@ -510,6 +511,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsGSInstancing = g_ogl_config.SupportedESPointSize > 0; g_Config.backend_info.bSupportsPaletteConversion = true; g_Config.backend_info.bSupportsSSAA = true; + g_Config.backend_info.bSupportsBBox = true; g_ogl_config.bSupportsCopySubImage = true; g_ogl_config.bSupportsGLBaseVertex = true; g_ogl_config.bSupportsDebug = true; -- cgit v1.2.3 From 664beea5385f11af1a2c851ac62aec5eff71eb85 Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 7 Sep 2015 22:21:11 +0200 Subject: OGL: reimplement SSAA based on ARB_gpu_shader5 So i965 shall support it again. --- Source/Core/VideoBackends/OGL/Render.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 117c6f1bdc..850e79e7b7 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -437,6 +437,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = GLExtensions::Supports("GL_ARB_shader_image_load_store"); g_Config.backend_info.bSupportsBBox = GLExtensions::Supports("GL_ARB_shader_storage_buffer_object"); g_Config.backend_info.bSupportsGSInstancing = GLExtensions::Supports("GL_ARB_gpu_shader5"); + g_Config.backend_info.bSupportsSSAA = GLExtensions::Supports("GL_ARB_gpu_shader5") && GLExtensions::Supports("GL_ARB_sample_shading"); g_Config.backend_info.bSupportsGeometryShaders = GLExtensions::Version() >= 320; g_Config.backend_info.bSupportsPaletteConversion = GLExtensions::Supports("GL_ARB_texture_buffer_object") || GLExtensions::Supports("GL_OES_texture_buffer") || @@ -532,28 +533,25 @@ Renderer::Renderer() g_ogl_config.eSupportedGLSLVersion = GLSL_130; g_Config.backend_info.bSupportsEarlyZ = false; // layout keyword is only supported on glsl150+ g_Config.backend_info.bSupportsGeometryShaders = false; // geometry shaders are only supported on glsl150+ - g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } else if (strstr(g_ogl_config.glsl_version, "1.40")) { g_ogl_config.eSupportedGLSLVersion = GLSL_140; g_Config.backend_info.bSupportsEarlyZ = false; // layout keyword is only supported on glsl150+ g_Config.backend_info.bSupportsGeometryShaders = false; // geometry shaders are only supported on glsl150+ - g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } else if (strstr(g_ogl_config.glsl_version, "1.50")) { g_ogl_config.eSupportedGLSLVersion = GLSL_150; - g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } else if (strstr(g_ogl_config.glsl_version, "3.30")) { g_ogl_config.eSupportedGLSLVersion = GLSL_330; - g_Config.backend_info.bSupportsSSAA = false; // sample shading is only supported on glsl400+ } else { g_ogl_config.eSupportedGLSLVersion = GLSL_400; + g_Config.backend_info.bSupportsSSAA = true; } // Desktop OpenGL can't have the Android Extension Pack -- cgit v1.2.3 From a95adba39b656b3a564d36c8f520a31de22d9775 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Wed, 9 Sep 2015 12:22:52 +1200 Subject: Drop DEBUG_SEVERITY_NOTIFICATION messages down to DEBUG_LOG --- Source/Core/VideoBackends/OGL/Render.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 2b45508182..b153c55ee6 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -162,10 +162,11 @@ static void GLAPIENTRY ErrorCallback( GLenum source, GLenum type, GLuint id, GLe } switch (severity) { - case GL_DEBUG_SEVERITY_HIGH_ARB: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - case GL_DEBUG_SEVERITY_MEDIUM_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - case GL_DEBUG_SEVERITY_LOW_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - default: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_HIGH_ARB: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_MEDIUM_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_LOW_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_NOTIFICATION: DEBUG_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + default: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; } } -- cgit v1.2.3 From 74b20e627ca524366b0a4fa617d59014cd2c967c Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 9 Sep 2015 21:20:46 +0200 Subject: VideoCommon: Drop "Disable destAlpha" hack This option has no use any more, neither performance nor driver workaround. --- Source/Core/VideoBackends/OGL/Render.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index b153c55ee6..2874881d35 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1322,7 +1322,7 @@ void Renderer::SetBlendMode(bool forceUpdate) // Example: D3DBLEND_DESTALPHA needs to be D3DBLEND_ONE since the result without an alpha channel is assumed to always be 1. bool target_has_alpha = bpmem.zcontrol.pixel_format == PEControl::RGBA6_Z24; - bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && target_has_alpha; + bool useDstAlpha = bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && target_has_alpha; bool useDualSource = useDstAlpha && g_ActiveConfig.backend_info.bSupportsDualSourceBlend; const GLenum glSrcFactors[8] = -- cgit v1.2.3 From de9310fe7082b2d1c66f9637f497693d771eff1a Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Thu, 10 Sep 2015 18:27:31 +1200 Subject: Split OpenGL errors into a separate logtype from Video errors. Allows them to be enabled/disabled separately. --- Source/Core/VideoBackends/OGL/Render.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index b153c55ee6..046c57a8db 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -162,11 +162,11 @@ static void GLAPIENTRY ErrorCallback( GLenum source, GLenum type, GLuint id, GLe } switch (severity) { - case GL_DEBUG_SEVERITY_HIGH_ARB: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - case GL_DEBUG_SEVERITY_MEDIUM_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - case GL_DEBUG_SEVERITY_LOW_ARB: WARN_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - case GL_DEBUG_SEVERITY_NOTIFICATION: DEBUG_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; - default: ERROR_LOG(VIDEO, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_HIGH_ARB: ERROR_LOG(HOST_GPU, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_MEDIUM_ARB: WARN_LOG(HOST_GPU, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_LOW_ARB: WARN_LOG(HOST_GPU, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + case GL_DEBUG_SEVERITY_NOTIFICATION: DEBUG_LOG(HOST_GPU, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; + default: ERROR_LOG(HOST_GPU, "id: %x, source: %s, type: %s - %s", id, s_source, s_type, message); break; } } @@ -575,7 +575,7 @@ Renderer::Renderer() glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, true); glDebugMessageCallbackARB(ErrorCallback, nullptr); } - if (LogManager::GetInstance()->IsEnabled(LogTypes::VIDEO, LogTypes::LERROR)) + if (LogManager::GetInstance()->IsEnabled(LogTypes::HOST_GPU, LogTypes::LERROR)) glEnable(GL_DEBUG_OUTPUT); else glDisable(GL_DEBUG_OUTPUT); @@ -1436,7 +1436,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co { if (g_ogl_config.bSupportsDebug) { - if (LogManager::GetInstance()->IsEnabled(LogTypes::VIDEO, LogTypes::LERROR)) + if (LogManager::GetInstance()->IsEnabled(LogTypes::HOST_GPU, LogTypes::LERROR)) glEnable(GL_DEBUG_OUTPUT); else glDisable(GL_DEBUG_OUTPUT); -- cgit v1.2.3 From 99c08c89bb720d654e32c59e078e60b5f7976193 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 10 Sep 2015 22:22:26 +0200 Subject: OGL: Invert Top-and-Bottom mode. --- Source/Core/VideoBackends/OGL/Render.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index de48229363..f0a30367f7 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1293,7 +1293,12 @@ void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, GLuint src_t if (g_ActiveConfig.iStereoMode == STEREO_SBS || g_ActiveConfig.iStereoMode == STEREO_TAB) { TargetRectangle leftRc, rightRc; - ConvertStereoRectangle(dst, leftRc, rightRc); + + // Top-and-Bottom mode needs to compensate for inverted vertical screen coordinates. + if (g_ActiveConfig.iStereoMode == STEREO_TAB) + ConvertStereoRectangle(dst, rightRc, leftRc); + else + ConvertStereoRectangle(dst, leftRc, rightRc); m_post_processor->BlitFromTexture(src, leftRc, src_texture, src_width, src_height, 0); m_post_processor->BlitFromTexture(src, rightRc, src_texture, src_width, src_height, 1); -- cgit v1.2.3 From 95f3c956a80d880f9988fed5c4a920e436808195 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sat, 19 Sep 2015 04:40:00 +1200 Subject: Move GL interface code out of the OpenGL video backend. --- Source/Core/VideoBackends/OGL/Render.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 44f6163141..4e094f0d2c 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -17,6 +17,8 @@ #include "Common/StringUtil.h" #include "Common/Thread.h" #include "Common/Timer.h" +#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLUtil.h" #include "Common/Logging/LogManager.h" #include "Core/ConfigManager.h" @@ -24,8 +26,6 @@ #include "VideoBackends/OGL/BoundingBox.h" #include "VideoBackends/OGL/FramebufferManager.h" -#include "VideoBackends/OGL/GLInterfaceBase.h" -#include "VideoBackends/OGL/GLUtil.h" #include "VideoBackends/OGL/main.h" #include "VideoBackends/OGL/PostProcessing.h" #include "VideoBackends/OGL/ProgramShaderCache.h" -- cgit v1.2.3 From c9836ff59292855093ba5f7bdc47755ea74123a5 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sat, 19 Sep 2015 06:12:20 +1200 Subject: EGL: Don't depend on VideoCommon or Core --- Source/Core/VideoBackends/OGL/Render.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 4e094f0d2c..6481480a3b 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -639,7 +639,8 @@ Renderer::Renderer() // Handle VSync on/off s_vsync = g_ActiveConfig.IsVSync(); - GLInterface->SwapInterval(s_vsync); + if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENVSYNC)) + GLInterface->SwapInterval(s_vsync); // TODO: Move these somewhere else? FramebufferManagerBase::SetLastXfbWidth(MAX_XFB_WIDTH); @@ -1730,7 +1731,8 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co if (s_vsync != g_ActiveConfig.IsVSync()) { s_vsync = g_ActiveConfig.IsVSync(); - GLInterface->SwapInterval(s_vsync); + if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENVSYNC)) + GLInterface->SwapInterval(s_vsync); } // Clean out old stuff from caches. It's not worth it to clean out the shader caches. -- cgit v1.2.3