From 0b5288492b90c9a5471152393df31691271f6a55 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 12 May 2020 22:55:30 -0500 Subject: [PATCH] anv: Set MOCS in 3DSTATE_CONSTANT_* on Gen9+ While we're here, we add a nice detailed comment about why always assuming internal is ok. Reviewed-by: Kenneth Graunke Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index f1b102c9805..ca67bb8b5f2 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -3029,7 +3029,21 @@ cmd_buffer_emit_push_constant(struct anv_cmd_buffer *cmd_buffer, const struct anv_pipeline_bind_map *bind_map = &pipeline->shaders[stage]->bind_map; -#if GEN_GEN >= 12 +#if GEN_GEN >= 9 + /* This field exists since Gen8. However, the Broadwell PRM says: + * + * "Constant Buffer Object Control State must be always programmed + * to zero." + * + * This restriction does not exist on any newer platforms. + * + * We only have one MOCS field for the whole packet, not one per + * buffer. We could go out of our way here to walk over all of the + * buffers and see if any of them are used externally and use the + * external MOCS. However, the notion that someone would use the + * same bit of memory for both scanout and a UBO is nuts. Let's not + * bother and assume it's all internal. + */ c.MOCS = cmd_buffer->device->isl_dev.mocs.internal; #endif -- 2.30.2