svga: restrict use of rawbuf for constant buffer access to GL43 device
authorCharmaine Lee <charmainel@vmware.com>
Thu, 8 Sep 2022 22:08:59 +0000 (15:08 -0700)
committerMarge Bot <emma+marge@anholt.net>
Mon, 25 Sep 2023 23:36:58 +0000 (23:36 +0000)
Restrict use of rawbuf for constant buffer access to GL43 capable
device only.

Fixes glretrace regressions running with SW Renderer.

Reviewed-by: Martin Krastev <krastevm@vmware.com>
Reviewed-by: Zack Rusin <zackr@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25381>

src/gallium/drivers/svga/svga_resource_buffer_upload.c

index b3a3422..29cae84 100644 (file)
@@ -209,19 +209,21 @@ svga_buffer_create_host_surface(struct svga_screen *ss,
           */
          sbuf->key.coherent = ss->sws->have_coherent;
 
-         /* Set the persistent bit so if the buffer is to be bound
-          * as constant buffer, we'll access it as raw buffer
-          * instead of copying the content back and forth between the
-          * mapped buffer surface and the constant buffer surface.
-          */
-         sbuf->key.persistent = 1;
+         if (ss->sws->have_gl43) {
+            /* Set the persistent bit so if the buffer is to be bound
+             * as constant buffer, we'll access it as raw buffer
+             * instead of copying the content back and forth between the
+             * mapped buffer surface and the constant buffer surface.
+             */
+            sbuf->key.persistent = 1;
 
-         /* Set the raw views bind flag only if the mapped buffer surface
-          * is not already bound as constant buffer since constant buffer
-          * surface cannot have other bind flags.
-          */
-         if ((bind_flags & PIPE_BIND_CONSTANT_BUFFER) == 0) {
-            sbuf->key.flags |= SVGA3D_SURFACE_BIND_RAW_VIEWS;
+            /* Set the raw views bind flag only if the mapped buffer surface
+             * is not already bound as constant buffer since constant buffer
+             * surface cannot have other bind flags.
+             */
+            if ((bind_flags & PIPE_BIND_CONSTANT_BUFFER) == 0) {
+               sbuf->key.flags |= SVGA3D_SURFACE_BIND_RAW_VIEWS;
+            }
          }
       }