i965: Set MOCS on NULL stream output buffers
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 19 Oct 2021 22:24:51 +0000 (15:24 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 28 Oct 2021 19:45:56 +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/mesa/drivers/dri/i965/genX_state_upload.c

index cb205c6..f8a04ec 100644 (file)
@@ -3689,6 +3689,7 @@ genX(upload_3dstate_so_buffers)(struct brw_context *brw)
       if (!bufferobj || !size) {
          brw_batch_emit(brw, GENX(3DSTATE_SO_BUFFER), sob) {
             sob.SOBufferIndex = i;
+            sob.MOCS = brw_mocs(&brw->isl_dev, NULL);
          }
          continue;
       }