panvk: Move image related definitions to panvk_image.{h,c}

Move GetImageMemoryRequirements2(), GetImageSparseMemoryRequirements2()
and BindImageMemory2() implementations to panvk_image.c, so we have all
image related functions where they belong, and create a panvk_image.h
header for the panvk_image struct definition.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28170>
This commit is contained in:
Boris Brezillon 2024-03-11 12:07:17 +01:00 committed by Marge Bot
parent 5b91e44309
commit 763fa8f45a
11 changed files with 107 additions and 85 deletions

View file

@ -26,6 +26,7 @@
* DEALINGS IN THE SOFTWARE.
*/
#include "panvk_image.h"
#include "panvk_private.h"
#include "decode.h"
@ -1573,30 +1574,6 @@ panvk_GetBufferMemoryRequirements2(VkDevice device,
pMemoryRequirements->memoryRequirements.size = size;
}
VKAPI_ATTR void VKAPI_CALL
panvk_GetImageMemoryRequirements2(VkDevice device,
const VkImageMemoryRequirementsInfo2 *pInfo,
VkMemoryRequirements2 *pMemoryRequirements)
{
VK_FROM_HANDLE(panvk_image, image, pInfo->image);
const uint64_t alignment = 4096;
const uint64_t size = panvk_image_get_total_size(image);
pMemoryRequirements->memoryRequirements.memoryTypeBits = 1;
pMemoryRequirements->memoryRequirements.alignment = alignment;
pMemoryRequirements->memoryRequirements.size = size;
}
VKAPI_ATTR void VKAPI_CALL
panvk_GetImageSparseMemoryRequirements2(
VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo,
uint32_t *pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
{
panvk_stub();
}
VKAPI_ATTR void VKAPI_CALL
panvk_GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory,
VkDeviceSize *pCommittedMemoryInBytes)
@ -1643,49 +1620,6 @@ panvk_BindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
return VK_SUCCESS;
}
VKAPI_ATTR VkResult VKAPI_CALL
panvk_BindImageMemory2(VkDevice device, uint32_t bindInfoCount,
const VkBindImageMemoryInfo *pBindInfos)
{
for (uint32_t i = 0; i < bindInfoCount; ++i) {
VK_FROM_HANDLE(panvk_image, image, pBindInfos[i].image);
VK_FROM_HANDLE(panvk_device_memory, mem, pBindInfos[i].memory);
struct pan_kmod_bo *old_bo = image->bo;
assert(mem);
image->bo = pan_kmod_bo_get(mem->bo);
image->pimage.data.base = mem->addr.dev;
image->pimage.data.offset = pBindInfos[i].memoryOffset;
/* Reset the AFBC headers */
if (drm_is_afbc(image->pimage.layout.modifier)) {
/* Transient CPU mapping */
void *base = pan_kmod_bo_mmap(mem->bo, 0, pan_kmod_bo_size(mem->bo),
PROT_WRITE, MAP_SHARED, NULL);
assert(base != MAP_FAILED);
for (unsigned layer = 0; layer < image->pimage.layout.array_size;
layer++) {
for (unsigned level = 0; level < image->pimage.layout.nr_slices;
level++) {
void *header = base + image->pimage.data.offset +
(layer * image->pimage.layout.array_stride) +
image->pimage.layout.slices[level].offset;
memset(header, 0,
image->pimage.layout.slices[level].afbc.header_size);
}
}
ASSERTED int ret = os_munmap(base, pan_kmod_bo_size(mem->bo));
assert(!ret);
}
pan_kmod_bo_put(old_bo);
}
return VK_SUCCESS;
}
VKAPI_ATTR VkResult VKAPI_CALL
panvk_CreateEvent(VkDevice _device, const VkEventCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkEvent *pEvent)

View file

