Module: Mesa Branch: main Commit: f1a7cc54f373fb39cafdd7d81716cd217a693b80 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1a7cc54f373fb39cafdd7d81716cd217a693b80
Author: Caio Marcelo de Oliveira Filho <[email protected]> Date: Thu Sep 23 22:59:40 2021 -0700 iris: Document push constants allocation Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13014> --- src/gallium/drivers/iris/iris_state.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 0c7bef1e757..700a5db6c4f 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -925,6 +925,8 @@ gfx12_upload_pixel_hashing_tables(struct iris_batch *batch) static void iris_alloc_push_constants(struct iris_batch *batch) { + const struct intel_device_info *devinfo = &batch->screen->devinfo; + /* For now, we set a static partitioning of the push constant area, * assuming that all stages could be in use. * @@ -934,11 +936,17 @@ iris_alloc_push_constants(struct iris_batch *batch) * enabling/disabling it like i965 does. This would be more * stalls and may not actually help; we don't know yet. */ + + /* 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 frag_size = push_constant_kb - 4 * stage_size; + for (int i = 0; i <= MESA_SHADER_FRAGMENT; i++) { iris_emit_cmd(batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS), alloc) { alloc._3DCommandSubOpcode = 18 + i; - alloc.ConstantBufferOffset = 6 * i; - alloc.ConstantBufferSize = i == MESA_SHADER_FRAGMENT ? 8 : 6; + alloc.ConstantBufferOffset = stage_size * i; + alloc.ConstantBufferSize = i == MESA_SHADER_FRAGMENT ? frag_size : stage_size; } } }
