[Bf-blender-cvs] [f71a2fc6c38] master: Fix T76273 Glitches caused by glCopyImageSubData on windows + intel gpu

Clément Foucault noreply at git.blender.org
Mon Jun 8 12:10:11 CEST 2020


Commit: f71a2fc6c381f32e89ac09112ac3b7ebc3f8a794
Author: Clément Foucault
Date:   Mon Jun 8 12:03:11 2020 +0200
Branches: master
https://developer.blender.org/rBf71a2fc6c381f32e89ac09112ac3b7ebc3f8a794

Fix T76273 Glitches caused by glCopyImageSubData on windows + intel gpu

We limit this fix to Windows Intel GPU whose driver reports at most GL 4.4
support. This limits the fix to the range of reported GPU.

===================================================================

M	source/blender/gpu/GPU_extensions.h
M	source/blender/gpu/intern/gpu_extensions.c
M	source/blender/gpu/intern/gpu_texture.c

===================================================================

diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h
index 4ffe4a53a52..ab54148a2ff 100644
--- a/source/blender/gpu/GPU_extensions.h
+++ b/source/blender/gpu/GPU_extensions.h
@@ -49,6 +49,7 @@ bool GPU_mip_render_workaround(void);
 bool GPU_depth_blitting_workaround(void);
 bool GPU_unused_fb_slot_workaround(void);
 bool GPU_context_local_shaders_workaround(void);
+bool GPU_texture_copy_workaround(void);
 bool GPU_crappy_amd_driver(void);
 
 bool GPU_mem_stats_supported(void);
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index 8dd468b5414..469abefca68 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -96,6 +96,9 @@ static struct GPUGlobal {
   /* Some crappy Intel drivers don't work well with shaders created in different
    * rendering contexts. */
   bool context_local_shaders_workaround;
+  /* Intel drivers exhibit artifacts when using glCopyImageSubData & workbench antialiasing.
+   * (see T76273) */
+  bool texture_copy_workaround;
 } GG = {1, 0};
 
 static void gpu_detect_mip_render_workaround(void)
@@ -224,6 +227,11 @@ bool GPU_context_local_shaders_workaround(void)
   return GG.context_local_shaders_workaround;
 }
 
+bool GPU_texture_copy_workaround(void)
+{
+  return GG.texture_copy_workaround;
+}
+
 bool GPU_crappy_amd_driver(void)
 {
   /* Currently are the same drivers with the `unused_fb_slot` problem. */
@@ -287,6 +295,15 @@ void gpu_extensions_init(void)
     }
   }
 
+  if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_OFFICIAL)) {
+    /* Limit this fix to older hardware with GL < 4.5. This means Broadwell GPUs are
+     * covered since they only support GL 4.4 on windows.
+     * This fixes some issues with workbench antialiasing on Win + Intel GPU. (see T76273) */
+    if (!GLEW_VERSION_4_5) {
+      GG.texture_copy_workaround = true;
+    }
+  }
+
   GG.glew_arb_base_instance_is_supported = GLEW_ARB_base_instance;
   GG.glew_arb_texture_cube_map_array_is_supported = GLEW_ARB_texture_cube_map_array;
   gpu_detect_mip_render_workaround();
@@ -301,6 +318,7 @@ void gpu_extensions_init(void)
     GG.mip_render_workaround = true;
     GG.depth_blitting_workaround = true;
     GG.unused_fb_slot_workaround = true;
+    GG.texture_copy_workaround = true;
     GG.context_local_shaders_workaround = GLEW_ARB_get_program_binary;
   }
 
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index ca0d633aa9e..a985d45162c 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -1870,7 +1870,7 @@ void GPU_texture_copy(GPUTexture *dst, GPUTexture *src)
   BLI_assert(dst->d == 0);
   BLI_assert(dst->format == src->format);
 
-  if (GLEW_ARB_copy_image) {
+  if (GLEW_ARB_copy_image && !GPU_texture_copy_workaround()) {
     /* Opengl 4.3 */
     glCopyImageSubData(src->bindcode,
                        src->target,



More information about the Bf-blender-cvs mailing list