xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/radv_sdma.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2023 Valve Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
5*61046927SAndroid Build Coastguard Worker  */
6*61046927SAndroid Build Coastguard Worker 
7*61046927SAndroid Build Coastguard Worker #ifndef RADV_SDMA_H
8*61046927SAndroid Build Coastguard Worker #define RADV_SDMA_H
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include "radv_image.h"
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
13*61046927SAndroid Build Coastguard Worker extern "C" {
14*61046927SAndroid Build Coastguard Worker #endif
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker struct radv_sdma_surf {
17*61046927SAndroid Build Coastguard Worker    VkExtent3D extent;       /* Image extent. */
18*61046927SAndroid Build Coastguard Worker    VkOffset3D offset;       /* Image offset. */
19*61046927SAndroid Build Coastguard Worker    uint64_t va;             /* Virtual address of image data. */
20*61046927SAndroid Build Coastguard Worker    unsigned bpp;            /* Bytes per pixel. */
21*61046927SAndroid Build Coastguard Worker    unsigned blk_w;          /* Image format block width in pixels. */
22*61046927SAndroid Build Coastguard Worker    unsigned blk_h;          /* Image format block height in pixels. */
23*61046927SAndroid Build Coastguard Worker    unsigned mip_levels;     /* Mip levels in the image. */
24*61046927SAndroid Build Coastguard Worker    uint8_t micro_tile_mode; /* Micro tile mode of the image. */
25*61046927SAndroid Build Coastguard Worker    bool is_linear;          /* Whether the image is linear. */
26*61046927SAndroid Build Coastguard Worker    bool is_3d;              /* Whether the image is 3-dimensional. */
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker    union {
29*61046927SAndroid Build Coastguard Worker       /* linear images only */
30*61046927SAndroid Build Coastguard Worker       struct {
31*61046927SAndroid Build Coastguard Worker          unsigned pitch;       /* Row pitch in bytes. */
32*61046927SAndroid Build Coastguard Worker          unsigned slice_pitch; /* Slice pitch in bytes. */
33*61046927SAndroid Build Coastguard Worker       };
34*61046927SAndroid Build Coastguard Worker       /* tiled images only */
35*61046927SAndroid Build Coastguard Worker       struct {
36*61046927SAndroid Build Coastguard Worker          uint64_t meta_va;      /* Virtual address of metadata. */
37*61046927SAndroid Build Coastguard Worker          uint32_t meta_config;  /* Metadata configuration DWORD. */
38*61046927SAndroid Build Coastguard Worker          uint32_t header_dword; /* Extra bits for the copy packet header. */
39*61046927SAndroid Build Coastguard Worker          uint32_t info_dword;   /* Image information DWORD. */
40*61046927SAndroid Build Coastguard Worker       };
41*61046927SAndroid Build Coastguard Worker    };
42*61046927SAndroid Build Coastguard Worker };
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker ALWAYS_INLINE static VkExtent3D
radv_sdma_get_copy_extent(const struct radv_image * const image,const VkImageSubresourceLayers subresource,VkExtent3D extent)45*61046927SAndroid Build Coastguard Worker radv_sdma_get_copy_extent(const struct radv_image *const image, const VkImageSubresourceLayers subresource,
46*61046927SAndroid Build Coastguard Worker                           VkExtent3D extent)
47*61046927SAndroid Build Coastguard Worker {
48*61046927SAndroid Build Coastguard Worker    if (image->vk.image_type != VK_IMAGE_TYPE_3D)
49*61046927SAndroid Build Coastguard Worker       extent.depth = vk_image_subresource_layer_count(&image->vk, &subresource);
50*61046927SAndroid Build Coastguard Worker 
51*61046927SAndroid Build Coastguard Worker    return extent;
52*61046927SAndroid Build Coastguard Worker }
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker struct radv_sdma_surf radv_sdma_get_buf_surf(const struct radv_buffer *const buffer,
55*61046927SAndroid Build Coastguard Worker                                              const struct radv_image *const image,
56*61046927SAndroid Build Coastguard Worker                                              const VkBufferImageCopy2 *const region,
57*61046927SAndroid Build Coastguard Worker                                              const VkImageAspectFlags aspect_mask);
58*61046927SAndroid Build Coastguard Worker struct radv_sdma_surf radv_sdma_get_surf(const struct radv_device *const device, const struct radv_image *const image,
59*61046927SAndroid Build Coastguard Worker                                          const VkImageSubresourceLayers subresource, const VkOffset3D offset,
60*61046927SAndroid Build Coastguard Worker                                          const VkImageAspectFlags aspect_mask);
61*61046927SAndroid Build Coastguard Worker void radv_sdma_copy_buffer_image(const struct radv_device *device, struct radeon_cmdbuf *cs,
62*61046927SAndroid Build Coastguard Worker                                  const struct radv_sdma_surf *buf, const struct radv_sdma_surf *img,
63*61046927SAndroid Build Coastguard Worker                                  const VkExtent3D extent, bool to_image);
64*61046927SAndroid Build Coastguard Worker bool radv_sdma_use_unaligned_buffer_image_copy(const struct radv_device *device, const struct radv_sdma_surf *buf,
65*61046927SAndroid Build Coastguard Worker                                                const struct radv_sdma_surf *img, const VkExtent3D ext);
66*61046927SAndroid Build Coastguard Worker void radv_sdma_copy_buffer_image_unaligned(const struct radv_device *device, struct radeon_cmdbuf *cs,
67*61046927SAndroid Build Coastguard Worker                                            const struct radv_sdma_surf *buf, const struct radv_sdma_surf *img_in,
68*61046927SAndroid Build Coastguard Worker                                            const VkExtent3D copy_extent, struct radeon_winsys_bo *temp_bo,
69*61046927SAndroid Build Coastguard Worker                                            bool to_image);
70*61046927SAndroid Build Coastguard Worker void radv_sdma_copy_image(const struct radv_device *device, struct radeon_cmdbuf *cs, const struct radv_sdma_surf *src,
71*61046927SAndroid Build Coastguard Worker                           const struct radv_sdma_surf *dst, const VkExtent3D extent);
72*61046927SAndroid Build Coastguard Worker bool radv_sdma_use_t2t_scanline_copy(const struct radv_device *device, const struct radv_sdma_surf *src,
73*61046927SAndroid Build Coastguard Worker                                      const struct radv_sdma_surf *dst, const VkExtent3D extent);
74*61046927SAndroid Build Coastguard Worker void radv_sdma_copy_image_t2t_scanline(const struct radv_device *device, struct radeon_cmdbuf *cs,
75*61046927SAndroid Build Coastguard Worker                                        const struct radv_sdma_surf *src, const struct radv_sdma_surf *dst,
76*61046927SAndroid Build Coastguard Worker                                        const VkExtent3D extent, struct radeon_winsys_bo *temp_bo);
77*61046927SAndroid Build Coastguard Worker void radv_sdma_copy_buffer(const struct radv_device *device, struct radeon_cmdbuf *cs, uint64_t src_va, uint64_t dst_va,
78*61046927SAndroid Build Coastguard Worker                            uint64_t size);
79*61046927SAndroid Build Coastguard Worker void radv_sdma_fill_buffer(const struct radv_device *device, struct radeon_cmdbuf *cs, const uint64_t va,
80*61046927SAndroid Build Coastguard Worker                            const uint64_t size, const uint32_t value);
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
83*61046927SAndroid Build Coastguard Worker }
84*61046927SAndroid Build Coastguard Worker #endif
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker #endif /* RADV_SDMA_H */
87