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.
This commit is contained in:
Clément Foucault 2020-06-08 12:03:11 +02:00 committed by Jeroen Bakker
parent 1510c04d41
commit 7b754c8c99
Notes: blender-bot 2023-02-13 22:41:07 +01:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
Referenced by issue #76273, Overlay glitches 2.83 beta on intel HD cards.
3 changed files with 20 additions and 1 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -1759,7 +1759,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,