[Mesa-dev] [PATCH 2/6] anv/cmd_buffer: Add some helpers for working with descriptor sets
Jordan Justen
jordan.l.justen at intel.com
Sun Dec 3 07:16:39 UTC 2017
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
On 2017-12-01 17:20:05, Jason Ekstrand wrote:
> ---
> src/intel/vulkan/genX_cmd_buffer.c | 45 ++++++++++++++++++++++++++++----------
> 1 file changed, 34 insertions(+), 11 deletions(-)
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
> index ab5590d..e4362d1 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -1432,6 +1432,35 @@ cmd_buffer_alloc_push_constants(struct anv_cmd_buffer *cmd_buffer)
> cmd_buffer->state.push_constants_dirty |= VK_SHADER_STAGE_ALL_GRAPHICS;
> }
>
> +static const struct anv_descriptor *
> +anv_descriptor_for_binding(const struct anv_cmd_buffer *cmd_buffer,
> + const struct anv_pipeline_binding *binding)
> +{
> + assert(binding->set < MAX_SETS);
> + const struct anv_descriptor_set *set =
> + cmd_buffer->state.descriptors[binding->set];
> + const uint32_t offset =
> + set->layout->binding[binding->binding].descriptor_index;
> + return &set->descriptors[offset + binding->index];
> +}
> +
> +static uint32_t
> +dynamic_offset_for_binding(const struct anv_cmd_buffer *cmd_buffer,
> + const struct anv_pipeline *pipeline,
> + const struct anv_pipeline_binding *binding)
> +{
> + assert(binding->set < MAX_SETS);
> + const struct anv_descriptor_set *set =
> + cmd_buffer->state.descriptors[binding->set];
> +
> + uint32_t dynamic_offset_idx =
> + pipeline->layout->set[binding->set].dynamic_offset_start +
> + set->layout->binding[binding->binding].dynamic_offset_index +
> + binding->index;
> +
> + return cmd_buffer->state.dynamic_offsets[dynamic_offset_idx];
> +}
> +
> static VkResult
> emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
> gl_shader_stage stage,
> @@ -1534,10 +1563,8 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
> continue;
> }
>
> - struct anv_descriptor_set *set =
> - cmd_buffer->state.descriptors[binding->set];
> - uint32_t offset = set->layout->binding[binding->binding].descriptor_index;
> - struct anv_descriptor *desc = &set->descriptors[offset + binding->index];
> + const struct anv_descriptor *desc =
> + anv_descriptor_for_binding(cmd_buffer, binding);
>
> switch (desc->type) {
> case VK_DESCRIPTOR_TYPE_SAMPLER:
> @@ -1611,14 +1638,10 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
>
> case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
> case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
> - uint32_t dynamic_offset_idx =
> - pipeline->layout->set[binding->set].dynamic_offset_start +
> - set->layout->binding[binding->binding].dynamic_offset_index +
> - binding->index;
> -
> /* Compute the offset within the buffer */
> - uint64_t offset = desc->offset +
> - cmd_buffer->state.dynamic_offsets[dynamic_offset_idx];
> + uint32_t dynamic_offset =
> + dynamic_offset_for_binding(cmd_buffer, pipeline, binding);
> + uint64_t offset = desc->offset + dynamic_offset;
> /* Clamp to the buffer size */
> offset = MIN2(offset, desc->buffer->size);
> /* Clamp the range to the buffer size */
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list