diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-06-08 13:03:11 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-06-08 13:09:51 +0300 |
commit | f71a2fc6c381f32e89ac09112ac3b7ebc3f8a794 (patch) | |
tree | 711e7abb61b7667348ce410b2880a88d8096de2c /source/blender/gpu/intern | |
parent | 460c1d8e20491ec53dff94464e89796608a19b72 (diff) |
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.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_extensions.c | 18 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_texture.c | 2 |
2 files changed, 19 insertions, 1 deletions
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, |