diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 60b2fe07d29..fcc31dc3d6b 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -1117,10 +1117,11 @@ iris_alloc_push_constants(struct iris_batch *batch) /* Divide as equally as possible with any remainder given to FRAGMENT. */ const unsigned push_constant_kb = devinfo->max_constant_urb_size_kb; - const unsigned stage_size = push_constant_kb / 5; + const unsigned n_stages = GFX_VERx10 >= 125 ? 4 : 5; + const unsigned stage_size = push_constant_kb / n_stages; const unsigned frag_size = push_constant_kb - 4 * stage_size; - for (int i = 0; i <= MESA_SHADER_FRAGMENT; i++) { + for (int i = 0; i <= (GFX_VERx10 >= 125 ? MESA_SHADER_GEOMETRY : MESA_SHADER_FRAGMENT); i++) { iris_emit_cmd(batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS), alloc) { alloc._3DCommandSubOpcode = 18 + i; alloc.ConstantBufferOffset = stage_size * i; diff --git a/src/intel/genxml/gen125.xml b/src/intel/genxml/gen125.xml index e4e21353c0c..1806396192f 100644 --- a/src/intel/genxml/gen125.xml +++ b/src/intel/genxml/gen125.xml @@ -2,6 +2,7 @@ + diff --git a/src/intel/vulkan/genX_cmd_draw.c b/src/intel/vulkan/genX_cmd_draw.c index 6e48ec822de..7faf0d49f6c 100644 --- a/src/intel/vulkan/genX_cmd_draw.c +++ b/src/intel/vulkan/genX_cmd_draw.c @@ -47,9 +47,14 @@ batch_emit_push_constants(struct anv_batch *batch, else push_constant_kb = device->info->max_constant_urb_size_kb; + /* On Gfx12.5 there is no more push constant allocation required */ + if (GFX_VERx10 >= 125) + stages &= ~VK_SHADER_STAGE_FRAGMENT_BIT; + const unsigned num_stages = util_bitcount(stages & VK_SHADER_STAGE_ALL_GRAPHICS); - unsigned size_per_stage = push_constant_kb / num_stages; + unsigned size_per_stage = num_stages == 0 ? push_constant_kb : + push_constant_kb / num_stages; /* Broadwell+ and Haswell gt3 require that the push constant sizes be in * units of 2KB. Incidentally, these are the same platforms that have @@ -69,10 +74,12 @@ batch_emit_push_constants(struct anv_batch *batch, kb_used += push_size; } +#if GFX_VERx10 < 125 anv_batch_emit(batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_PS), alloc) { alloc.ConstantBufferOffset = kb_used; alloc.ConstantBufferSize = push_constant_kb - kb_used; } +#endif #if GFX_VERx10 == 125 /* DG2: Wa_22011440098