From 818b5d2b9eda8847830dc47187e13a1d0df5f134 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Mon, 18 Oct 2021 23:43:04 -0700 Subject: [PATCH] anv: Set MOCS on NULL vertex buffers 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 3DSTATE_VERTEX_BUFFERS where we set NullVertexBuffer. It shouldn't matter here, as there's no actual buffer to be cached. That said, it should be harmless to set MOCS for null vertex buffers. We can assume an internal buffer and request isl's vertex buffer MOCS. Reviewed-by: Jason Ekstrand Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 72b5f7eb478..5cff7d1d6b1 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -3599,6 +3599,8 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer) state = (struct GENX(VERTEX_BUFFER_STATE)) { .VertexBufferIndex = vb, .NullVertexBuffer = true, + .MOCS = anv_mocs(cmd_buffer->device, NULL, + ISL_SURF_USAGE_VERTEX_BUFFER_BIT), }; } @@ -3773,8 +3775,8 @@ emit_vertex_bo(struct anv_cmd_buffer *cmd_buffer, .VertexBufferIndex = index, .AddressModifyEnable = true, .BufferPitch = 0, - .MOCS = addr.bo ? anv_mocs(cmd_buffer->device, addr.bo, - ISL_SURF_USAGE_VERTEX_BUFFER_BIT) : 0, + .MOCS = anv_mocs(cmd_buffer->device, addr.bo, + ISL_SURF_USAGE_VERTEX_BUFFER_BIT), .NullVertexBuffer = size == 0, #if GFX_VER >= 12 .L3BypassDisable = true,