anv: Set MOCS on NULL stream output buffers
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 19 Oct 2021 16:12:54 +0000 (09:12 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 28 Oct 2021 19:45:55 +0000 (19:45 +0000)
We'd like to add safeguards against accidental use of MOCS 0 (uncached),
which can have large performance implications.  One case where we use
MOCS of 0 is disabled stream output targets,  MOCS shouldn't matter, as
there's no actual buffer to be cached.

That said, it should be harmless to set MOCS for these null stream
output buffers; we can just assume a MOCS for generic internal buffers.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13480>

src/intel/vulkan/genX_cmd_buffer.c

index 5cff7d1..6b4ff92 100644 (file)
@@ -3657,6 +3657,8 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
                sob.SurfaceEndAddress = anv_address_add(xfb->buffer->address,
                                                        xfb->offset + xfb->size);
 #endif
+            } else {
+               sob.MOCS = anv_mocs(cmd_buffer->device, NULL, 0);
             }
          }
       }