anv: keep descriptor set's address directly in anv_descriptor_set
Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11577>
This commit is contained in:

committed by
Marge Bot

parent
f58e6fee74
commit
79a50c6f54
@@ -941,11 +941,7 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
if (bind_point == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR) {
|
if (bind_point == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR) {
|
||||||
struct anv_push_constants *push = &pipe_state->push_constants;
|
struct anv_push_constants *push = &pipe_state->push_constants;
|
||||||
|
|
||||||
struct anv_address set_addr = {
|
push->desc_sets[set_index] = anv_address_physical(set->desc_addr);
|
||||||
.bo = set->pool->bo,
|
|
||||||
.offset = set->desc_mem.offset,
|
|
||||||
};
|
|
||||||
push->desc_sets[set_index] = anv_address_physical(set_addr);
|
|
||||||
|
|
||||||
anv_reloc_list_add_bo(cmd_buffer->batch.relocs,
|
anv_reloc_list_add_bo(cmd_buffer->batch.relocs,
|
||||||
cmd_buffer->batch.alloc,
|
cmd_buffer->batch.alloc,
|
||||||
@@ -1409,7 +1405,7 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
}
|
}
|
||||||
set->desc_mem = desc_mem;
|
set->desc_mem = desc_mem;
|
||||||
|
|
||||||
struct anv_address addr = {
|
set->desc_addr = (struct anv_address) {
|
||||||
.bo = cmd_buffer->dynamic_state_stream.state_pool->block_pool.bo,
|
.bo = cmd_buffer->dynamic_state_stream.state_pool->block_pool.bo,
|
||||||
.offset = set->desc_mem.offset,
|
.offset = set->desc_mem.offset,
|
||||||
};
|
};
|
||||||
@@ -1425,7 +1421,8 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
anv_fill_buffer_surface_state(cmd_buffer->device,
|
anv_fill_buffer_surface_state(cmd_buffer->device,
|
||||||
set->desc_surface_state, format,
|
set->desc_surface_state, format,
|
||||||
ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
|
ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
|
||||||
addr, layout->descriptor_buffer_size, 1);
|
set->desc_addr,
|
||||||
|
layout->descriptor_buffer_size, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return set;
|
return set;
|
||||||
|
@@ -1079,6 +1079,11 @@ anv_descriptor_set_create(struct anv_device *device,
|
|||||||
set->desc_mem.alloc_size = descriptor_buffer_size;
|
set->desc_mem.alloc_size = descriptor_buffer_size;
|
||||||
set->desc_mem.map = pool->bo->map + set->desc_mem.offset;
|
set->desc_mem.map = pool->bo->map + set->desc_mem.offset;
|
||||||
|
|
||||||
|
set->desc_addr = (struct anv_address) {
|
||||||
|
.bo = pool->bo,
|
||||||
|
.offset = set->desc_mem.offset,
|
||||||
|
};
|
||||||
|
|
||||||
enum isl_format format =
|
enum isl_format format =
|
||||||
anv_isl_format_for_descriptor_type(device,
|
anv_isl_format_for_descriptor_type(device,
|
||||||
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
|
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
|
||||||
@@ -1086,13 +1091,11 @@ anv_descriptor_set_create(struct anv_device *device,
|
|||||||
set->desc_surface_state = anv_descriptor_pool_alloc_state(pool);
|
set->desc_surface_state = anv_descriptor_pool_alloc_state(pool);
|
||||||
anv_fill_buffer_surface_state(device, set->desc_surface_state, format,
|
anv_fill_buffer_surface_state(device, set->desc_surface_state, format,
|
||||||
ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
|
ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
|
||||||
(struct anv_address) {
|
set->desc_addr,
|
||||||
.bo = pool->bo,
|
|
||||||
.offset = set->desc_mem.offset,
|
|
||||||
},
|
|
||||||
descriptor_buffer_size, 1);
|
descriptor_buffer_size, 1);
|
||||||
} else {
|
} else {
|
||||||
set->desc_mem = ANV_STATE_NULL;
|
set->desc_mem = ANV_STATE_NULL;
|
||||||
|
set->desc_addr = (struct anv_address) { .bo = NULL, .offset = 0 };
|
||||||
set->desc_surface_state = ANV_STATE_NULL;
|
set->desc_surface_state = ANV_STATE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2047,6 +2047,9 @@ struct anv_descriptor_set {
|
|||||||
/* Surface state for the descriptor buffer */
|
/* Surface state for the descriptor buffer */
|
||||||
struct anv_state desc_surface_state;
|
struct anv_state desc_surface_state;
|
||||||
|
|
||||||
|
/* Descriptor set address. */
|
||||||
|
struct anv_address desc_addr;
|
||||||
|
|
||||||
uint32_t buffer_view_count;
|
uint32_t buffer_view_count;
|
||||||
struct anv_buffer_view *buffer_views;
|
struct anv_buffer_view *buffer_views;
|
||||||
|
|
||||||
|
@@ -2551,25 +2551,16 @@ static struct anv_address
|
|||||||
anv_descriptor_set_address(struct anv_cmd_buffer *cmd_buffer,
|
anv_descriptor_set_address(struct anv_cmd_buffer *cmd_buffer,
|
||||||
struct anv_descriptor_set *set)
|
struct anv_descriptor_set *set)
|
||||||
{
|
{
|
||||||
if (set->pool) {
|
if (set->pool == NULL) {
|
||||||
/* This is a normal descriptor set */
|
|
||||||
return (struct anv_address) {
|
|
||||||
.bo = set->pool->bo,
|
|
||||||
.offset = set->desc_mem.offset,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
/* This is a push descriptor set. We have to flag it as used on the GPU
|
/* This is a push descriptor set. We have to flag it as used on the GPU
|
||||||
* so that the next time we push descriptors, we grab a new memory.
|
* so that the next time we push descriptors, we grab a new memory.
|
||||||
*/
|
*/
|
||||||
struct anv_push_descriptor_set *push_set =
|
struct anv_push_descriptor_set *push_set =
|
||||||
(struct anv_push_descriptor_set *)set;
|
(struct anv_push_descriptor_set *)set;
|
||||||
push_set->set_used_on_gpu = true;
|
push_set->set_used_on_gpu = true;
|
||||||
|
|
||||||
return (struct anv_address) {
|
|
||||||
.bo = cmd_buffer->dynamic_state_stream.state_pool->block_pool.bo,
|
|
||||||
.offset = set->desc_mem.offset,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return set->desc_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
|
Reference in New Issue
Block a user