mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 10:30:13 +01:00
panvk: Move the VkBufferView logic to its own file
Note that we make DestroyBufferView() a per-arch function even if it's not strictly needed, but given the size of the function, not sure it's worth having a extra panvk_buffer_view.c file. 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
822478ec20
commit
09d3411ad8
7 changed files with 134 additions and 96 deletions
|
|
@ -59,6 +59,7 @@ foreach arch : ['6', '7']
|
|||
'panvk_v@0@'.format(arch),
|
||||
[
|
||||
panvk_entrypoints[0],
|
||||
'panvk_vX_buffer_view.c',
|
||||
'panvk_vX_cmd_buffer.c',
|
||||
'panvk_vX_cs.c',
|
||||
'panvk_vX_descriptor_set.c',
|
||||
|
|
|
|||
30
src/panfrost/vulkan/panvk_buffer_view.h
Normal file
30
src/panfrost/vulkan/panvk_buffer_view.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef PANVK_BUFFER_VIEW_H
|
||||
#define PANVK_BUFFER_VIEW_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "vk_buffer_view.h"
|
||||
|
||||
struct panvk_priv_bo;
|
||||
|
||||
#define TEXTURE_DESC_WORDS 8
|
||||
#define ATTRIB_BUF_DESC_WORDS 4
|
||||
|
||||
struct panvk_buffer_view {
|
||||
struct vk_buffer_view vk;
|
||||
struct panvk_priv_bo *bo;
|
||||
struct {
|
||||
uint32_t tex[TEXTURE_DESC_WORDS];
|
||||
uint32_t img_attrib_buf[ATTRIB_BUF_DESC_WORDS * 2];
|
||||
} descs;
|
||||
};
|
||||
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, vk.base, VkBufferView,
|
||||
VK_OBJECT_TYPE_BUFFER_VIEW)
|
||||
|
||||
#endif
|
||||
|
|
@ -339,20 +339,6 @@ panvk_BindImageMemory2(VkDevice device, uint32_t bindInfoCount,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_DestroyBufferView(VkDevice _device, VkBufferView bufferView,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_buffer_view, view, bufferView);
|
||||
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
panvk_priv_bo_destroy(view->bo, pAllocator);
|
||||
vk_buffer_view_destroy(&device->vk, pAllocator, &view->vk);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_GetImageDrmFormatModifierPropertiesEXT(
|
||||
VkDevice device, VkImage _image,
|
||||
|
|
|
|||
|
|
@ -915,15 +915,6 @@ struct panvk_sampler {
|
|||
uint32_t desc[SAMPLER_DESC_WORDS];
|
||||
};
|
||||
|
||||
struct panvk_buffer_view {
|
||||
struct vk_buffer_view vk;
|
||||
struct panvk_priv_bo *bo;
|
||||
struct {
|
||||
uint32_t tex[TEXTURE_DESC_WORDS];
|
||||
uint32_t img_attrib_buf[ATTRIB_BUF_DESC_WORDS * 2];
|
||||
} descs;
|
||||
};
|
||||
|
||||
VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, vk.base, VkCommandBuffer,
|
||||
VK_OBJECT_TYPE_COMMAND_BUFFER)
|
||||
VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
|
||||
|
|
@ -935,8 +926,6 @@ VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
|
|||
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, vk.base, VkCommandPool,
|
||||
VK_OBJECT_TYPE_COMMAND_POOL)
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, vk.base, VkBufferView,
|
||||
VK_OBJECT_TYPE_BUFFER_VIEW)
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_POOL)
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set, base, VkDescriptorSet,
|
||||
|
|
|
|||
102
src/panfrost/vulkan/panvk_vX_buffer_view.c
Normal file
102
src/panfrost/vulkan/panvk_vX_buffer_view.c
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
*
|
||||
* Derived from tu_image.c which is:
|
||||
* Copyright © 2016 Red Hat.
|
||||
* Copyright © 2016 Bas Nieuwenhuizen
|
||||
* Copyright © 2015 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_buffer.h"
|
||||
#include "panvk_buffer_view.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
#include "vk_format.h"
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_per_arch(CreateBufferView)(VkDevice _device,
|
||||
const VkBufferViewCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkBufferView *pView)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_buffer, buffer, pCreateInfo->buffer);
|
||||
|
||||
struct panvk_buffer_view *view = vk_object_zalloc(
|
||||
&device->vk, pAllocator, sizeof(*view), VK_OBJECT_TYPE_BUFFER_VIEW);
|
||||
|
||||
if (!view)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
vk_buffer_view_init(&device->vk, &view->vk, pCreateInfo);
|
||||
|
||||
enum pipe_format pfmt = vk_format_to_pipe_format(view->vk.format);
|
||||
|
||||
mali_ptr address = panvk_buffer_gpu_ptr(buffer, pCreateInfo->offset);
|
||||
unsigned blksz = vk_format_get_blocksize(pCreateInfo->format);
|
||||
|
||||
assert(!(address & 63));
|
||||
|
||||
if (buffer->vk.usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) {
|
||||
unsigned bo_size = pan_size(SURFACE_WITH_STRIDE);
|
||||
view->bo = panvk_priv_bo_create(device, bo_size, 0, pAllocator,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
|
||||
pan_pack(view->bo->addr.host, SURFACE_WITH_STRIDE, cfg) {
|
||||
cfg.pointer = address;
|
||||
}
|
||||
|
||||
pan_pack(view->descs.tex, TEXTURE, cfg) {
|
||||
cfg.dimension = MALI_TEXTURE_DIMENSION_1D;
|
||||
cfg.format = GENX(panfrost_format_from_pipe_format)(pfmt)->hw;
|
||||
cfg.width = view->vk.elements;
|
||||
cfg.depth = cfg.height = 1;
|
||||
cfg.swizzle = PAN_V6_SWIZZLE(R, G, B, A);
|
||||
cfg.texel_ordering = MALI_TEXTURE_LAYOUT_LINEAR;
|
||||
cfg.levels = 1;
|
||||
cfg.array_size = 1;
|
||||
cfg.surfaces = view->bo->addr.dev;
|
||||
cfg.maximum_lod = cfg.minimum_lod = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (buffer->vk.usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) {
|
||||
uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf;
|
||||
|
||||
pan_pack(attrib_buf, ATTRIBUTE_BUFFER, cfg) {
|
||||
cfg.type = MALI_ATTRIBUTE_TYPE_3D_LINEAR;
|
||||
cfg.pointer = address;
|
||||
cfg.stride = blksz;
|
||||
cfg.size = view->vk.elements * blksz;
|
||||
}
|
||||
|
||||
attrib_buf += pan_size(ATTRIBUTE_BUFFER);
|
||||
pan_pack(attrib_buf, ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) {
|
||||
cfg.s_dimension = view->vk.elements;
|
||||
cfg.t_dimension = 1;
|
||||
cfg.r_dimension = 1;
|
||||
cfg.row_stride = view->vk.elements * blksz;
|
||||
}
|
||||
}
|
||||
|
||||
*pView = panvk_buffer_view_to_handle(view);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_per_arch(DestroyBufferView)(VkDevice _device, VkBufferView bufferView,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_buffer_view, view, bufferView);
|
||||
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
panvk_priv_bo_destroy(view->bo, pAllocator);
|
||||
vk_buffer_view_destroy(&device->vk, pAllocator, &view->vk);
|
||||
}
|
||||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_buffer_view.h"
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_buffer.h"
|
||||
#include "panvk_image.h"
|
||||
#include "panvk_private.h"
|
||||
|
||||
|
|
@ -173,73 +172,3 @@ panvk_per_arch(CreateImageView)(VkDevice _device,
|
|||
*pView = panvk_image_view_to_handle(view);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_per_arch(CreateBufferView)(VkDevice _device,
|
||||
const VkBufferViewCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkBufferView *pView)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_buffer, buffer, pCreateInfo->buffer);
|
||||
|
||||
struct panvk_buffer_view *view = vk_object_zalloc(
|
||||
&device->vk, pAllocator, sizeof(*view), VK_OBJECT_TYPE_BUFFER_VIEW);
|
||||
|
||||
if (!view)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
vk_buffer_view_init(&device->vk, &view->vk, pCreateInfo);
|
||||
|
||||
enum pipe_format pfmt = vk_format_to_pipe_format(view->vk.format);
|
||||
|
||||
mali_ptr address = panvk_buffer_gpu_ptr(buffer, pCreateInfo->offset);
|
||||
unsigned blksz = vk_format_get_blocksize(pCreateInfo->format);
|
||||
|
||||
assert(!(address & 63));
|
||||
|
||||
if (buffer->vk.usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) {
|
||||
unsigned bo_size = pan_size(SURFACE_WITH_STRIDE);
|
||||
view->bo = panvk_priv_bo_create(device, bo_size, 0, pAllocator,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
|
||||
pan_pack(view->bo->addr.host, SURFACE_WITH_STRIDE, cfg) {
|
||||
cfg.pointer = address;
|
||||
}
|
||||
|
||||
pan_pack(view->descs.tex, TEXTURE, cfg) {
|
||||
cfg.dimension = MALI_TEXTURE_DIMENSION_1D;
|
||||
cfg.format = GENX(panfrost_format_from_pipe_format)(pfmt)->hw;
|
||||
cfg.width = view->vk.elements;
|
||||
cfg.depth = cfg.height = 1;
|
||||
cfg.swizzle = PAN_V6_SWIZZLE(R, G, B, A);
|
||||
cfg.texel_ordering = MALI_TEXTURE_LAYOUT_LINEAR;
|
||||
cfg.levels = 1;
|
||||
cfg.array_size = 1;
|
||||
cfg.surfaces = view->bo->addr.dev;
|
||||
cfg.maximum_lod = cfg.minimum_lod = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (buffer->vk.usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) {
|
||||
uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf;
|
||||
|
||||
pan_pack(attrib_buf, ATTRIBUTE_BUFFER, cfg) {
|
||||
cfg.type = MALI_ATTRIBUTE_TYPE_3D_LINEAR;
|
||||
cfg.pointer = address;
|
||||
cfg.stride = blksz;
|
||||
cfg.size = view->vk.elements * blksz;
|
||||
}
|
||||
|
||||
attrib_buf += pan_size(ATTRIBUTE_BUFFER);
|
||||
pan_pack(attrib_buf, ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) {
|
||||
cfg.s_dimension = view->vk.elements;
|
||||
cfg.t_dimension = 1;
|
||||
cfg.r_dimension = 1;
|
||||
cfg.row_stride = view->vk.elements * blksz;
|
||||
}
|
||||
}
|
||||
|
||||
*pView = panvk_buffer_view_to_handle(view);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue