Corrected procedure to collect proper size of image from VkImageCreateInfo (#2289)

Fixes #2155 according to issue description

Additional remark: The image size was previously calculated based on the
memory size, which seems unusual. Due to Vulkan's configuration
capabilities, the size of memory allocated for a specific texture may
differ from what would be expected based on the texture dimensions.
Thus, calculating the image dimensions back from the memory size of a
Vulkan texture can be challenging.
This commit is contained in:
Marcin Hajder
2025-05-27 19:17:14 +02:00
committed by GitHub
parent 3ab4d8aab2
commit f30a191978
7 changed files with 128 additions and 84 deletions

View File

@@ -232,12 +232,11 @@ struct ConsistencyExternalImageTest : public VulkanTestBase
const VulkanMemoryTypeList& memoryTypeList =
vkImage2D.getMemoryTypeList();
uint64_t totalImageMemSize = vkImage2D.getSize();
log_info("Memory type index: %u\n", (uint32_t)memoryTypeList[0]);
log_info("Memory type property: %d\n",
memoryTypeList[0].getMemoryTypeProperty());
log_info("Image size : %ld\n", totalImageMemSize);
log_info("Image size : %ld\n", vkImage2D.getSize());
VulkanDeviceMemory* vkDeviceMem =
new VulkanDeviceMemory(*vkDevice, vkImage2D, memoryTypeList[0],
@@ -298,14 +297,12 @@ struct ConsistencyExternalImageTest : public VulkanTestBase
const VkImageCreateInfo VulkanImageCreateInfo =
vkImage2D.getVkImageCreateInfo();
errNum = getCLImageInfoFromVkImageInfo(&VulkanImageCreateInfo,
totalImageMemSize, &img_format,
&image_desc);
if (errNum != CL_SUCCESS)
{
log_error("getCLImageInfoFromVkImageInfo failed!!!");
return TEST_FAIL;
}
auto layout = vkImage2D.getSubresourceLayout();
errNum = getCLImageInfoFromVkImageInfo(
device, &VulkanImageCreateInfo, &img_format, &image_desc,
vulkanImageTiling == VULKAN_IMAGE_TILING_LINEAR ? &layout
: nullptr);
test_error_fail(errNum, "getCLImageInfoFromVkImageInfo failed!!!");
clMemWrapper image;

View File

@@ -90,12 +90,11 @@ struct ConsistencyExternalImage1DTest : public VulkanTestBase
const VulkanMemoryTypeList& memoryTypeList =
vkImage1D.getMemoryTypeList();
uint64_t totalImageMemSize = vkImage1D.getSize();
log_info("Memory type index: %u\n", (uint32_t)memoryTypeList[0]);
log_info("Memory type property: %d\n",
memoryTypeList[0].getMemoryTypeProperty());
log_info("Image size : %lu\n", totalImageMemSize);
log_info("Image size : %lu\n", vkImage1D.getSize());
VulkanDeviceMemory* vkDeviceMem =
new VulkanDeviceMemory(*vkDevice, vkImage1D, memoryTypeList[0],
@@ -156,14 +155,12 @@ struct ConsistencyExternalImage1DTest : public VulkanTestBase
const VkImageCreateInfo VulkanImageCreateInfo =
vkImage1D.getVkImageCreateInfo();
errNum = getCLImageInfoFromVkImageInfo(&VulkanImageCreateInfo,
totalImageMemSize, &img_format,
&image_desc);
if (errNum != CL_SUCCESS)
{
log_error("getCLImageInfoFromVkImageInfo failed!!!");
return TEST_FAIL;
}
auto layout = vkImage1D.getSubresourceLayout();
errNum = getCLImageInfoFromVkImageInfo(
device, &VulkanImageCreateInfo, &img_format, &image_desc,
vulkanImageTiling == VULKAN_IMAGE_TILING_LINEAR ? &layout
: nullptr);
test_error_fail(errNum, "getCLImageInfoFromVkImageInfo failed!!!");
clMemWrapper image;
@@ -174,16 +171,6 @@ struct ConsistencyExternalImage1DTest : public VulkanTestBase
test_error(errNum, "Unable to create Image with Properties");
image.reset();
// Passing NULL properties and a valid image_format and image_desc
image = clCreateImageWithProperties(context, NULL, CL_MEM_READ_WRITE,
&img_format, &image_desc, NULL,
&errNum);
test_error(errNum,
"Unable to create image with NULL properties "
"with valid image format and image desc");
image.reset();
// Passing image_format as NULL
image = clCreateImageWithProperties(context, extMemProperties.data(),
CL_MEM_READ_WRITE, NULL,

View File

@@ -92,12 +92,11 @@ struct ConsistencyExternalImage3DTest : public VulkanTestBase
const VulkanMemoryTypeList& memoryTypeList =
vkImage3D.getMemoryTypeList();
uint64_t totalImageMemSize = vkImage3D.getSize();
log_info("Memory type index: %u\n", (uint32_t)memoryTypeList[0]);
log_info("Memory type property: %d\n",
memoryTypeList[0].getMemoryTypeProperty());
log_info("Image size : %lu\n", totalImageMemSize);
log_info("Image size : %lu\n", vkImage3D.getSize());
VulkanDeviceMemory* vkDeviceMem =
new VulkanDeviceMemory(*vkDevice, vkImage3D, memoryTypeList[0],
@@ -158,14 +157,12 @@ struct ConsistencyExternalImage3DTest : public VulkanTestBase
const VkImageCreateInfo VulkanImageCreateInfo =
vkImage3D.getVkImageCreateInfo();
errNum = getCLImageInfoFromVkImageInfo(&VulkanImageCreateInfo,
totalImageMemSize, &img_format,
&image_desc);
if (errNum != CL_SUCCESS)
{
log_error("getCLImageInfoFromVkImageInfo failed!!!");
return TEST_FAIL;
}
auto layout = vkImage3D.getSubresourceLayout();
errNum = getCLImageInfoFromVkImageInfo(
device, &VulkanImageCreateInfo, &img_format, &image_desc,
vulkanImageTiling == VULKAN_IMAGE_TILING_LINEAR ? &layout
: nullptr);
test_error_fail(errNum, "getCLImageInfoFromVkImageInfo failed!!!");
clMemWrapper image;
@@ -176,16 +173,6 @@ struct ConsistencyExternalImage3DTest : public VulkanTestBase
test_error(errNum, "Unable to create Image with Properties");
image.reset();
// Passing NULL properties and a valid image_format and image_desc
image = clCreateImageWithProperties(context, NULL, CL_MEM_READ_WRITE,
&img_format, &image_desc, NULL,
&errNum);
test_error(errNum,
"Unable to create image with NULL properties "
"with valid image format and image desc");
image.reset();
// Passing image_format as NULL
image = clCreateImageWithProperties(context, extMemProperties.data(),
CL_MEM_READ_WRITE, NULL,