anv: create new helper for small allocations
A number of allocations during command buffer building are sourced from the dynamic state heap. They're not actually access using an offset in the dynamic state heap, it just happens to be a conveninent place. Use different helpers for thoses so we dynamically change the dynamic state heap location in the next commits. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22151>
This commit is contained in:

committed by
Marge Bot

parent
c6a91f1695
commit
82d772fa9b
@@ -485,12 +485,8 @@ anv_cmd_buffer_set_ray_query_buffer(struct anv_cmd_buffer *cmd_buffer,
|
||||
device->ray_query_bo);
|
||||
|
||||
/* Fill the push constants & mark them dirty. */
|
||||
struct anv_state ray_query_global_state =
|
||||
anv_genX(device->info, cmd_buffer_ray_query_globals)(cmd_buffer);
|
||||
|
||||
struct anv_address ray_query_globals_addr =
|
||||
anv_state_pool_state_address(&device->dynamic_state_pool,
|
||||
ray_query_global_state);
|
||||
anv_genX(device->info, cmd_buffer_ray_query_globals)(cmd_buffer);
|
||||
pipeline_state->push_constants.ray_query_globals =
|
||||
anv_address_physical(ray_query_globals_addr);
|
||||
cmd_buffer->state.push_constants_dirty |= stages;
|
||||
@@ -1085,9 +1081,9 @@ anv_cmd_buffer_gfx_push_constants(struct anv_cmd_buffer *cmd_buffer)
|
||||
&cmd_buffer->state.gfx.base.push_constants;
|
||||
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||
sizeof(struct anv_push_constants),
|
||||
32 /* bottom 5 bits MBZ */);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer,
|
||||
sizeof(struct anv_push_constants),
|
||||
32 /* bottom 5 bits MBZ */);
|
||||
memcpy(state.map, data, sizeof(struct anv_push_constants));
|
||||
|
||||
return state;
|
||||
|
@@ -171,7 +171,7 @@ void genX(cmd_buffer_mark_image_written)(struct anv_cmd_buffer *cmd_buffer,
|
||||
|
||||
void genX(cmd_emit_conditional_render_predicate)(struct anv_cmd_buffer *cmd_buffer);
|
||||
|
||||
struct anv_state genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer *cmd_buffer);
|
||||
struct anv_address genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer *cmd_buffer);
|
||||
|
||||
void genX(cmd_buffer_ensure_cfe_state)(struct anv_cmd_buffer *cmd_buffer,
|
||||
uint32_t total_scratch);
|
||||
|
@@ -3929,6 +3929,20 @@ anv_cmd_buffer_alloc_dynamic_state(struct anv_cmd_buffer *cmd_buffer,
|
||||
struct anv_state
|
||||
anv_cmd_buffer_alloc_general_state(struct anv_cmd_buffer *cmd_buffer,
|
||||
uint32_t size, uint32_t alignment);
|
||||
static inline struct anv_state
|
||||
anv_cmd_buffer_alloc_temporary_state(struct anv_cmd_buffer *cmd_buffer,
|
||||
uint32_t size, uint32_t alignment)
|
||||
{
|
||||
return anv_state_stream_alloc(&cmd_buffer->dynamic_state_stream,
|
||||
size, alignment);
|
||||
}
|
||||
static inline struct anv_address
|
||||
anv_cmd_buffer_temporary_state_address(struct anv_cmd_buffer *cmd_buffer,
|
||||
struct anv_state state)
|
||||
{
|
||||
return anv_state_pool_state_address(
|
||||
&cmd_buffer->device->dynamic_state_pool, state);
|
||||
}
|
||||
|
||||
void
|
||||
anv_cmd_buffer_chain_command_buffers(struct anv_cmd_buffer **cmd_buffers,
|
||||
|
@@ -193,10 +193,9 @@ blorp_alloc_vertex_buffer(struct blorp_batch *batch, uint32_t size,
|
||||
{
|
||||
struct anv_cmd_buffer *cmd_buffer = batch->driver_batch;
|
||||
struct anv_state vb_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, size, 64);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer, size, 64);
|
||||
struct anv_address vb_addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
vb_state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, vb_state);
|
||||
|
||||
*addr = (struct blorp_address) {
|
||||
.buffer = vb_addr.bo,
|
||||
|
@@ -5572,10 +5572,9 @@ genX(cmd_buffer_begin_companion_rcs_syncpoint)(
|
||||
#if GFX_VERx10 >= 125
|
||||
const struct intel_device_info *info = cmd_buffer->device->info;
|
||||
struct anv_state syncpoint =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, 2 * sizeof(uint32_t), 4);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer, 2 * sizeof(uint32_t), 4);
|
||||
struct anv_address xcs_wait_addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
syncpoint);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, syncpoint);
|
||||
struct anv_address rcs_wait_addr = anv_address_add(xcs_wait_addr, 4);
|
||||
|
||||
/* Reset the sync point */
|
||||
@@ -5654,8 +5653,7 @@ genX(cmd_buffer_end_companion_rcs_syncpoint)(struct anv_cmd_buffer *cmd_buffer,
|
||||
{
|
||||
#if GFX_VERx10 >= 125
|
||||
struct anv_address xcs_wait_addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
syncpoint);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, syncpoint);
|
||||
|
||||
struct mi_builder b;
|
||||
|
||||
|
@@ -468,14 +468,13 @@ void genX(CmdDispatchBase)(
|
||||
|
||||
if (prog_data->uses_num_work_groups) {
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, 12, 4);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer, 12, 4);
|
||||
uint32_t *sizes = state.map;
|
||||
sizes[0] = groupCountX;
|
||||
sizes[1] = groupCountY;
|
||||
sizes[2] = groupCountZ;
|
||||
cmd_buffer->state.compute.num_workgroups =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, state);
|
||||
|
||||
/* The num_workgroups buffer goes in the binding table */
|
||||
cmd_buffer->state.descriptors_dirty |= VK_SHADER_STAGE_COMPUTE_BIT;
|
||||
@@ -532,16 +531,15 @@ void genX(CmdDispatchIndirect)(
|
||||
trace_intel_end_compute(&cmd_buffer->trace, 0, 0, 0);
|
||||
}
|
||||
|
||||
struct anv_state
|
||||
struct anv_address
|
||||
genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
#if GFX_VERx10 >= 125
|
||||
struct anv_device *device = cmd_buffer->device;
|
||||
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||
BRW_RT_DISPATCH_GLOBALS_SIZE,
|
||||
64);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer,
|
||||
BRW_RT_DISPATCH_GLOBALS_SIZE, 64);
|
||||
struct brw_rt_scratch_layout layout;
|
||||
uint32_t stack_ids_per_dss = 2048; /* TODO: can we use a lower value in
|
||||
* some cases?
|
||||
@@ -567,7 +565,7 @@ genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer *cmd_buffer)
|
||||
};
|
||||
GENX(RT_DISPATCH_GLOBALS_pack)(NULL, state.map, &rtdg);
|
||||
|
||||
return state;
|
||||
return anv_cmd_buffer_temporary_state_address(cmd_buffer, state);
|
||||
#else
|
||||
unreachable("Not supported");
|
||||
#endif
|
||||
@@ -734,10 +732,10 @@ cmd_buffer_emit_rt_dispatch_globals(struct anv_cmd_buffer *cmd_buffer,
|
||||
struct anv_cmd_ray_tracing_state *rt = &cmd_buffer->state.rt;
|
||||
|
||||
struct anv_state rtdg_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||
BRW_RT_PUSH_CONST_OFFSET +
|
||||
sizeof(struct anv_push_constants),
|
||||
64);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer,
|
||||
BRW_RT_PUSH_CONST_OFFSET +
|
||||
sizeof(struct anv_push_constants),
|
||||
64);
|
||||
|
||||
struct GENX(RT_DISPATCH_GLOBALS) rtdg = {
|
||||
.MemBaseAddress = (struct anv_address) {
|
||||
@@ -782,10 +780,10 @@ cmd_buffer_emit_rt_dispatch_globals_indirect(struct anv_cmd_buffer *cmd_buffer,
|
||||
struct anv_cmd_ray_tracing_state *rt = &cmd_buffer->state.rt;
|
||||
|
||||
struct anv_state rtdg_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||
BRW_RT_PUSH_CONST_OFFSET +
|
||||
sizeof(struct anv_push_constants),
|
||||
64);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer,
|
||||
BRW_RT_PUSH_CONST_OFFSET +
|
||||
sizeof(struct anv_push_constants),
|
||||
64);
|
||||
|
||||
struct GENX(RT_DISPATCH_GLOBALS) rtdg = {
|
||||
.MemBaseAddress = (struct anv_address) {
|
||||
@@ -803,9 +801,7 @@ cmd_buffer_emit_rt_dispatch_globals_indirect(struct anv_cmd_buffer *cmd_buffer,
|
||||
GENX(RT_DISPATCH_GLOBALS_pack)(NULL, rtdg_state.map, &rtdg);
|
||||
|
||||
struct anv_address rtdg_addr =
|
||||
anv_state_pool_state_address(
|
||||
&cmd_buffer->device->dynamic_state_pool,
|
||||
rtdg_state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, rtdg_state);
|
||||
|
||||
struct mi_builder b;
|
||||
mi_builder_init(&b, cmd_buffer->device->info, &cmd_buffer->batch);
|
||||
@@ -912,8 +908,7 @@ cmd_buffer_trace_rays(struct anv_cmd_buffer *cmd_buffer,
|
||||
sizeof(struct anv_push_constants));
|
||||
|
||||
struct anv_address rtdg_addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
rtdg_state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, rtdg_state);
|
||||
|
||||
uint8_t local_size_log2[3];
|
||||
uint32_t global_size[3] = {};
|
||||
|
@@ -195,9 +195,8 @@ get_push_range_address(struct anv_cmd_buffer *cmd_buffer,
|
||||
gfx_state->base.push_constants_state =
|
||||
anv_cmd_buffer_gfx_push_constants(cmd_buffer);
|
||||
}
|
||||
return anv_state_pool_state_address(
|
||||
&cmd_buffer->device->dynamic_state_pool,
|
||||
gfx_state->base.push_constants_state);
|
||||
return anv_cmd_buffer_temporary_state_address(
|
||||
cmd_buffer, gfx_state->base.push_constants_state);
|
||||
}
|
||||
|
||||
default: {
|
||||
|
@@ -73,14 +73,13 @@ emit_base_vertex_instance(struct anv_cmd_buffer *cmd_buffer,
|
||||
}
|
||||
|
||||
struct anv_state id_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, 8, 4);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer, 8, 4);
|
||||
|
||||
((uint32_t *)id_state.map)[0] = base_vertex;
|
||||
((uint32_t *)id_state.map)[1] = base_instance;
|
||||
|
||||
struct anv_address addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
id_state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, id_state);
|
||||
|
||||
emit_base_vertex_instance_bo(cmd_buffer, addr);
|
||||
}
|
||||
@@ -89,13 +88,12 @@ static void
|
||||
emit_draw_index(struct anv_cmd_buffer *cmd_buffer, uint32_t draw_index)
|
||||
{
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, 4, 4);
|
||||
anv_cmd_buffer_alloc_temporary_state(cmd_buffer, 4, 4);
|
||||
|
||||
((uint32_t *)state.map)[0] = draw_index;
|
||||
|
||||
struct anv_address addr =
|
||||
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
|
||||
state);
|
||||
anv_cmd_buffer_temporary_state_address(cmd_buffer, state);
|
||||
|
||||
emit_vertex_bo(cmd_buffer, addr, 4, ANV_DRAWID_VB_INDEX);
|
||||
}
|
||||
|
Reference in New Issue
Block a user