Skip to content

Commit 5dbe48e

Browse files
authored
Fix test_vulkan_interop_image validation errors for early release of VkDeviceMemory (#2613)
Related to #2489 @nikhiljnv @karolherbst similar to #2612, I wasn’t able to fully validate this test due to the lack of support for simultaneous import/export semaphores. I’d appreciate your review of this PR, thanks!
1 parent 1bffbc3 commit 5dbe48e

1 file changed

Lines changed: 65 additions & 51 deletions

File tree

test_conformance/vulkan/test_vulkan_interop_image.cpp

Lines changed: 65 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -451,47 +451,51 @@ int run_test_with_two_queue(
451451
ROUND_UP(vkImage2D.getSize(),
452452
vkImage2D.getAlignment());
453453
}
454-
VulkanImage2DList vkImage2DList(
455-
num2DImages, vkDevice, vkFormat, width, height,
456-
*vulkanImageTiling, numMipLevels,
457-
vkExternalMemoryHandleType);
454+
std::unique_ptr<VulkanImage2DList> vkImage2DList{
455+
new VulkanImage2DList(
456+
num2DImages, vkDevice, vkFormat, width,
457+
height, *vulkanImageTiling, numMipLevels,
458+
vkExternalMemoryHandleType)
459+
};
458460
for (size_t bIdx = 0; bIdx < num2DImages; bIdx++)
459461
{
460462
vkImage2DListDeviceMemory1.push_back(
461463
new VulkanDeviceMemory(
462-
vkDevice, vkImage2DList[bIdx],
464+
vkDevice, (*vkImage2DList)[bIdx],
463465
memoryType,
464466
vkExternalMemoryHandleType));
465467
vkImage2DListDeviceMemory1[bIdx]->bindImage(
466-
vkImage2DList[bIdx], 0);
468+
(*vkImage2DList)[bIdx], 0);
467469
externalMemory1.push_back(
468470
new clExternalMemoryImage(
469471
*vkImage2DListDeviceMemory1[bIdx],
470472
vkExternalMemoryHandleType, context,
471473
totalImageMemSize, width, height, 0,
472-
vkImage2DList[bIdx], deviceId));
474+
(*vkImage2DList)[bIdx], deviceId));
473475
}
474476
VulkanImageViewList vkImage2DViewList(
475-
vkDevice, vkImage2DList);
476-
VulkanImage2DList vkImage2DList2(
477-
num2DImages, vkDevice, vkFormat, width, height,
478-
*vulkanImageTiling, numMipLevels,
479-
vkExternalMemoryHandleType);
477+
vkDevice, (*vkImage2DList));
478+
std::unique_ptr<VulkanImage2DList> vkImage2DList2{
479+
new VulkanImage2DList(
480+
num2DImages, vkDevice, vkFormat, width,
481+
height, *vulkanImageTiling, numMipLevels,
482+
vkExternalMemoryHandleType)
483+
};
480484
for (size_t bIdx = 0; bIdx < num2DImages; bIdx++)
481485
{
482486
vkImage2DListDeviceMemory2.push_back(
483487
new VulkanDeviceMemory(
484-
vkDevice, vkImage2DList2[bIdx],
488+
vkDevice, (*vkImage2DList2)[bIdx],
485489
memoryType,
486490
vkExternalMemoryHandleType));
487491
vkImage2DListDeviceMemory2[bIdx]->bindImage(
488-
vkImage2DList2[bIdx], 0);
492+
(*vkImage2DList2)[bIdx], 0);
489493
externalMemory2.push_back(
490494
new clExternalMemoryImage(
491495
*vkImage2DListDeviceMemory2[bIdx],
492496
vkExternalMemoryHandleType, context,
493497
totalImageMemSize, width, height, 0,
494-
vkImage2DList2[bIdx], deviceId));
498+
(*vkImage2DList2)[bIdx], deviceId));
495499
}
496500

