diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2022-06-01 14:26:15 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-06-04 01:05:43 +0000 |
commit | 08116638fd48787e83437901defafe9be2dd44d8 (patch) | |
tree | be52235804d6be7bedbeda7de18a11a0556f42b7 | |
parent | c57fa8b390414f93ca24b027c708c5f854eafcf2 (diff) |
zink: represent plane offsets using offset from plane 0 vs size of plane
this is a bit easier to keep track of
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16822>
-rw-r--r-- | src/gallium/drivers/zink/zink_resource.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/zink/zink_resource.h | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index aef7e727486..c4eac748c64 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -783,13 +783,15 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t plane.pNext = NULL; if (num_planes > 1) info2.pNext = &plane; + unsigned offset = 0; for (unsigned i = 0; i < num_planes; i++) { assert(i < ARRAY_SIZE(plane_aspects)); plane.planeAspect = plane_aspects[i]; VKSCR(GetImageMemoryRequirements2)(screen->dev, &info2, &req2); if (!i) reqs.alignment = req2.memoryRequirements.alignment; - obj->plane_sizes[i] = req2.memoryRequirements.size; + obj->plane_offsets[i] = offset; + offset += req2.memoryRequirements.size; reqs.size += req2.memoryRequirements.size; reqs.memoryTypeBits |= req2.memoryRequirements.memoryTypeBits; need_dedicated |= ded.prefersDedicatedAllocation || ded.requiresDedicatedAllocation; @@ -943,17 +945,15 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t if (num_planes > 1) { VkBindImageMemoryInfo infos[3]; VkBindImagePlaneMemoryInfo planes[3]; - unsigned offset = 0; for (unsigned i = 0; i < num_planes; i++) { infos[i].sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO; infos[i].pNext = &planes[i]; infos[i].image = obj->image; infos[i].memory = zink_bo_get_mem(obj->bo); - infos[i].memoryOffset = offset; + infos[i].memoryOffset = obj->plane_offsets[i]; planes[i].sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO; planes[i].pNext = NULL; planes[i].planeAspect = plane_aspects[i]; - offset += obj->plane_sizes[i]; } if (VKSCR(BindImageMemory2)(screen->dev, num_planes, infos) != VK_SUCCESS) { mesa_loge("ZINK: vkBindImageMemory2 failed"); diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h index 60a76589a4a..172b984c176 100644 --- a/src/gallium/drivers/zink/zink_resource.h +++ b/src/gallium/drivers/zink/zink_resource.h @@ -102,7 +102,7 @@ struct zink_resource_object { uint64_t modifier; VkImageAspectFlags modifier_aspect; VkSamplerYcbcrConversionKHR sampler_conversion; - unsigned plane_sizes[3]; + unsigned plane_offsets[3]; bool host_visible; bool coherent; |