mesa/src/amd/vulkan/radv_sdma.h
Samuel Pitoiset 87fde606cf radv: use SPDX-License-Identifier
Only files under src/amd/vulkan/** are concerned.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28599>
2024-04-08 07:17:31 +00:00

86 lines
4.2 KiB
C

/*
* Copyright © 2023 Valve Corporation
*
* SPDX-License-Identifier: MIT
*/
#ifndef RADV_SDMA_H
#define RADV_SDMA_H
#include "radv_image.h"
#ifdef __cplusplus
extern "C" {
#endif
struct radv_sdma_surf {
VkExtent3D extent; /* Image extent. */
VkOffset3D offset; /* Image offset. */
uint64_t va; /* Virtual address of image data. */
unsigned bpp; /* Bytes per pixel. */
unsigned blk_w; /* Image format block width in pixels. */
unsigned blk_h; /* Image format block height in pixels. */
unsigned mip_levels; /* Mip levels in the image. */
uint8_t micro_tile_mode; /* Micro tile mode of the image. */
bool is_linear; /* Whether the image is linear. */
bool is_3d; /* Whether the image is 3-dimensional. */
union {
/* linear images only */
struct {
unsigned pitch; /* Row pitch in bytes. */
unsigned slice_pitch; /* Slice pitch in bytes. */
};
/* tiled images only */
struct {
uint64_t meta_va; /* Virtual address of metadata. */
uint32_t meta_config; /* Metadata configuration DWORD. */
uint32_t header_dword; /* Extra bits for the copy packet header. */
uint32_t info_dword; /* Image information DWORD. */
};
};
};
ALWAYS_INLINE static VkExtent3D
radv_sdma_get_copy_extent(const struct radv_image *const image, const VkImageSubresourceLayers subresource,
VkExtent3D extent)
{
if (image->vk.image_type != VK_IMAGE_TYPE_3D)
extent.depth = vk_image_subresource_layer_count(&image->vk, &subresource);
return extent;
}
struct radv_sdma_surf radv_sdma_get_buf_surf(const struct radv_buffer *const buffer,
const struct radv_image *const image,
const VkBufferImageCopy2 *const region,
const VkImageAspectFlags aspect_mask);
struct radv_sdma_surf radv_sdma_get_surf(const struct radv_device *const device, const struct radv_image *const image,
const VkImageSubresourceLayers subresource, const VkOffset3D offset,
const VkImageAspectFlags aspect_mask);
void radv_sdma_copy_buffer_image(const struct radv_device *device, struct radeon_cmdbuf *cs,
const struct radv_sdma_surf *buf, const struct radv_sdma_surf *img,
const VkExtent3D extent, bool to_image);
bool radv_sdma_use_unaligned_buffer_image_copy(const struct radv_device *device, const struct radv_sdma_surf *buf,
const struct radv_sdma_surf *img, const VkExtent3D ext);
void radv_sdma_copy_buffer_image_unaligned(const struct radv_device *device, struct radeon_cmdbuf *cs,
const struct radv_sdma_surf *buf, const struct radv_sdma_surf *img_in,
const VkExtent3D copy_extent, struct radeon_winsys_bo *temp_bo,
bool to_image);
void radv_sdma_copy_image(const struct radv_device *device, struct radeon_cmdbuf *cs, const struct radv_sdma_surf *src,
const struct radv_sdma_surf *dst, const VkExtent3D extent);
bool radv_sdma_use_t2t_scanline_copy(const struct radv_device *device, const struct radv_sdma_surf *src,
const struct radv_sdma_surf *dst, const VkExtent3D extent);
void radv_sdma_copy_image_t2t_scanline(const struct radv_device *device, struct radeon_cmdbuf *cs,
const struct radv_sdma_surf *src, const struct radv_sdma_surf *dst,
const VkExtent3D extent, struct radeon_winsys_bo *temp_bo);
void radv_sdma_copy_buffer(const struct radv_device *device, struct radeon_cmdbuf *cs, uint64_t src_va, uint64_t dst_va,
uint64_t size);
void radv_sdma_fill_buffer(const struct radv_device *device, struct radeon_cmdbuf *cs, const uint64_t va,
const uint64_t size, const uint32_t value);
#ifdef __cplusplus
}
#endif
#endif /* RADV_SDMA_H */