summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2022-06-01 14:26:15 -0400
committerMarge Bot <emma+marge@anholt.net>2022-06-04 01:05:43 +0000
commit08116638fd48787e83437901defafe9be2dd44d8 (patch)
treebe52235804d6be7bedbeda7de18a11a0556f42b7
parentc57fa8b390414f93ca24b027c708c5f854eafcf2 (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.c8
-rw-r--r--src/gallium/drivers/zink/zink_resource.h2
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;