Re: [Mesa-dev] [PATCH 2/6] anv/cmd_buffer: Add some helpers for working with descriptor sets

2017-12-02 Thread Jordan Justen
Reviewed-by: Jordan Justen 

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 >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 = >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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/6] anv/cmd_buffer: Add some helpers for working with descriptor sets

2017-12-01 Thread Jason Ekstrand
---
 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 >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 = >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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev