Workaround for NVidia broken driver
authorClément Foucault <foucault.clem@gmail.com>
Wed, 2 Oct 2019 12:13:41 +0000 (14:13 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Wed, 2 Oct 2019 14:56:22 +0000 (16:56 +0200)
This disable the indirect drawcall on all Nvidia hardware.

This has to be until nvidia fixes their drivers or instruct us
how to correctly fix the issue.

Related to T70011 Various display issues on NVIDIA
after draw call batching.

source/blender/editors/space_node/drawnode.c
source/blender/gpu/intern/gpu_batch.c

index 3beb12fbb2a44ffa6aa61b4e5354424c4f6227e2..f7c772ef14514ae720111e0bdd84434a8eb49b5d 100644 (file)
@@ -3890,9 +3890,7 @@ static void nodelink_batch_draw(SpaceNode *snode)
 
 void nodelink_batch_start(SpaceNode *UNUSED(snode))
 {
-  /* TODO: partial workaround for NVIDIA driver bug on recent GTX/RTX cards,
-   * that breaks instancing when using indirect draw-call (see T70011). */
-  g_batch_link.enabled = !GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY);
+  g_batch_link.enabled = true;
 }
 
 void nodelink_batch_end(SpaceNode *snode)
index 2620ba49799511bdf33bc678f042597f16628686..c08680d7d14b745551c3f448df32072d7f9c7ce9 100644 (file)
@@ -718,8 +718,11 @@ void GPU_draw_primitive(GPUPrimType prim_type, int v_count)
 #if 0
 #  define USE_MULTI_DRAW_INDIRECT 0
 #else
+/* TODO: partial workaround for NVIDIA driver bug on recent GTX/RTX cards,
+ * that breaks instancing when using indirect draw-call (see T70011). */
 #  define USE_MULTI_DRAW_INDIRECT \
-    (GL_ARB_multi_draw_indirect && GPU_arb_base_instance_is_supported())
+    (GL_ARB_multi_draw_indirect && GPU_arb_base_instance_is_supported() && \
+     !GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_OFFICIAL))
 #endif
 
 typedef struct GPUDrawCommand {