mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 02:20:11 +01:00
anv: allocate fsr states for descriptor buffer
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:
parent
44bf552704
commit
ec73db3b8c
4 changed files with 46 additions and 5 deletions
|
|
@ -3627,6 +3627,17 @@ VkResult anv_CreateDevice(
|
|||
goto fail_trivial_batch;
|
||||
|
||||
anv_genX(device->info, init_cps_device_state)(device);
|
||||
|
||||
if (device->vk.enabled_extensions.EXT_descriptor_buffer) {
|
||||
device->cps_states_db =
|
||||
anv_state_pool_alloc(&device->dynamic_state_db_pool,
|
||||
device->cps_states.alloc_size, 32);
|
||||
if (device->cps_states_db.map == NULL)
|
||||
goto fail_trivial_batch;
|
||||
|
||||
memcpy(device->cps_states_db.map, device->cps_states.map,
|
||||
device->cps_states.alloc_size);
|
||||
}
|
||||
}
|
||||
|
||||
if (device->physical->indirect_descriptors) {
|
||||
|
|
@ -3933,6 +3944,7 @@ void anv_DestroyDevice(
|
|||
anv_state_pool_free(&device->dynamic_state_pool, device->cps_states);
|
||||
anv_state_pool_free(&device->dynamic_state_pool, device->breakpoint);
|
||||
if (device->vk.enabled_extensions.EXT_descriptor_buffer) {
|
||||
anv_state_pool_free(&device->dynamic_state_db_pool, device->cps_states_db);
|
||||
anv_state_pool_free(&device->dynamic_state_db_pool, device->slice_hash_db);
|
||||
anv_state_pool_free(&device->dynamic_state_db_pool, device->border_colors_db);
|
||||
anv_state_reserved_pool_finish(&device->custom_border_colors_db);
|
||||
|
|
|
|||
|
|
@ -1789,6 +1789,7 @@ struct anv_device {
|
|||
* array.
|
||||
*/
|
||||
struct anv_state cps_states;
|
||||
struct anv_state cps_states_db;
|
||||
|
||||
uint32_t queue_count;
|
||||
struct anv_queue * queues;
|
||||
|
|
@ -3584,6 +3585,12 @@ struct anv_cmd_ray_tracing_state {
|
|||
size_t build_priv_mem_size;
|
||||
};
|
||||
|
||||
enum anv_cmd_descriptor_buffer_mode {
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_UNKNOWN,
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY,
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_BUFFER,
|
||||
};
|
||||
|
||||
/** State required while building cmd buffer */
|
||||
struct anv_cmd_state {
|
||||
/* PIPELINE_SELECT.PipelineSelection */
|
||||
|
|
@ -3597,6 +3604,13 @@ struct anv_cmd_state {
|
|||
|
||||
enum anv_pipe_bits pending_pipe_bits;
|
||||
|
||||
/**
|
||||
* Whether the last programmed STATE_BASE_ADDRESS references
|
||||
* anv_device::dynamic_state_pool or anv_device::dynamic_state_pool_db for
|
||||
* the dynamic state heap.
|
||||
*/
|
||||
enum anv_cmd_descriptor_buffer_mode current_db_mode;
|
||||
|
||||
struct {
|
||||
/**
|
||||
* Tracks operations susceptible to interfere with queries in the
|
||||
|
|
|
|||
|
|
@ -2482,6 +2482,8 @@ genX(BeginCommandBuffer)(
|
|||
|
||||
cmd_buffer->usage_flags = pBeginInfo->flags;
|
||||
|
||||
cmd_buffer->state.current_db_mode = ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY;
|
||||
|
||||
/* VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT must be ignored for
|
||||
* primary level command buffers.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -93,11 +93,19 @@ genX(streamout_prologue)(struct anv_cmd_buffer *cmd_buffer)
|
|||
|
||||
#if GFX_VER >= 12
|
||||
static uint32_t
|
||||
get_cps_state_offset(struct anv_device *device, bool cps_enabled,
|
||||
get_cps_state_offset(struct anv_cmd_buffer *cmd_buffer, bool cps_enabled,
|
||||
const struct vk_fragment_shading_rate_state *fsr)
|
||||
{
|
||||
if (!cps_enabled)
|
||||
return device->cps_states.offset;
|
||||
struct anv_device *device = cmd_buffer->device;
|
||||
|
||||
if (!cps_enabled) {
|
||||
assert(cmd_buffer->state.current_db_mode !=
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_UNKNOWN);
|
||||
return cmd_buffer->state.current_db_mode ==
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_BUFFER ?
|
||||
device->cps_states_db.offset :
|
||||
device->cps_states.offset;
|
||||
}
|
||||
|
||||
uint32_t offset;
|
||||
static const uint32_t size_index[] = {
|
||||
|
|
@ -122,7 +130,12 @@ get_cps_state_offset(struct anv_device *device, bool cps_enabled,
|
|||
|
||||
offset *= MAX_VIEWPORTS * GENX(CPS_STATE_length) * 4;
|
||||
|
||||
return device->cps_states.offset + offset;
|
||||
assert(cmd_buffer->state.current_db_mode !=
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_UNKNOWN);
|
||||
return (cmd_buffer->state.current_db_mode ==
|
||||
ANV_CMD_DESCRIPTOR_BUFFER_MODE_BUFFER ?
|
||||
device->cps_states_db.offset :
|
||||
device->cps_states.offset) + offset;
|
||||
}
|
||||
#endif /* GFX_VER >= 12 */
|
||||
|
||||
|
|
@ -589,7 +602,7 @@ genX(cmd_buffer_flush_gfx_runtime_state)(struct anv_cmd_buffer *cmd_buffer)
|
|||
SET(CPS, cps.MinCPSizeY, dyn->fsr.fragment_size.height);
|
||||
#elif GFX_VER >= 12
|
||||
SET(CPS, cps.CoarsePixelShadingStateArrayPointer,
|
||||
get_cps_state_offset(device, cps_enable, &dyn->fsr));
|
||||
get_cps_state_offset(cmd_buffer, cps_enable, &dyn->fsr));
|
||||
#endif
|
||||
}
|
||||
#endif /* GFX_VER >= 11 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue