Fix T70345: wrong transforms of objects after recent NVIDIA workaround
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Sun, 29 Sep 2019 19:04:05 +0000 (21:04 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Sun, 29 Sep 2019 19:10:12 +0000 (21:10 +0200)
This reverts commit 44d042094e21b519b38a3d78761b64bb5ceeb350 and adds a
simpler workaround for just the node links display issue. There are other
issues though so this is not a full workaround.

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

index 93121a6bef92bb3c7259becc9de71d1a08beeb87..4f4ea182da9c09895e0b2a8bc15e1c814a5a77ba 100644 (file)
@@ -47,6 +47,7 @@
 
 #include "GPU_batch.h"
 #include "GPU_batch_presets.h"
+#include "GPU_extensions.h"
 #include "GPU_immediate.h"
 #include "GPU_matrix.h"
 #include "GPU_state.h"
@@ -3889,7 +3890,9 @@ static void nodelink_batch_draw(SpaceNode *snode)
 
 void nodelink_batch_start(SpaceNode *UNUSED(snode))
 {
-  g_batch_link.enabled = true;
+  /* TODO: partial workaround for NVIDIA driver bug on recent GTX/RTX cards,
+   * that breaks instancing when using indirect drawcal (see T70011). */
+  g_batch_link.enabled = !GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY);
 }
 
 void nodelink_batch_end(SpaceNode *snode)
index d3259b93b5cf652d7dd987695ff6fc10dea05f11..7b6759c44bf0414f10204fd87752d7f5c9060f8a 100644 (file)
@@ -355,15 +355,6 @@ void gpu_extensions_init(void)
   GG.glew_arb_base_instance_is_supported = GLEW_ARB_base_instance;
   gpu_detect_mip_render_workaround();
 
-  /* XXX TODO a nasty nvidia driver bug on GTX & RTX 10X0 / 20X0 is breaking instancing when using
-   * indirect drawcall. (see T70011) */
-  if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY)) {
-    if (strstr(renderer, "RTX 10") || strstr(renderer, "RTX 20") || strstr(renderer, "GTX 10") ||
-        strstr(renderer, "GTX 20")) {
-      GG.glew_arb_base_instance_is_supported = false;
-    }
-  }
-
   if (G.debug & G_DEBUG_GPU_FORCE_WORKAROUNDS) {
     printf("\n");
     printf("GPU: Bypassing workaround detection.\n");