From cf77b67c459d481f6d8d34d13e14d22a6cad0842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 3 Dec 2019 15:22:02 +0100 Subject: Fix T71576 Mesh error on mutimaterial Meshes on legacy nvidia drivers Differential Revision: https://developer.blender.org/D6351 --- source/blender/gpu/intern/gpu_extensions.c | 15 +++++++++++++++ 1 file changed, 15 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 33f918559f7..7eb2cd61fda 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -93,6 +93,8 @@ static struct GPUGlobal { /* Some crappy Intel drivers don't work well with shaders created in different * rendering contexts. */ bool context_local_shaders_workaround; + /* Unmaintained NVIDIA drivers contain certain bugs we need to workaround. */ + bool legacy_nvidia_driver; } GG = {1, 0}; static void gpu_detect_mip_render_workaround(void) @@ -216,6 +218,11 @@ bool GPU_context_local_shaders_workaround(void) return GG.context_local_shaders_workaround; } +bool GPU_legacy_nvidia_driver(void) +{ + return GG.legacy_nvidia_driver; +} + bool GPU_crappy_amd_driver(void) { /* Currently are the same drivers with the `unused_fb_slot` problem. */ @@ -281,6 +288,14 @@ void gpu_extensions_init(void) GG.glew_arb_base_instance_is_supported = GLEW_ARB_base_instance; gpu_detect_mip_render_workaround(); + if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_OFFICIAL)) { + char *driver_version_str = strstr(version, "NVIDIA ") + 7; + int driver_major_version = (int)strtol(driver_version_str, NULL, 10); + if (driver_major_version > 0 && driver_major_version < 400) { + GG.legacy_nvidia_driver = true; + } + } + if (G.debug & G_DEBUG_GPU_FORCE_WORKAROUNDS) { printf("\n"); printf("GPU: Bypassing workaround detection.\n"); -- cgit v1.2.3