497501
cl_mem external_mem_image1[5];
@@ -517,18 +521,18 @@ int run_test_with_two_queue(
517521
vkImage2DViewList);
518522
vkCopyCommandBuffer.begin();
519523
vkCopyCommandBuffer.pipelineBarrier(
520-
vkImage2DList,
524+
(*vkImage2DList),
521525
VULKAN_IMAGE_LAYOUT_UNDEFINED,
522526
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
523527
for (size_t i2DIdx = 0;
524-
i2DIdx < vkImage2DList.size(); i2DIdx++)
528+
i2DIdx < vkImage2DList->size(); i2DIdx++)
525529
{
526530
vkCopyCommandBuffer.copyBufferToImage(
527-
vkSrcBuffer, vkImage2DList[i2DIdx],
531+
vkSrcBuffer, (*vkImage2DList)[i2DIdx],
528532
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
529533
}
530534
vkCopyCommandBuffer.pipelineBarrier(
531-
vkImage2DList,
535+
(*vkImage2DList),
532536
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
533537
VULKAN_IMAGE_LAYOUT_GENERAL);
534538
vkCopyCommandBuffer.end();
@@ -554,22 +558,23 @@ int run_test_with_two_queue(
554558
if (useSingleImageKernel)
555559
{
556560
for (size_t i2DIdx = 0;
557-
i2DIdx < vkImage2DList.size();
561+
i2DIdx < vkImage2DList->size();
558562
i2DIdx++)
559563
{
560564
vkDescriptorSet.update(
561565
1, vkImage2DViewList[i2DIdx]);
562566
vkCopyCommandBuffer.begin();
563567
vkCopyCommandBuffer.pipelineBarrier(
564-
vkImage2DList,
568+
(*vkImage2DList),
565569
VULKAN_IMAGE_LAYOUT_UNDEFINED,
566570
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
567571

568572
vkCopyCommandBuffer.copyBufferToImage(
569-
vkSrcBuffer, vkImage2DList[i2DIdx],
573+
vkSrcBuffer,
574+
(*vkImage2DList)[i2DIdx],
570575
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
571576
vkCopyCommandBuffer.pipelineBarrier(
572-
vkImage2DList,
577+
(*vkImage2DList),
573578
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
574579
VULKAN_IMAGE_LAYOUT_GENERAL);
575580
vkCopyCommandBuffer.end();
@@ -591,7 +596,7 @@ int run_test_with_two_queue(
591596
/ 2),
592597
1);
593598
vkShaderCommandBuffer.end();
594-
if (i2DIdx < vkImage2DList.size() - 1)
599+
if (i2DIdx < vkImage2DList->size() - 1)
595600
{
596601
vkQueue.submit(
597602
vkShaderCommandBuffer);
@@ -807,6 +812,8 @@ int run_test_with_two_queue(
807812
break;
808813
}
809814
}
815+
vkImage2DList.reset(nullptr);
816+
vkImage2DList2.reset(nullptr);
810817
for (uint32_t i = 0; i < num2DImages; i++)
811818
{
812819
delete vkImage2DListDeviceMemory1[i];
@@ -1068,52 +1075,56 @@ int run_test_with_one_queue(
10681075
ROUND_UP(vkImage2D.getSize(),
10691076
vkImage2D.getAlignment());
10701077
}
1071-
VulkanImage2DList vkImage2DList(
1072-
num2DImages, vkDevice, vkFormat, width, height,
1073-
*vulkanImageTiling, numMipLevels,
1074-
vkExternalMemoryHandleType);
1075-
for (size_t bIdx = 0; bIdx < vkImage2DList.size();
1078+
std::unique_ptr<VulkanImage2DList> vkImage2DList{
1079+
new VulkanImage2DList(
1080+
num2DImages, vkDevice, vkFormat, width,
1081+
height, *vulkanImageTiling, numMipLevels,
1082+
vkExternalMemoryHandleType)
1083+
};
1084+
for (size_t bIdx = 0; bIdx < vkImage2DList->size();
10761085
bIdx++)
10771086
{
10781087
// Create list of Vulkan device memories and
10791088
// bind the list of Vulkan images.
10801089
vkImage2DListDeviceMemory1.push_back(
10811090
new VulkanDeviceMemory(
1082-
vkDevice, vkImage2DList[bIdx],
1091+
vkDevice, (*vkImage2DList)[bIdx],
10831092
memoryType,
10841093
vkExternalMemoryHandleType));
10851094
vkImage2DListDeviceMemory1[bIdx]->bindImage(
1086-
vkImage2DList[bIdx], 0);
1095+
(*vkImage2DList)[bIdx], 0);
10871096
externalMemory1.push_back(
10881097
new clExternalMemoryImage(
10891098
*vkImage2DListDeviceMemory1[bIdx],
10901099
vkExternalMemoryHandleType, context,
10911100
totalImageMemSize, width, height, 0,
1092-
vkImage2DList[bIdx], deviceId));
1101+
(*vkImage2DList)[bIdx], deviceId));
10931102
}
10941103
VulkanImageViewList vkImage2DViewList(
1095-
vkDevice, vkImage2DList);
1096-
1097-
VulkanImage2DList vkImage2DList2(
1098-
num2DImages, vkDevice, vkFormat, width, height,
1099-
*vulkanImageTiling, numMipLevels,
1100-
vkExternalMemoryHandleType);
1101-
for (size_t bIdx = 0; bIdx < vkImage2DList2.size();
1104+
vkDevice, *vkImage2DList);
1105+
1106+
std::unique_ptr<VulkanImage2DList> vkImage2DList2{
1107+
new VulkanImage2DList(
1108+
num2DImages, vkDevice, vkFormat, width,
1109+
height, *vulkanImageTiling, numMipLevels,
1110+
vkExternalMemoryHandleType)
1111+
};
1112+
for (size_t bIdx = 0; bIdx < vkImage2DList2->size();
11021113
bIdx++)
11031114
{
11041115
vkImage2DListDeviceMemory2.push_back(
11051116
new VulkanDeviceMemory(
1106-
vkDevice, vkImage2DList2[bIdx],
1117+
vkDevice, (*vkImage2DList2)[bIdx],
11071118
memoryType,
11081119
vkExternalMemoryHandleType));
11091120
vkImage2DListDeviceMemory2[bIdx]->bindImage(
1110-
vkImage2DList2[bIdx], 0);
1121+
(*vkImage2DList2)[bIdx], 0);
11111122
externalMemory2.push_back(
11121123
new clExternalMemoryImage(
11131124
*vkImage2DListDeviceMemory2[bIdx],
11141125
vkExternalMemoryHandleType, context,
11151126
totalImageMemSize, width, height, 0,
1116-
vkImage2DList2[bIdx], deviceId));
1127+
(*vkImage2DList2)[bIdx], deviceId));
11171128
}
11181129

11191130
cl_mem external_mem_image1[4];
@@ -1139,18 +1150,18 @@ int run_test_with_one_queue(
11391150
vkImage2DViewList);
11401151
vkCopyCommandBuffer.begin();
11411152
vkCopyCommandBuffer.pipelineBarrier(
1142-
vkImage2DList,
1153+
*vkImage2DList,
11431154
VULKAN_IMAGE_LAYOUT_UNDEFINED,
11441155
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
11451156
for (size_t i2DIdx = 0;
1146-
i2DIdx < vkImage2DList.size(); i2DIdx++)
1157+
i2DIdx < vkImage2DList->size(); i2DIdx++)
11471158
{
11481159
vkCopyCommandBuffer.copyBufferToImage(
1149-
vkSrcBuffer, vkImage2DList[i2DIdx],
1160+
vkSrcBuffer, (*vkImage2DList)[i2DIdx],
11501161
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
11511162
}
11521163
vkCopyCommandBuffer.pipelineBarrier(
1153-
vkImage2DList,
1164+
(*vkImage2DList),
11541165
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
11551166
VULKAN_IMAGE_LAYOUT_GENERAL);
11561167
vkCopyCommandBuffer.end();
@@ -1176,22 +1187,23 @@ int run_test_with_one_queue(
11761187
if (useSingleImageKernel)
11771188
{
11781189
for (size_t i2DIdx = 0;
1179-
i2DIdx < vkImage2DList.size();
1190+
i2DIdx < vkImage2DList->size();
11801191
i2DIdx++)
11811192
{
11821193
vkDescriptorSet.update(
11831194
1, vkImage2DViewList[i2DIdx]);
11841195
vkCopyCommandBuffer.begin();
11851196
vkCopyCommandBuffer.pipelineBarrier(
1186-
vkImage2DList,
1197+
(*vkImage2DList),
11871198
VULKAN_IMAGE_LAYOUT_UNDEFINED,
11881199
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
11891200

11901201
vkCopyCommandBuffer.copyBufferToImage(
1191-
vkSrcBuffer, vkImage2DList[i2DIdx],
1202+
vkSrcBuffer,
1203+
(*vkImage2DList)[i2DIdx],
11921204
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
11931205
vkCopyCommandBuffer.pipelineBarrier(
1194-
vkImage2DList,
1206+
(*vkImage2DList),
11951207
VULKAN_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
11961208
VULKAN_IMAGE_LAYOUT_GENERAL);
11971209
vkCopyCommandBuffer.end();
@@ -1213,7 +1225,7 @@ int run_test_with_one_queue(
12131225
/ 2),
12141226
1);
12151227
vkShaderCommandBuffer.end();
1216-
if (i2DIdx < vkImage2DList.size() - 1)
1228+
if (i2DIdx < vkImage2DList->size() - 1)
12171229
{
12181230
vkQueue.submit(
12191231
vkShaderCommandBuffer);
@@ -1360,6 +1372,8 @@ int run_test_with_one_queue(
13601372
break;
13611373
}
13621374
}
1375+
vkImage2DList.reset(nullptr);
1376+
vkImage2DList2.reset(nullptr);
13631377
for (uint32_t i = 0; i < num2DImages; i++)
13641378
{
13651379
delete vkImage2DListDeviceMemory1[i];

0 commit comments

Comments
 (0)