Add workaround for broken interface query functions on Intel HD Graphics 4400 and 4600

Fixes T93680

For current drivers of Intel HD Graphics 4400 and 4600, various Program Introspection functions appear broken and return incorrect values, causing crashes in the current handling of SSBOs. Disable use of this feature on those devices. Add checks to features that use SSBOs (Hair and Subdivision Modifier).

Reviewed By: fclem, jbakker

Maniphest Tasks: T93680

Differential Revision: https://developer.blender.org/D13806
This commit is contained in:
Clément Foucault 2022-01-24 18:46:30 +01:00 committed by Clément Foucault
parent e2337b5342
commit 263f862ba5
Notes: blender-bot 2023-02-14 09:29:42 +01:00
Referenced by issue #93680, Blender 3.0 is crashing when creating hair particle system (Windows, Intel)
4 changed files with 10 additions and 3 deletions

@ -1 +1 @@
Subproject commit 6afec05c3286cdea58ab269fb8dd1f5de011de4e
Subproject commit 67f1fbca1482d9d9362a4001332e785c3fd5d230

View File

@ -92,7 +92,7 @@ bool BKE_subsurf_modifier_can_do_gpu_subdiv_ex(const Scene *scene,
return false;
}
if (!GPU_compute_shader_support()) {
if (!(GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support())) {
return false;
}

View File

@ -54,7 +54,7 @@
BLI_INLINE eParticleRefineShaderType drw_hair_shader_type_get(void)
{
#ifdef USE_COMPUTE_SHADERS
if (GPU_compute_shader_support()) {
if (GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support()) {
return PART_REFINE_SHADER_COMPUTE;
}
#endif

View File

@ -240,6 +240,7 @@ static void detect_workarounds()
GLContext::unused_fb_slot_workaround = true;
/* Turn off extensions. */
GCaps.shader_image_load_store_support = false;
GCaps.shader_storage_buffer_objects_support = false;
GLContext::base_instance_support = false;
GLContext::clear_texture_support = false;
GLContext::copy_image_support = false;
@ -419,6 +420,12 @@ static void detect_workarounds()
strstr(renderer, "HD Graphics 4000")) {
GLContext::generate_mipmap_workaround = true;
}
/* Buggy interface query functions cause crashes when handling SSBOs (T93680) */
if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY) &&
(strstr(renderer, "HD Graphics 4400")|| strstr(renderer, "HD Graphics 4600"))) {
GCaps.shader_storage_buffer_objects_support = false;
}
} // namespace blender::gpu
/** Internal capabilities. */