@ -28,6 +28,7 @@
#include "pan_props.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include "drm-uapi/drm_fourcc.h"
@ -37,7 +38,9 @@
#include "vk_object.h"
#include "vk_util.h"
unsigned
#define PANVK_MAX_PLANES 1
static unsigned
panvk_image_get_total_size(const struct panvk_image *image)
{
assert(util_format_get_num_planes(image->pimage.layout.format) == 1);
@ -269,6 +272,73 @@ panvk_DestroyImageView(VkDevice _device, VkImageView _view,
vk_image_view_destroy(&device->vk, pAllocator, &view->vk);
}
VKAPI_ATTR void VKAPI_CALL
panvk_GetImageMemoryRequirements2(VkDevice device,
const VkImageMemoryRequirementsInfo2 *pInfo,
VkMemoryRequirements2 *pMemoryRequirements)
{
VK_FROM_HANDLE(panvk_image, image, pInfo->image);
const uint64_t alignment = 4096;
const uint64_t size = panvk_image_get_total_size(image);
pMemoryRequirements->memoryRequirements.memoryTypeBits = 1;
pMemoryRequirements->memoryRequirements.alignment = alignment;
pMemoryRequirements->memoryRequirements.size = size;
}
VKAPI_ATTR void VKAPI_CALL
panvk_GetImageSparseMemoryRequirements2(
VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo,
uint32_t *pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
{
panvk_stub();
}
VKAPI_ATTR VkResult VKAPI_CALL
panvk_BindImageMemory2(VkDevice device, uint32_t bindInfoCount,
const VkBindImageMemoryInfo *pBindInfos)
{
for (uint32_t i = 0; i < bindInfoCount; ++i) {
VK_FROM_HANDLE(panvk_image, image, pBindInfos[i].image);
VK_FROM_HANDLE(panvk_device_memory, mem, pBindInfos[i].memory);
struct pan_kmod_bo *old_bo = image->bo;
assert(mem);
image->bo = pan_kmod_bo_get(mem->bo);
image->pimage.data.base = mem->addr.dev;
image->pimage.data.offset = pBindInfos[i].memoryOffset;
/* Reset the AFBC headers */
if (drm_is_afbc(image->pimage.layout.modifier)) {
/* Transient CPU mapping */
void *base = pan_kmod_bo_mmap(mem->bo, 0, pan_kmod_bo_size(mem->bo),
PROT_WRITE, MAP_SHARED, NULL);
assert(base != MAP_FAILED);
for (unsigned layer = 0; layer < image->pimage.layout.array_size;
layer++) {
for (unsigned level = 0; level < image->pimage.layout.nr_slices;
level++) {
void *header = base + image->pimage.data.offset +
(layer * image->pimage.layout.array_stride) +
image->pimage.layout.slices[level].offset;
memset(header, 0,
image->pimage.layout.slices[level].afbc.header_size);
}
}
ASSERTED int ret = os_munmap(base, pan_kmod_bo_size(mem->bo));
assert(!ret);
}
pan_kmod_bo_put(old_bo);
}
return VK_SUCCESS;
}
VKAPI_ATTR void VKAPI_CALL
panvk_DestroyBufferView(VkDevice _device, VkBufferView bufferView,
const VkAllocationCallbacks *pAllocator)

View file

@ -0,0 +1,27 @@
/*
* Copyright © 2021 Collabora Ltd.
* SPDX-License-Identifier: MIT
*/
#ifndef PANVK_IMAGE_H
#define PANVK_IMAGE_H
#include "vk_image.h"
#include "pan_texture.h"
struct panvk_image {
struct vk_image vk;
/* TODO: See if we can rework the synchronization logic so we don't need to
* pass BOs around.
*/
struct pan_kmod_bo *bo;
struct pan_image pimage;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image, vk.base, VkImage,
VK_OBJECT_TYPE_IMAGE)
#endif

View file

@ -932,21 +932,6 @@ struct panvk_pipeline {
VkRect2D scissor;
};
#define PANVK_MAX_PLANES 1
struct panvk_image {
struct vk_image vk;
/* TODO: See if we can rework the synchronization logic so we don't need to
* pass BOs around.
*/
struct pan_kmod_bo *bo;
struct pan_image pimage;
};
unsigned panvk_image_get_total_size(const struct panvk_image *image);
#define TEXTURE_DESC_WORDS 8
#define ATTRIB_BUF_DESC_WORDS 4
@ -1003,8 +988,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set_layout, vk.base,
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_device_memory, vk.base, VkDeviceMemory,
VK_OBJECT_TYPE_DEVICE_MEMORY)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image, vk.base, VkImage,
VK_OBJECT_TYPE_IMAGE)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image_view, vk.base, VkImageView,
VK_OBJECT_TYPE_IMAGE_VIEW);
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline, base, VkPipeline,

View file

@ -29,6 +29,7 @@
#include "genxml/gen_macros.h"
#include "panvk_cs.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include "pan_blitter.h"

View file

@ -27,6 +27,7 @@
#include "genxml/gen_macros.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include <assert.h>

View file

@ -31,6 +31,7 @@
#include "decode.h"
#include "panvk_cs.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include "vk_drm_syncobj.h"

View file

@ -27,6 +27,8 @@
*/
#include "genxml/gen_macros.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include "drm-uapi/drm_fourcc.h"

View file

@ -26,6 +26,7 @@
#include "pan_blitter.h"
#include "pan_props.h"
#include "panvk_image.h"
#include "panvk_private.h"
static void

View file

@ -27,6 +27,7 @@
#include "pan_props.h"
#include "pan_shader.h"
#include "panvk_image.h"
#include "panvk_private.h"
#include "panvk_vX_meta.h"

View file

@ -28,6 +28,7 @@
#include "pan_props.h"
#include "pan_shader.h"
#include "panvk_image.h"
#include "panvk_private.h"
static mali_ptr