From f71a2fc6c381f32e89ac09112ac3b7ebc3f8a794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 8 Jun 2020 12:03:11 +0200 Subject: 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. --- source/blender/gpu/intern/gpu_extensions.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'source/blender/gpu/intern/gpu_extensions.c') 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; } -- cgit v1.2.3