From 8dff06aada5789f3fbdf451b6d80c8c702e3abb5 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:11:53 -0600 Subject: [PATCH] nvk: add linear image creation support. the dEQP-VK.draw.* tests use a tiled + linear image and copy between them. This fixes the result gathering, not the actual result. Part-of: --- src/nouveau/nil/nil_image.c | 3 +++ src/nouveau/nil/nil_image.h | 1 + src/nouveau/vulkan/nvk_image.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/src/nouveau/nil/nil_image.c b/src/nouveau/nil/nil_image.c index 7caeaa238fa..0863edad2f0 100644 --- a/src/nouveau/nil/nil_image.c +++ b/src/nouveau/nil/nil_image.c @@ -94,6 +94,9 @@ static struct nil_tiling choose_tiling(struct nil_extent4d extent_B, enum nil_image_usage_flags usage) { + if (usage & NIL_IMAGE_USAGE_LINEAR_BIT) + return (struct nil_tiling) { .is_tiled = false }; + struct nil_tiling tiling = { .is_tiled = true, .gob_height_8 = true, diff --git a/src/nouveau/nil/nil_image.h b/src/nouveau/nil/nil_image.h index 6acb8fc3d7a..7f876184003 100644 --- a/src/nouveau/nil/nil_image.h +++ b/src/nouveau/nil/nil_image.h @@ -24,6 +24,7 @@ enum nil_image_usage_flags { NIL_IMAGE_USAGE_STORAGE_BIT = BITFIELD_BIT(4), NIL_IMAGE_USAGE_CUBE_BIT = BITFIELD_BIT(5), NIL_IMAGE_USAGE_2D_VIEW_BIT = BITFIELD_BIT(6), + NIL_IMAGE_USAGE_LINEAR_BIT = BITFIELD_BIT(7), }; enum PACKED nil_view_type { diff --git a/src/nouveau/vulkan/nvk_image.c b/src/nouveau/vulkan/nvk_image.c index 5f6a4d0ebbe..b6d868991d1 100644 --- a/src/nouveau/vulkan/nvk_image.c +++ b/src/nouveau/vulkan/nvk_image.c @@ -195,6 +195,10 @@ static VkResult nvk_image_init(struct nvk_device *device, { vk_image_init(&device->vk, &image->vk, pCreateInfo); + enum nil_image_usage_flags usage = 0; /* TODO */ + if (pCreateInfo->tiling == VK_IMAGE_TILING_LINEAR) + usage |= NIL_IMAGE_USAGE_LINEAR_BIT; + struct nil_image_init_info nil_info = { .dim = vk_image_type_to_nil_dim(pCreateInfo->imageType), .format = vk_format_to_pipe_format(pCreateInfo->format), @@ -206,6 +210,7 @@ static VkResult nvk_image_init(struct nvk_device *device, }, .levels = pCreateInfo->mipLevels, .samples = pCreateInfo->samples, + .usage = usage, }; ASSERTED bool ok = nil_image_init(nvk_device_physical(device)->dev,