From 18c22f502439ff3d3be6738ca86a0ffc19961670 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 9 Jun 2021 16:15:03 -0400 Subject: [PATCH] zink: break out offset alignment calculation into helper Acked-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_resource.c | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 9a5b7fad404..e1387636f29 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -779,20 +779,26 @@ zink_resource_has_usage(struct zink_resource *res, enum zink_resource_access usa return batch_uses & usage; } +ALWAYS_INLINE static void +align_offset_size(const VkDeviceSize alignment, VkDeviceSize *offset, VkDeviceSize *size, VkDeviceSize obj_size) +{ + VkDeviceSize align = *offset % alignment; + if (alignment - 1 > *offset) + *offset = 0; + else + *offset -= align, *size += align; + align = alignment - (*size % alignment); + if (*offset + *size + align > obj_size) + *size = obj_size - *offset; + else + *size += align; +} + static VkMappedMemoryRange init_mem_range(struct zink_screen *screen, struct zink_resource *res, VkDeviceSize offset, VkDeviceSize size) { assert(res->obj->size); - VkDeviceSize align = offset % screen->info.props.limits.nonCoherentAtomSize; - if (screen->info.props.limits.nonCoherentAtomSize - 1 > offset) - offset = 0; - else - offset -= align, size += align; - align = screen->info.props.limits.nonCoherentAtomSize - (size % screen->info.props.limits.nonCoherentAtomSize); - if (offset + size + align > res->obj->size) - size = res->obj->size - offset; - else - size += align; + align_offset_size(screen->info.props.limits.nonCoherentAtomSize, &offset, &size, res->obj->size); VkMappedMemoryRange range = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, NULL,