vk: Use anv_image_create() for creating dmabuf VkImage
We need to make sure we use the VkImage infrastructure for creating dmabuf images. Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
This commit is contained in:
@@ -181,8 +181,10 @@ anv_image_make_surface(const struct anv_image_create_info *create_info,
|
||||
*/
|
||||
assert(anv_is_aligned(qpitch, j));
|
||||
|
||||
const uint32_t stride = align_u32(mt_width * format_info->cpp,
|
||||
tile_info->width);
|
||||
uint32_t stride = align_u32(mt_width * format_info->cpp, tile_info->width);
|
||||
if (create_info->stride > 0)
|
||||
stride = create_info->stride;
|
||||
|
||||
const uint32_t size = stride * align_u32(mt_height, tile_info->height);
|
||||
const uint32_t offset = align_u32(*inout_image_size,
|
||||
tile_info->surface_alignment);
|
||||
|
||||
+24
-12
@@ -39,6 +39,7 @@ VkResult anv_CreateDmaBufImageINTEL(
|
||||
struct anv_device_memory *mem;
|
||||
struct anv_image *image;
|
||||
VkResult result;
|
||||
VkImage image_h;
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL);
|
||||
|
||||
@@ -65,19 +66,30 @@ VkResult anv_CreateDmaBufImageINTEL(
|
||||
goto fail_mem;
|
||||
}
|
||||
|
||||
*image = (struct anv_image) {
|
||||
.bo = &mem->bo,
|
||||
.offset = 0,
|
||||
.type = VK_IMAGE_TYPE_2D,
|
||||
.extent = pCreateInfo->extent,
|
||||
.size = mem->bo.size,
|
||||
|
||||
.primary_surface = {
|
||||
.offset = 0,
|
||||
.stride = pCreateInfo->strideInBytes,
|
||||
anv_image_create(_device,
|
||||
&(struct anv_image_create_info) {
|
||||
.force_tile_mode = true,
|
||||
.tile_mode = XMAJOR,
|
||||
},
|
||||
};
|
||||
.stride = pCreateInfo->strideInBytes,
|
||||
.vk_info =
|
||||
&(VkImageCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
||||
.imageType = VK_IMAGE_TYPE_2D,
|
||||
.format = pCreateInfo->format,
|
||||
.extent = pCreateInfo->extent,
|
||||
.mipLevels = 1,
|
||||
.arraySize = 1,
|
||||
.samples = 1,
|
||||
/* FIXME: Need a way to use X tiling to allow scanout */
|
||||
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
||||
.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
||||
.flags = 0,
|
||||
}},
|
||||
&image_h);
|
||||
|
||||
image = anv_image_from_handle(image_h);
|
||||
image->bo = &mem->bo;
|
||||
image->offset = 0;
|
||||
|
||||
assert(image->extent.width > 0);
|
||||
assert(image->extent.height > 0);
|
||||
|
||||
@@ -996,6 +996,7 @@ struct anv_image_create_info {
|
||||
const VkImageCreateInfo *vk_info;
|
||||
bool force_tile_mode;
|
||||
uint8_t tile_mode;
|
||||
uint32_t stride;
|
||||
};
|
||||
|
||||
VkResult anv_image_create(VkDevice _device,
|
||||
|
||||
@@ -121,6 +121,7 @@ VkResult anv_CreateSwapChainWSI(
|
||||
&(struct anv_image_create_info) {
|
||||
.force_tile_mode = true,
|
||||
.tile_mode = XMAJOR,
|
||||
.stride = 0,
|
||||
.vk_info =
|
||||
&(VkImageCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
||||
|
||||
Reference in New Issue
Block a user