mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
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:
parent
5b91e44309
commit
763fa8f45a
11 changed files with 107 additions and 85 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
27
src/panfrost/vulkan/panvk_image.h
Normal file
27
src/panfrost/vulkan/panvk_image.h
Normal 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
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "decode.h"
|
||||
|
||||
#include "panvk_cs.h"
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
#include "vk_drm_syncobj.h"
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
*/
|
||||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
#include "drm-uapi/drm_fourcc.h"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include "pan_blitter.h"
|
||||
#include "pan_props.h"
|
||||
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "pan_props.h"
|
||||
#include "pan_shader.h"
|
||||
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
static mali_ptr
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue