[Mesa-dev] [PATCH] anv: Add a helper for working with VK_WHOLE_SIZE for buffers
Manolova, Plamena
plamena.manolova at intel.com
Mon Mar 6 10:56:37 UTC 2017
Reviewed-by: Plamena Manolova <plamena.manolova at intel.com>
On Sat, Mar 4, 2017 at 8:47 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> ---
> src/intel/vulkan/anv_blorp.c | 16 +++++++++++-----
> src/intel/vulkan/anv_descriptor_set.c | 7 +++----
> src/intel/vulkan/anv_image.c | 4 ++--
> src/intel/vulkan/anv_private.h | 12 ++++++++++++
> 4 files changed, 28 insertions(+), 11 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
> index d79c5e0..05790d2 100644
> --- a/src/intel/vulkan/anv_blorp.c
> +++ b/src/intel/vulkan/anv_blorp.c
> @@ -722,11 +722,17 @@ void anv_CmdFillBuffer(
> struct blorp_batch batch;
> blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
>
> - if (fillSize == VK_WHOLE_SIZE) {
> - fillSize = dst_buffer->size - dstOffset;
> - /* Make sure fillSize is a multiple of 4 */
> - fillSize &= ~3ull;
> - }
> + fillSize = anv_buffer_get_range(dst_buffer, dstOffset, fillSize);
> +
> + /* From the Vulkan spec:
> + *
> + * "size is the number of bytes to fill, and must be either a
> multiple
> + * of 4, or VK_WHOLE_SIZE to fill the range from offset to the end
> of
> + * the buffer. If VK_WHOLE_SIZE is used and the remaining size of
> the
> + * buffer is not a multiple of 4, then the nearest smaller multiple
> is
> + * used."
> + */
> + fillSize &= ~3ull;
>
> /* First, we compute the biggest format that can be used with the
> * given offsets and size.
> diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_
> descriptor_set.c
> index 1e8991b..2a37d7d 100644
> --- a/src/intel/vulkan/anv_descriptor_set.c
> +++ b/src/intel/vulkan/anv_descriptor_set.c
> @@ -672,10 +672,9 @@ anv_descriptor_set_write_buffer(struct
> anv_descriptor_set *set,
> /* For buffers with dynamic offsets, we use the full possible range in
> the
> * surface state and do the actual range-checking in the shader.
> */
> - if (bind_layout->dynamic_offset_index >= 0 || range == VK_WHOLE_SIZE)
> - bview->range = buffer->size - offset;
> - else
> - bview->range = range;
> + if (bind_layout->dynamic_offset_index >= 0)
> + range = VK_WHOLE_SIZE;
> + bview->range = anv_buffer_get_range(buffer, offset, range);
>
> /* If we're writing descriptors through a push command, we need to
> allocate
> * the surface state from the command buffer. Otherwise it will be
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index 59f730c..f54c8ea 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -837,8 +837,8 @@ anv_CreateBufferView(VkDevice _device,
> const uint32_t format_bs = isl_format_get_layout(view->format)->bpb /
> 8;
> view->bo = buffer->bo;
> view->offset = buffer->offset + pCreateInfo->offset;
> - view->range = pCreateInfo->range == VK_WHOLE_SIZE ?
> - buffer->size - pCreateInfo->offset : pCreateInfo->range;
> + view->range = anv_buffer_get_range(buffer, pCreateInfo->offset,
> + pCreateInfo->range);
> view->range = align_down_npot_u32(view->range, format_bs);
>
> if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) {
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_
> private.h
> index c73196a..cf9874e 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1090,6 +1090,18 @@ struct anv_buffer {
> VkDeviceSize offset;
> };
>
> +static inline uint64_t
> +anv_buffer_get_range(struct anv_buffer *buffer, uint64_t offset, uint64_t
> range)
> +{
> + assert(offset <= buffer->size);
> + if (range == VK_WHOLE_SIZE) {
> + return buffer->size - offset;
> + } else {
> + assert(range <= buffer->size);
> + return range;
> + }
> +}
> +
> enum anv_cmd_dirty_bits {
> ANV_CMD_DIRTY_DYNAMIC_VIEWPORT = 1 << 0, /*
> VK_DYNAMIC_STATE_VIEWPORT */
> ANV_CMD_DIRTY_DYNAMIC_SCISSOR = 1 << 1, /*
> VK_DYNAMIC_STATE_SCISSOR */
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170306/b60d6f93/attachment.html>
More information about the mesa-dev
mailing list