diff --git a/src/panfrost/vulkan/panvk_image.c b/src/panfrost/vulkan/panvk_image.c index 6e6fdbaa09a..497a4d5d7d4 100644 --- a/src/panfrost/vulkan/panvk_image.c +++ b/src/panfrost/vulkan/panvk_image.c @@ -265,7 +265,7 @@ panvk_DestroyImageView(VkDevice _device, VkImageView _view, if (!view) return; - panfrost_bo_unreference(view->bo); + panvk_priv_bo_destroy(view->bo, NULL); vk_image_view_destroy(&device->vk, pAllocator, &view->vk); } @@ -279,7 +279,7 @@ panvk_DestroyBufferView(VkDevice _device, VkBufferView bufferView, if (!view) return; - panfrost_bo_unreference(view->bo); + panvk_priv_bo_destroy(view->bo, pAllocator); vk_object_free(&device->vk, pAllocator, view); } diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index e79debb8929..afed3ac2fb2 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -967,7 +967,7 @@ struct panvk_image_view { struct pan_image_view pview; - struct panfrost_bo *bo; + struct panvk_priv_bo *bo; struct { uint32_t tex[TEXTURE_DESC_WORDS]; uint32_t img_attrib_buf[ATTRIB_BUF_DESC_WORDS * 2]; @@ -983,7 +983,7 @@ struct panvk_sampler { struct panvk_buffer_view { struct vk_object_base base; - struct panfrost_bo *bo; + struct panvk_priv_bo *bo; struct { uint32_t tex[TEXTURE_DESC_WORDS]; uint32_t img_attrib_buf[ATTRIB_BUF_DESC_WORDS * 2]; diff --git a/src/panfrost/vulkan/panvk_vX_image.c b/src/panfrost/vulkan/panvk_vX_image.c index accd16c85a6..9127302a2c4 100644 --- a/src/panfrost/vulkan/panvk_vX_image.c +++ b/src/panfrost/vulkan/panvk_vX_image.c @@ -113,19 +113,23 @@ panvk_per_arch(CreateImageView)(VkDevice _device, }; panvk_convert_swizzle(&view->vk.swizzle, view->pview.swizzle); - struct panfrost_device *pdev = &device->pdev; - if (view->vk.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) { unsigned bo_size = GENX(panfrost_estimate_texture_payload_size)(&view->pview) + pan_size(TEXTURE); - view->bo = panfrost_bo_create(pdev, bo_size, 0, "Texture descriptor"); + view->bo = panvk_priv_bo_create(device, bo_size, 0, pAllocator, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); STATIC_ASSERT(sizeof(view->descs.tex) >= pan_size(TEXTURE)); - GENX(panfrost_new_texture) - (&view->pview, &view->descs.tex, &view->bo->ptr); + + struct panfrost_ptr ptr = { + .gpu = view->bo->addr.dev, + .cpu = view->bo->addr.host, + }; + + GENX(panfrost_new_texture)(&view->pview, &view->descs.tex, &ptr); } if (view->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT) { @@ -185,7 +189,6 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, view->fmt = vk_format_to_pipe_format(pCreateInfo->format); - struct panfrost_device *pdev = &device->pdev; mali_ptr address = panvk_buffer_gpu_ptr(buffer, pCreateInfo->offset); unsigned size = panvk_buffer_range(buffer, pCreateInfo->offset, pCreateInfo->range); @@ -196,9 +199,10 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, if (buffer->vk.usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) { unsigned bo_size = pan_size(SURFACE_WITH_STRIDE); - view->bo = panfrost_bo_create(pdev, bo_size, 0, "Texture descriptor"); + view->bo = panvk_priv_bo_create(device, bo_size, 0, pAllocator, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - pan_pack(view->bo->ptr.cpu, SURFACE_WITH_STRIDE, cfg) { + pan_pack(view->bo->addr.host, SURFACE_WITH_STRIDE, cfg) { cfg.pointer = address; } @@ -211,7 +215,7 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, cfg.texel_ordering = MALI_TEXTURE_LAYOUT_LINEAR; cfg.levels = 1; cfg.array_size = 1; - cfg.surfaces = view->bo->ptr.gpu; + cfg.surfaces = view->bo->addr.dev; cfg.maximum_lod = cfg.minimum_lod = 0; } }