From 97e0fdbd4d46db867032fe247c542620a7302509 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Mon, 5 May 2025 14:11:04 +0200 Subject: [PATCH] pan/image: Get rid of pan_image_mem::offset We can simply adjust pan_image_mem::base to take the memory offset into account. Signed-off-by: Boris Brezillon Reviewed-by: Eric R. Smith Reviewed-by: Mary Guillemard Acked-by: Daniel Stone Reviewed-by: Ryan Mckeever Reviewed-by: Olivia Lee Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 6 ++---- src/gallium/drivers/panfrost/pan_csf.c | 3 +-- src/gallium/drivers/panfrost/pan_jm.c | 2 +- src/panfrost/lib/pan_desc.c | 6 ++---- src/panfrost/lib/pan_image.h | 3 +-- src/panfrost/lib/pan_texture.c | 2 +- src/panfrost/vulkan/panvk_image.c | 8 +++----- src/panfrost/vulkan/panvk_vX_buffer_view.c | 1 - src/panfrost/vulkan/panvk_vX_image_view.c | 7 +++---- 9 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index f9f6de68bef..3c626840570 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -3575,8 +3575,7 @@ panfrost_afbc_size(struct panfrost_batch *batch, struct panfrost_resource *src, struct pan_image_slice_layout *slice = &src->image.layout.slices[level]; struct panfrost_afbc_size_info consts = { - .src = - src->image.data.base + src->image.data.offset + slice->offset, + .src = src->image.data.base + slice->offset, .metadata = metadata->ptr.gpu + offset, }; @@ -3597,8 +3596,7 @@ panfrost_afbc_pack(struct panfrost_batch *batch, struct panfrost_resource *src, struct pan_image_slice_layout *src_slice = &src->image.layout.slices[level]; struct panfrost_afbc_pack_info consts = { - .src = src->image.data.base + src->image.data.offset + - src_slice->offset, + .src = src->image.data.base + src_slice->offset, .dst = dst->ptr.gpu + dst_slice->offset, .metadata = metadata->ptr.gpu + metadata_offset, .header_size = dst_slice->afbc.header_size, diff --git a/src/gallium/drivers/panfrost/pan_csf.c b/src/gallium/drivers/panfrost/pan_csf.c index d140aa21bfc..e55770747a3 100644 --- a/src/gallium/drivers/panfrost/pan_csf.c +++ b/src/gallium/drivers/panfrost/pan_csf.c @@ -1638,8 +1638,7 @@ GENX(csf_emit_write_timestamp)(struct panfrost_batch *batch, struct cs_builder *b = batch->csf.cs.builder; struct cs_index address = cs_reg64(b, 40); - cs_move64_to(b, address, - dst->image.data.base + dst->image.data.offset + offset); + cs_move64_to(b, address, dst->image.data.base + offset); cs_store_state(b, address, 0, MALI_CS_STATE_TIMESTAMP, cs_now()); panfrost_batch_write_rsrc(batch, dst, PIPE_SHADER_VERTEX); diff --git a/src/gallium/drivers/panfrost/pan_jm.c b/src/gallium/drivers/panfrost/pan_jm.c index e66fe46e3bb..70f3f3c0857 100644 --- a/src/gallium/drivers/panfrost/pan_jm.c +++ b/src/gallium/drivers/panfrost/pan_jm.c @@ -1027,7 +1027,7 @@ GENX(jm_emit_write_timestamp)(struct panfrost_batch *batch, struct pan_ptr job = pan_pool_alloc_desc(&batch->pool.base, WRITE_VALUE_JOB); pan_section_pack(job.cpu, WRITE_VALUE_JOB, PAYLOAD, cfg) { - cfg.address = dst->image.data.base + dst->image.data.offset + offset; + cfg.address = dst->image.data.base + offset; cfg.type = MALI_WRITE_VALUE_TYPE_SYSTEM_TIMESTAMP; } diff --git a/src/panfrost/lib/pan_desc.c b/src/panfrost/lib/pan_desc.c index 5aa0bacd85c..621ce5e5236 100644 --- a/src/panfrost/lib/pan_desc.c +++ b/src/panfrost/lib/pan_desc.c @@ -309,8 +309,7 @@ pan_prepare_crc(const struct pan_fb_info *fb, int rt_crc, const struct pan_image_slice_layout *slice = &image->layout.slices[rt->first_level]; - ext->crc_base = - image->data.base + image->data.offset + slice->crc.offset; + ext->crc_base = image->data.base + slice->crc.offset; ext->crc_row_stride = slice->crc.stride; #if PAN_ARCH >= 7 @@ -1097,8 +1096,7 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx, &image->layout.slices[level]; cfg.crc_buffer.row_stride = slice->crc.stride; - cfg.crc_buffer.base = - image->data.base + image->data.offset + slice->crc.offset; + cfg.crc_buffer.base = image->data.base + slice->crc.offset; } } diff --git a/src/panfrost/lib/pan_image.h b/src/panfrost/lib/pan_image.h index 6dda745be99..f1344188db9 100644 --- a/src/panfrost/lib/pan_image.h +++ b/src/panfrost/lib/pan_image.h @@ -23,7 +23,6 @@ extern "C" { struct pan_image_mem { uint64_t base; - unsigned offset; }; struct pan_image { @@ -188,7 +187,7 @@ pan_iview_get_surface(const struct pan_image_view *iview, unsigned level, bool is_3d = image->layout.dim == MALI_TEXTURE_DIMENSION_3D; const struct pan_image_slice_layout *slice = &image->layout.slices[level]; - uint64_t base = image->data.base + image->data.offset; + uint64_t base = image->data.base; memset(surf, 0, sizeof(*surf)); diff --git a/src/panfrost/lib/pan_texture.c b/src/panfrost/lib/pan_texture.c index aec6f36cb75..aaf438b99b9 100644 --- a/src/panfrost/lib/pan_texture.c +++ b/src/panfrost/lib/pan_texture.c @@ -229,7 +229,7 @@ get_image_section_info(const struct pan_image_view *iview, { const struct util_format_description *desc = util_format_description(iview->format); - uint64_t base = plane->data.base + plane->data.offset; + uint64_t base = plane->data.base; struct pan_image_section_info info = {0}; if (iview->buf.size) { diff --git a/src/panfrost/vulkan/panvk_image.c b/src/panfrost/vulkan/panvk_image.c index b49311cb405..c5b468637e2 100644 --- a/src/panfrost/vulkan/panvk_image.c +++ b/src/panfrost/vulkan/panvk_image.c @@ -541,8 +541,7 @@ static void panvk_image_plane_bind(struct pan_image *plane, struct pan_kmod_bo *bo, uint64_t base, uint64_t offset) { - plane->data.base = base; - plane->data.offset = offset; + plane->data.base = base + offset; /* Reset the AFBC headers */ if (drm_is_afbc(plane->layout.modifier)) { /* Transient CPU mapping */ @@ -555,7 +554,7 @@ panvk_image_plane_bind(struct pan_image *plane, struct pan_kmod_bo *bo, layer++) { for (unsigned level = 0; level < plane->layout.nr_slices; level++) { - void *header = bo_base + plane->data.offset + + void *header = bo_base + offset + (layer * plane->layout.array_stride) + plane->layout.slices[level].offset; memset(header, 0, @@ -589,8 +588,7 @@ panvk_BindImageMemory2(VkDevice device, uint32_t bindInfoCount, image->bo = pan_kmod_bo_get(wsi_image->bo); panvk_image_plane_bind(&image->planes[0], image->bo, - wsi_image->planes[0].data.base, - wsi_image->planes[0].data.offset); + wsi_image->planes[0].data.base, 0); } else { VK_FROM_HANDLE(panvk_device_memory, mem, pBindInfos[i].memory); assert(mem); diff --git a/src/panfrost/vulkan/panvk_vX_buffer_view.c b/src/panfrost/vulkan/panvk_vX_buffer_view.c index f8ee5783d7e..66e716cbdf5 100644 --- a/src/panfrost/vulkan/panvk_vX_buffer_view.c +++ b/src/panfrost/vulkan/panvk_vX_buffer_view.c @@ -61,7 +61,6 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, struct pan_image plane = { .data = { .base = address, - .offset = 0, }, .layout = { .modifier = DRM_FORMAT_MOD_LINEAR, diff --git a/src/panfrost/vulkan/panvk_vX_image_view.c b/src/panfrost/vulkan/panvk_vX_image_view.c index 9e54a426953..27d2eaa0681 100644 --- a/src/panfrost/vulkan/panvk_vX_image_view.c +++ b/src/panfrost/vulkan/panvk_vX_image_view.c @@ -243,10 +243,9 @@ prepare_attr_buf_descs(struct panvk_image_view *view) const struct pan_image_layout *plane_layout = &image->planes[plane_idx].layout; bool is_3d = plane_layout->dim == MALI_TEXTURE_DIMENSION_3D; - unsigned offset = image->planes[plane_idx].data.offset; - offset += pan_image_surface_offset(plane_layout, view->pview.first_level, - is_3d ? 0 : view->pview.first_layer, - is_3d ? view->pview.first_layer : 0); + unsigned offset = pan_image_surface_offset( + plane_layout, view->pview.first_level, + is_3d ? 0 : view->pview.first_layer, is_3d ? view->pview.first_layer : 0); pan_pack(&view->descs.img_attrib_buf[0], ATTRIBUTE_BUFFER, cfg) { /* The format is the only thing we lack to emit attribute descriptors