mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
External memory updates (#1676)
* Vulkan: Fix descriptor sets Use descriptor set arrays when programming arrays for compute shader. Change-Id: Idabab775a256a223660eb7a850e26f290453659e * Vulkan: Fix queue propertyies Transfer bit for queue family is not required to be reported by the implementation, it is implicit for compute. Change-Id: I7424b00e25e35145433dd74b0b4dfe7eeeaf98c8 * Vulkan: Allow implementation to choose dedicated memory Dedicated vs non-dedicated memory must be queried by the app. Implementations are not required to support exportable non-dedicated memory. Change-Id: Idbc46ace1be20f61d1b58b34756f6d79a7745911 * Fix formatting Auto-generated formatting fix * Fix bug in dedicated memory. * Add check for if OpenCL assumes linear tiling Change-Id: Idd2e24d9d69e1fbc3ccb4a279067533104185332 * Changed macro name to reflect spec CL_DEVICE_EXTERNAL_MEMORY_IMPORT_ASSUME_LINEAR_HANDLE_TYPES_KHR to CL_DEVICE_EXTERNAL_MEMORY_IMPORT_ASSUME_LINEAR_IMAGES_HANDLE_TYPES_KHR Also changed some functions to not use the KHR variants. --------- Co-authored-by: Joshua Kelly <joshkell@qti.qualcomm.com>
This commit is contained in:
committed by
GitHub
parent
c511ac62b0
commit
15b54aa0bd
@@ -185,7 +185,6 @@ bool useSingleImageKernel = false;
|
||||
bool useDeviceLocal = false;
|
||||
bool disableNTHandleType = false;
|
||||
bool enableOffset = false;
|
||||
bool non_dedicated = false;
|
||||
|
||||
static void printUsage(const char *execName)
|
||||
{
|
||||
@@ -232,10 +231,6 @@ size_t parseParams(int argc, const char *argv[], const char **argList)
|
||||
{
|
||||
enableOffset = true;
|
||||
}
|
||||
if (!strcmp(argv[i], "--non_dedicated"))
|
||||
{
|
||||
non_dedicated = true;
|
||||
}
|
||||
if (strcmp(argv[i], "-h") == 0)
|
||||
{
|
||||
printUsage(argv[0]);
|
||||
|
||||
@@ -81,10 +81,11 @@ int test_consistency_external_buffer(cl_device_id deviceID, cl_context _context,
|
||||
const VulkanMemoryTypeList& memoryTypeList =
|
||||
vkDummyBuffer.getMemoryTypeList();
|
||||
|
||||
VulkanDeviceMemory* vkDeviceMem = new VulkanDeviceMemory(
|
||||
vkDevice, bufferSize, memoryTypeList[0], vkExternalMemoryHandleType);
|
||||
VulkanBufferList vkBufferList(1, vkDevice, bufferSize,
|
||||
vkExternalMemoryHandleType);
|
||||
VulkanDeviceMemory* vkDeviceMem =
|
||||
new VulkanDeviceMemory(vkDevice, vkBufferList[0], memoryTypeList[0],
|
||||
vkExternalMemoryHandleType);
|
||||
|
||||
vkDeviceMem->bindBuffer(vkBufferList[0], 0);
|
||||
|
||||
@@ -231,22 +232,27 @@ int test_consistency_external_image(cl_device_id deviceID, cl_context _context,
|
||||
|
||||
VulkanExternalMemoryHandleType vkExternalMemoryHandleType =
|
||||
getSupportedVulkanExternalMemoryHandleTypeList()[0];
|
||||
VulkanImage2D* vkImage2D =
|
||||
new VulkanImage2D(vkDevice, VULKAN_FORMAT_R8G8B8A8_UNORM, width, height,
|
||||
1, vkExternalMemoryHandleType);
|
||||
|
||||
const VulkanMemoryTypeList& memoryTypeList = vkImage2D->getMemoryTypeList();
|
||||
uint64_t totalImageMemSize = vkImage2D->getSize();
|
||||
VulkanImageTiling vulkanImageTiling =
|
||||
vkClExternalMemoryHandleTilingAssumption(
|
||||
deviceID, vkExternalMemoryHandleType, &errNum);
|
||||
ASSERT_SUCCESS(errNum, "Failed to query OpenCL tiling mode");
|
||||
|
||||
VulkanImage2D vkImage2D =
|
||||
VulkanImage2D(vkDevice, VULKAN_FORMAT_R8G8B8A8_UNORM, width, height,
|
||||
vulkanImageTiling, 1, vkExternalMemoryHandleType);
|
||||
|
||||
const VulkanMemoryTypeList& memoryTypeList = vkImage2D.getMemoryTypeList();
|
||||
uint64_t totalImageMemSize = vkImage2D.getSize();
|
||||
|
||||
log_info("Memory type index: %lu\n", (uint32_t)memoryTypeList[0]);
|
||||
log_info("Memory type property: %d\n",
|
||||
memoryTypeList[0].getMemoryTypeProperty());
|
||||
log_info("Image size : %d\n", totalImageMemSize);
|
||||
|
||||
VulkanDeviceMemory* vkDeviceMem =
|
||||
new VulkanDeviceMemory(vkDevice, totalImageMemSize, memoryTypeList[0],
|
||||
vkExternalMemoryHandleType);
|
||||
vkDeviceMem->bindImage(*vkImage2D, 0);
|
||||
VulkanDeviceMemory* vkDeviceMem = new VulkanDeviceMemory(
|
||||
vkDevice, vkImage2D, memoryTypeList[0], vkExternalMemoryHandleType);
|
||||
vkDeviceMem->bindImage(vkImage2D, 0);
|
||||
|
||||
void* handle = NULL;
|
||||
int fd;
|
||||
@@ -299,7 +305,7 @@ int test_consistency_external_image(cl_device_id deviceID, cl_context _context,
|
||||
extMemProperties.push_back(0);
|
||||
|
||||
const VkImageCreateInfo VulkanImageCreateInfo =
|
||||
vkImage2D->getVkImageCreateInfo();
|
||||
vkImage2D.getVkImageCreateInfo();
|
||||
|
||||
errNum = getCLImageInfoFromVkImageInfo(
|
||||
&VulkanImageCreateInfo, totalImageMemSize, &img_format, &image_desc);
|
||||
|
||||
@@ -126,8 +126,11 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
std::vector<char> vkBufferShader = readFile("buffer.spv");
|
||||
|
||||
VulkanShaderModule vkBufferShaderModule(vkDevice, vkBufferShader);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList(
|
||||
MAX_BUFFERS + 1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList;
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
0, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1);
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_BUFFERS);
|
||||
VulkanDescriptorSetLayout vkDescriptorSetLayout(
|
||||
vkDevice, vkDescriptorSetLayoutBindingList);
|
||||
VulkanPipelineLayout vkPipelineLayout(vkDevice, vkDescriptorSetLayout);
|
||||
@@ -189,9 +192,9 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
|
||||
for (size_t bIdx = 0; bIdx < numBuffers; bIdx++)
|
||||
{
|
||||
vkBufferListDeviceMemory.push_back(
|
||||
new VulkanDeviceMemory(vkDevice, bufferSize, memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkBufferListDeviceMemory.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, vkBufferList[bIdx], memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
externalMemory.push_back(new clExternalMemory(
|
||||
vkBufferListDeviceMemory[bIdx], vkExternalMemoryHandleType,
|
||||
0, bufferSize, context, deviceId));
|
||||
@@ -210,8 +213,8 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
vkBufferListDeviceMemory[bIdx]->bindBuffer(vkBufferList[bIdx],
|
||||
0);
|
||||
buffers[bIdx] = externalMemory[bIdx]->getExternalMemoryBuffer();
|
||||
vkDescriptorSet.update((uint32_t)bIdx + 1, vkBufferList[bIdx]);
|
||||
}
|
||||
vkDescriptorSet.updateArray(1, numBuffers, vkBufferList);
|
||||
vkCommandBuffer.begin();
|
||||
vkCommandBuffer.bindPipeline(vkComputePipeline);
|
||||
vkCommandBuffer.bindDescriptorSets(
|
||||
@@ -453,8 +456,11 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
|
||||
std::vector<char> vkBufferShader = readFile("buffer.spv");
|
||||
VulkanShaderModule vkBufferShaderModule(vkDevice, vkBufferShader);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList(
|
||||
MAX_BUFFERS + 1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList;
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
0, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1);
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_BUFFERS);
|
||||
VulkanDescriptorSetLayout vkDescriptorSetLayout(
|
||||
vkDevice, vkDescriptorSetLayoutBindingList);
|
||||
VulkanPipelineLayout vkPipelineLayout(vkDevice, vkDescriptorSetLayout);
|
||||
@@ -517,9 +523,9 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
|
||||
for (size_t bIdx = 0; bIdx < numBuffers; bIdx++)
|
||||
{
|
||||
vkBufferListDeviceMemory.push_back(
|
||||
new VulkanDeviceMemory(vkDevice, bufferSize, memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkBufferListDeviceMemory.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, vkBufferList[bIdx], memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
externalMemory.push_back(new clExternalMemory(
|
||||
vkBufferListDeviceMemory[bIdx], vkExternalMemoryHandleType,
|
||||
0, bufferSize, context, deviceId));
|
||||
@@ -538,8 +544,9 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
vkBufferListDeviceMemory[bIdx]->bindBuffer(vkBufferList[bIdx],
|
||||
0);
|
||||
buffers[bIdx] = externalMemory[bIdx]->getExternalMemoryBuffer();
|
||||
vkDescriptorSet.update((uint32_t)bIdx + 1, vkBufferList[bIdx]);
|
||||
}
|
||||
vkDescriptorSet.updateArray(1, vkBufferList.size(), vkBufferList);
|
||||
|
||||
vkCommandBuffer.begin();
|
||||
vkCommandBuffer.bindPipeline(vkComputePipeline);
|
||||
vkCommandBuffer.bindDescriptorSets(
|
||||
@@ -754,8 +761,11 @@ int run_test_with_multi_import_same_ctx(
|
||||
std::vector<char> vkBufferShader = readFile("buffer.spv");
|
||||
|
||||
VulkanShaderModule vkBufferShaderModule(vkDevice, vkBufferShader);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList(
|
||||
MAX_BUFFERS + 1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList;
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
0, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1);
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
1, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_BUFFERS);
|
||||
VulkanDescriptorSetLayout vkDescriptorSetLayout(
|
||||
vkDevice, vkDescriptorSetLayoutBindingList);
|
||||
VulkanPipelineLayout vkPipelineLayout(vkDevice, vkDescriptorSetLayout);
|
||||
@@ -836,7 +846,7 @@ int run_test_with_multi_import_same_ctx(
|
||||
if (withOffset == 0)
|
||||
{
|
||||
vkBufferListDeviceMemory.push_back(
|
||||
new VulkanDeviceMemory(vkDevice, pBufferSize,
|
||||
new VulkanDeviceMemory(vkDevice, vkBufferList[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
}
|
||||
@@ -880,9 +890,8 @@ int run_test_with_multi_import_same_ctx(
|
||||
externalMemory[bIdx][cl_bIdx]
|
||||
->getExternalMemoryBuffer();
|
||||
}
|
||||
vkDescriptorSet.update((uint32_t)bIdx + 1,
|
||||
vkBufferList[bIdx]);
|
||||
}
|
||||
vkDescriptorSet.updateArray(1, numBuffers, vkBufferList);
|
||||
vkCommandBuffer.begin();
|
||||
vkCommandBuffer.bindPipeline(vkComputePipeline);
|
||||
vkCommandBuffer.bindDescriptorSets(
|
||||
|
||||
@@ -226,9 +226,11 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
srcBufferPtr = (char *)malloc(maxImage2DSize);
|
||||
dstBufferPtr = (char *)malloc(maxImage2DSize);
|
||||
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList(
|
||||
VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1,
|
||||
VULKAN_DESCRIPTOR_TYPE_STORAGE_IMAGE, MAX_2D_IMAGE_DESCRIPTORS);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList;
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
0, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1);
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
1, VULKAN_DESCRIPTOR_TYPE_STORAGE_IMAGE, MAX_2D_IMAGE_DESCRIPTORS);
|
||||
VulkanDescriptorSetLayout vkDescriptorSetLayout(
|
||||
vkDevice, vkDescriptorSetLayoutBindingList);
|
||||
VulkanPipelineLayout vkPipelineLayout(vkDevice, vkDescriptorSetLayout);
|
||||
@@ -255,10 +257,10 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
clCl2VkExternalSemaphore = new clExternalSemaphore(
|
||||
vkCl2VkSemaphore, context, vkExternalSemaphoreHandleType, deviceId);
|
||||
|
||||
std::vector<VulkanDeviceMemory *> vkNonDedicatedImage2DListDeviceMemory1;
|
||||
std::vector<VulkanDeviceMemory *> vkNonDedicatedImage2DListDeviceMemory2;
|
||||
std::vector<clExternalMemoryImage *> nonDedicatedExternalMemory1;
|
||||
std::vector<clExternalMemoryImage *> nonDedicatedExternalMemory2;
|
||||
std::vector<VulkanDeviceMemory *> vkImage2DListDeviceMemory1;
|
||||
std::vector<VulkanDeviceMemory *> vkImage2DListDeviceMemory2;
|
||||
std::vector<clExternalMemoryImage *> externalMemory1;
|
||||
std::vector<clExternalMemoryImage *> externalMemory2;
|
||||
std::vector<char> vkImage2DShader;
|
||||
|
||||
for (size_t fIdx = 0; fIdx < vkFormatList.size(); fIdx++)
|
||||
@@ -352,8 +354,6 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
VulkanExternalMemoryHandleType
|
||||
vkExternalMemoryHandleType =
|
||||
vkExternalMemoryHandleTypeList[emhtIdx];
|
||||
log_info("External memory handle type: %d \n",
|
||||
vkExternalMemoryHandleType);
|
||||
if ((true == disableNTHandleType)
|
||||
&& (VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_NT
|
||||
== vkExternalMemoryHandleType))
|
||||
@@ -361,9 +361,19 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
// Skip running for WIN32 NT handle.
|
||||
continue;
|
||||
}
|
||||
log_info("External memory handle type: %d \n",
|
||||
vkExternalMemoryHandleType);
|
||||
VulkanImageTiling vulkanImageTiling =
|
||||
vkClExternalMemoryHandleTilingAssumption(
|
||||
deviceId,
|
||||
vkExternalMemoryHandleTypeList[emhtIdx], &err);
|
||||
ASSERT_SUCCESS(err,
|
||||
"Failed to query OpenCL tiling mode");
|
||||
|
||||
VulkanImage2D vkDummyImage2D(
|
||||
vkDevice, vkFormatList[0], widthList[0],
|
||||
heightList[0], 1, vkExternalMemoryHandleType);
|
||||
heightList[0], vulkanImageTiling, 1,
|
||||
vkExternalMemoryHandleType);
|
||||
const VulkanMemoryTypeList &memoryTypeList =
|
||||
vkDummyImage2D.getMemoryTypeList();
|
||||
|
||||
@@ -390,118 +400,73 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
{
|
||||
VulkanImage2D vkImage2D(
|
||||
vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
ASSERT_LEQ(vkImage2D.getSize(), maxImage2DSize);
|
||||
totalImageMemSize =
|
||||
ROUND_UP(vkImage2D.getSize(),
|
||||
vkImage2D.getAlignment());
|
||||
}
|
||||
VulkanImage2DList vkNonDedicatedImage2DList(
|
||||
VulkanImage2DList vkImage2DList(
|
||||
num2DImages, vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0; bIdx < num2DImages; bIdx++)
|
||||
{
|
||||
if (non_dedicated)
|
||||
{
|
||||
vkNonDedicatedImage2DListDeviceMemory1
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, totalImageMemSize,
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
}
|
||||
else
|
||||
{
|
||||
vkNonDedicatedImage2DListDeviceMemory1
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice,
|
||||
vkNonDedicatedImage2DList[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
}
|
||||
vkNonDedicatedImage2DListDeviceMemory1[bIdx]
|
||||
->bindImage(vkNonDedicatedImage2DList[bIdx],
|
||||
0);
|
||||
nonDedicatedExternalMemory1.push_back(
|
||||
vkImage2DListDeviceMemory1.push_back(
|
||||
new VulkanDeviceMemory(
|
||||
vkDevice, vkImage2DList[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkImage2DListDeviceMemory1[bIdx]->bindImage(
|
||||
vkImage2DList[bIdx], 0);
|
||||
externalMemory1.push_back(
|
||||
new clExternalMemoryImage(
|
||||
*vkNonDedicatedImage2DListDeviceMemory1
|
||||
[bIdx],
|
||||
*vkImage2DListDeviceMemory1[bIdx],
|
||||
vkExternalMemoryHandleType, context,
|
||||
totalImageMemSize, width, height, 0,
|
||||
vkNonDedicatedImage2DList[bIdx],
|
||||
deviceId));
|
||||
vkImage2DList[bIdx], deviceId));
|
||||
}
|
||||
VulkanImageViewList vkNonDedicatedImage2DViewList(
|
||||
vkDevice, vkNonDedicatedImage2DList);
|
||||
VulkanImage2DList vkNonDedicatedImage2DList2(
|
||||
VulkanImageViewList vkImage2DViewList(
|
||||
vkDevice, vkImage2DList);
|
||||
VulkanImage2DList vkImage2DList2(
|
||||
num2DImages, vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0; bIdx < num2DImages; bIdx++)
|
||||
{
|
||||
if (non_dedicated)
|
||||
{
|
||||
vkNonDedicatedImage2DListDeviceMemory2
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, totalImageMemSize,
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
}
|
||||
else
|
||||
{
|
||||
vkNonDedicatedImage2DListDeviceMemory2
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice,
|
||||
vkNonDedicatedImage2DList2[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
}
|
||||
vkNonDedicatedImage2DListDeviceMemory2[bIdx]
|
||||
->bindImage(
|
||||
vkNonDedicatedImage2DList2[bIdx], 0);
|
||||
nonDedicatedExternalMemory2.push_back(
|
||||
vkImage2DListDeviceMemory2.push_back(
|
||||
new VulkanDeviceMemory(
|
||||
vkDevice, vkImage2DList2[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkImage2DListDeviceMemory2[bIdx]->bindImage(
|
||||
vkImage2DList2[bIdx], 0);
|
||||
externalMemory2.push_back(
|
||||
new clExternalMemoryImage(
|
||||
*vkNonDedicatedImage2DListDeviceMemory2
|
||||
[bIdx],
|
||||
*vkImage2DListDeviceMemory2[bIdx],
|
||||
vkExternalMemoryHandleType, context,
|
||||
totalImageMemSize, width, height, 0,
|
||||
vkNonDedicatedImage2DList2[bIdx],
|
||||
deviceId));
|
||||
vkImage2DList2[bIdx], deviceId));
|
||||
}
|
||||
VulkanImageViewList vkDedicatedImage2DViewList(
|
||||
vkDevice, vkNonDedicatedImage2DList2);
|
||||
|
||||
cl_mem external_mem_image1[5];
|
||||
cl_mem external_mem_image2[5];
|
||||
for (int i = 0; i < num2DImages; i++)
|
||||
{
|
||||
external_mem_image1[i] =
|
||||
nonDedicatedExternalMemory1[i]
|
||||
externalMemory1[i]
|
||||
->getExternalMemoryImage();
|
||||
external_mem_image2[i] =
|
||||
nonDedicatedExternalMemory2[i]
|
||||
externalMemory2[i]
|
||||
->getExternalMemoryImage();
|
||||
}
|
||||
VulkanImage2DList &vkImage2DList =
|
||||
vkNonDedicatedImage2DList;
|
||||
VulkanImageViewList &vkImage2DViewList =
|
||||
vkNonDedicatedImage2DViewList;
|
||||
|
||||
clCl2VkExternalSemaphore->signal(cmd_queue1);
|
||||
if (!useSingleImageKernel)
|
||||
{
|
||||
for (size_t i2DIdx = 0;
|
||||
i2DIdx < vkImage2DList.size(); i2DIdx++)
|
||||
{
|
||||
for (uint32_t mipLevel = 0;
|
||||
mipLevel < numMipLevels; mipLevel++)
|
||||
{
|
||||
uint32_t i2DvIdx =
|
||||
(uint32_t)(i2DIdx * numMipLevels)
|
||||
+ mipLevel;
|
||||
vkDescriptorSet.update(
|
||||
1 + i2DvIdx,
|
||||
vkImage2DViewList[i2DvIdx]);
|
||||
}
|
||||
}
|
||||
vkDescriptorSet.updateArray(1,
|
||||
vkImage2DViewList);
|
||||
vkCopyCommandBuffer.begin();
|
||||
vkCopyCommandBuffer.pipelineBarrier(
|
||||
vkImage2DList,
|
||||
@@ -743,29 +708,25 @@ int run_test_with_two_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
}
|
||||
for (int i = 0; i < num2DImages; i++)
|
||||
{
|
||||
delete vkNonDedicatedImage2DListDeviceMemory1
|
||||
[i];
|
||||
delete vkNonDedicatedImage2DListDeviceMemory2
|
||||
[i];
|
||||
delete nonDedicatedExternalMemory1[i];
|
||||
delete nonDedicatedExternalMemory2[i];
|
||||
delete vkImage2DListDeviceMemory1[i];
|
||||
delete vkImage2DListDeviceMemory2[i];
|
||||
delete externalMemory1[i];
|
||||
delete externalMemory2[i];
|
||||
}
|
||||
vkNonDedicatedImage2DListDeviceMemory1.erase(
|
||||
vkNonDedicatedImage2DListDeviceMemory1.begin(),
|
||||
vkNonDedicatedImage2DListDeviceMemory1.begin()
|
||||
vkImage2DListDeviceMemory1.erase(
|
||||
vkImage2DListDeviceMemory1.begin(),
|
||||
vkImage2DListDeviceMemory1.begin()
|
||||
+ num2DImages);
|
||||
vkNonDedicatedImage2DListDeviceMemory2.erase(
|
||||
vkNonDedicatedImage2DListDeviceMemory2.begin(),
|
||||
vkNonDedicatedImage2DListDeviceMemory2.begin()
|
||||
+ num2DImages);
|
||||
nonDedicatedExternalMemory1.erase(
|
||||
nonDedicatedExternalMemory1.begin(),
|
||||
nonDedicatedExternalMemory1.begin()
|
||||
+ num2DImages);
|
||||
nonDedicatedExternalMemory2.erase(
|
||||
nonDedicatedExternalMemory2.begin(),
|
||||
nonDedicatedExternalMemory2.begin()
|
||||
vkImage2DListDeviceMemory2.erase(
|
||||
vkImage2DListDeviceMemory2.begin(),
|
||||
vkImage2DListDeviceMemory2.begin()
|
||||
+ num2DImages);
|
||||
externalMemory1.erase(externalMemory1.begin(),
|
||||
externalMemory1.begin()
|
||||
+ num2DImages);
|
||||
externalMemory2.erase(externalMemory2.begin(),
|
||||
externalMemory2.begin()
|
||||
+ num2DImages);
|
||||
if (CL_SUCCESS != err)
|
||||
{
|
||||
goto CLEANUP;
|
||||
@@ -822,9 +783,11 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
srcBufferPtr = (char *)malloc(maxImage2DSize);
|
||||
dstBufferPtr = (char *)malloc(maxImage2DSize);
|
||||
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList(
|
||||
VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1,
|
||||
VULKAN_DESCRIPTOR_TYPE_STORAGE_IMAGE, MAX_2D_IMAGE_DESCRIPTORS);
|
||||
VulkanDescriptorSetLayoutBindingList vkDescriptorSetLayoutBindingList;
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
0, VULKAN_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1);
|
||||
vkDescriptorSetLayoutBindingList.addBinding(
|
||||
1, VULKAN_DESCRIPTOR_TYPE_STORAGE_IMAGE, MAX_2D_IMAGE_DESCRIPTORS);
|
||||
VulkanDescriptorSetLayout vkDescriptorSetLayout(
|
||||
vkDevice, vkDescriptorSetLayoutBindingList);
|
||||
VulkanPipelineLayout vkPipelineLayout(vkDevice, vkDescriptorSetLayout);
|
||||
@@ -851,10 +814,10 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
clCl2VkExternalSemaphore = new clExternalSemaphore(
|
||||
vkCl2VkSemaphore, context, vkExternalSemaphoreHandleType, deviceId);
|
||||
|
||||
std::vector<VulkanDeviceMemory *> vkNonDedicatedImage2DListDeviceMemory1;
|
||||
std::vector<VulkanDeviceMemory *> vkNonDedicatedImage2DListDeviceMemory2;
|
||||
std::vector<clExternalMemoryImage *> nonDedicatedExternalMemory1;
|
||||
std::vector<clExternalMemoryImage *> nonDedicatedExternalMemory2;
|
||||
std::vector<VulkanDeviceMemory *> vkImage2DListDeviceMemory1;
|
||||
std::vector<VulkanDeviceMemory *> vkImage2DListDeviceMemory2;
|
||||
std::vector<clExternalMemoryImage *> externalMemory1;
|
||||
std::vector<clExternalMemoryImage *> externalMemory2;
|
||||
std::vector<char> vkImage2DShader;
|
||||
|
||||
for (size_t fIdx = 0; fIdx < vkFormatList.size(); fIdx++)
|
||||
@@ -957,9 +920,18 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
// Skip running for WIN32 NT handle.
|
||||
continue;
|
||||
}
|
||||
|
||||
VulkanImageTiling vulkanImageTiling =
|
||||
vkClExternalMemoryHandleTilingAssumption(
|
||||
deviceId,
|
||||
vkExternalMemoryHandleTypeList[emhtIdx], &err);
|
||||
ASSERT_SUCCESS(err,
|
||||
"Failed to query OpenCL tiling mode");
|
||||
|
||||
VulkanImage2D vkDummyImage2D(
|
||||
vkDevice, vkFormatList[0], widthList[0],
|
||||
heightList[0], 1, vkExternalMemoryHandleType);
|
||||
heightList[0], vulkanImageTiling, 1,
|
||||
vkExternalMemoryHandleType);
|
||||
const VulkanMemoryTypeList &memoryTypeList =
|
||||
vkDummyImage2D.getMemoryTypeList();
|
||||
|
||||
@@ -985,98 +957,78 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
{
|
||||
VulkanImage2D vkImage2D(
|
||||
vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
ASSERT_LEQ(vkImage2D.getSize(), maxImage2DSize);
|
||||
totalImageMemSize =
|
||||
ROUND_UP(vkImage2D.getSize(),
|
||||
vkImage2D.getAlignment());
|
||||
}
|
||||
VulkanImage2DList vkNonDedicatedImage2DList(
|
||||
VulkanImage2DList vkImage2DList(
|
||||
num2DImages, vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0;
|
||||
bIdx < vkNonDedicatedImage2DList.size();
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0; bIdx < vkImage2DList.size();
|
||||
bIdx++)
|
||||
{
|
||||
// Create list of Vulkan device memories and
|
||||
// bind the list of Vulkan images.
|
||||
vkNonDedicatedImage2DListDeviceMemory1
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, totalImageMemSize, memoryType,
|
||||
vkImage2DListDeviceMemory1.push_back(
|
||||
new VulkanDeviceMemory(
|
||||
vkDevice, vkImage2DList[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkNonDedicatedImage2DListDeviceMemory1[bIdx]
|
||||
->bindImage(vkNonDedicatedImage2DList[bIdx],
|
||||
0);
|
||||
nonDedicatedExternalMemory1.push_back(
|
||||
vkImage2DListDeviceMemory1[bIdx]->bindImage(
|
||||
vkImage2DList[bIdx], 0);
|
||||
externalMemory1.push_back(
|
||||
new clExternalMemoryImage(
|
||||
*vkNonDedicatedImage2DListDeviceMemory1
|
||||
[bIdx],
|
||||
*vkImage2DListDeviceMemory1[bIdx],
|
||||
vkExternalMemoryHandleType, context,
|
||||
totalImageMemSize, width, height, 0,
|
||||
vkNonDedicatedImage2DList[bIdx],
|
||||
deviceId));
|
||||
vkImage2DList[bIdx], deviceId));
|
||||
}
|
||||
VulkanImageViewList vkNonDedicatedImage2DViewList(
|
||||
vkDevice, vkNonDedicatedImage2DList);
|
||||
VulkanImageViewList vkImage2DViewList(
|
||||
vkDevice, vkImage2DList);
|
||||
|
||||
VulkanImage2DList vkNonDedicatedImage2DList2(
|
||||
VulkanImage2DList vkImage2DList2(
|
||||
num2DImages, vkDevice, vkFormat, width, height,
|
||||
numMipLevels, vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0;
|
||||
bIdx < vkNonDedicatedImage2DList2.size();
|
||||
vulkanImageTiling, numMipLevels,
|
||||
vkExternalMemoryHandleType);
|
||||
for (size_t bIdx = 0; bIdx < vkImage2DList2.size();
|
||||
bIdx++)
|
||||
{
|
||||
vkNonDedicatedImage2DListDeviceMemory2
|
||||
.push_back(new VulkanDeviceMemory(
|
||||
vkDevice, totalImageMemSize, memoryType,
|
||||
vkImage2DListDeviceMemory2.push_back(
|
||||
new VulkanDeviceMemory(
|
||||
vkDevice, vkImage2DList2[bIdx],
|
||||
memoryType,
|
||||
vkExternalMemoryHandleType));
|
||||
vkNonDedicatedImage2DListDeviceMemory2[bIdx]
|
||||
->bindImage(
|
||||
vkNonDedicatedImage2DList2[bIdx], 0);
|
||||
nonDedicatedExternalMemory2.push_back(
|
||||
vkImage2DListDeviceMemory2[bIdx]->bindImage(
|
||||
vkImage2DList2[bIdx], 0);
|
||||
externalMemory2.push_back(
|
||||
new clExternalMemoryImage(
|
||||
*vkNonDedicatedImage2DListDeviceMemory2
|
||||
[bIdx],
|
||||
*vkImage2DListDeviceMemory2[bIdx],
|
||||
vkExternalMemoryHandleType, context,
|
||||
totalImageMemSize, width, height, 0,
|
||||
vkNonDedicatedImage2DList2[bIdx],
|
||||
deviceId));
|
||||
vkImage2DList2[bIdx], deviceId));
|
||||
}
|
||||
VulkanImageViewList vkDedicatedImage2DViewList(
|
||||
vkDevice, vkNonDedicatedImage2DList2);
|
||||
|
||||
cl_mem external_mem_image1[4];
|
||||
cl_mem external_mem_image2[4];
|
||||
for (int i = 0; i < num2DImages; i++)
|
||||
{
|
||||
external_mem_image1[i] =
|
||||
nonDedicatedExternalMemory1[i]
|
||||
externalMemory1[i]
|
||||
->getExternalMemoryImage();
|
||||
external_mem_image2[i] =
|
||||
nonDedicatedExternalMemory2[i]
|
||||
externalMemory2[i]
|
||||
->getExternalMemoryImage();
|
||||
}
|
||||
VulkanImage2DList &vkImage2DList =
|
||||
vkNonDedicatedImage2DList;
|
||||
VulkanImageViewList &vkImage2DViewList =
|
||||
vkNonDedicatedImage2DViewList;
|
||||
|
||||
clCl2VkExternalSemaphore->signal(cmd_queue1);
|
||||
if (!useSingleImageKernel)
|
||||
{
|
||||
for (size_t i2DIdx = 0;
|
||||
i2DIdx < vkImage2DList.size(); i2DIdx++)
|
||||
{
|
||||
for (uint32_t mipLevel = 0;
|
||||
mipLevel < numMipLevels; mipLevel++)
|
||||
{
|
||||
uint32_t i2DvIdx =
|
||||
(uint32_t)(i2DIdx * numMipLevels)
|
||||
+ mipLevel;
|
||||
vkDescriptorSet.update(
|
||||
1 + i2DvIdx,
|
||||
vkImage2DViewList[i2DvIdx]);
|
||||
}
|
||||
}
|
||||
vkDescriptorSet.updateArray(1,
|
||||
vkImage2DViewList);
|
||||
vkCopyCommandBuffer.begin();
|
||||
vkCopyCommandBuffer.pipelineBarrier(
|
||||
vkImage2DList,
|
||||
@@ -1275,29 +1227,25 @@ int run_test_with_one_queue(cl_context &context, cl_command_queue &cmd_queue1,
|
||||
}
|
||||
for (int i = 0; i < num2DImages; i++)
|
||||
{
|
||||
delete vkNonDedicatedImage2DListDeviceMemory1
|
||||
[i];
|
||||
delete vkNonDedicatedImage2DListDeviceMemory2
|
||||
[i];
|
||||
delete nonDedicatedExternalMemory1[i];
|
||||
delete nonDedicatedExternalMemory2[i];
|
||||
delete vkImage2DListDeviceMemory1[i];
|
||||
delete vkImage2DListDeviceMemory2[i];
|
||||
delete externalMemory1[i];
|
||||
delete externalMemory2[i];
|
||||
}
|
||||
vkNonDedicatedImage2DListDeviceMemory1.erase(
|
||||
vkNonDedicatedImage2DListDeviceMemory1.begin(),
|
||||
vkNonDedicatedImage2DListDeviceMemory1.begin()
|
||||
vkImage2DListDeviceMemory1.erase(
|
||||
vkImage2DListDeviceMemory1.begin(),
|
||||
vkImage2DListDeviceMemory1.begin()
|
||||
+ num2DImages);
|
||||
vkNonDedicatedImage2DListDeviceMemory2.erase(
|
||||
vkNonDedicatedImage2DListDeviceMemory2.begin(),
|
||||
vkNonDedicatedImage2DListDeviceMemory2.begin()
|
||||
+ num2DImages);
|
||||
nonDedicatedExternalMemory1.erase(
|
||||
nonDedicatedExternalMemory1.begin(),
|
||||
nonDedicatedExternalMemory1.begin()
|
||||
+ num2DImages);
|
||||
nonDedicatedExternalMemory2.erase(
|
||||
nonDedicatedExternalMemory2.begin(),
|
||||
nonDedicatedExternalMemory2.begin()
|
||||
vkImage2DListDeviceMemory2.erase(
|
||||
vkImage2DListDeviceMemory2.begin(),
|
||||
vkImage2DListDeviceMemory2.begin()
|
||||
+ num2DImages);
|
||||
externalMemory1.erase(externalMemory1.begin(),
|
||||
externalMemory1.begin()
|
||||
+ num2DImages);
|
||||
externalMemory2.erase(externalMemory2.begin(),
|
||||
externalMemory2.begin()
|
||||
+ num2DImages);
|
||||
if (CL_SUCCESS != err)
|
||||
{
|
||||
goto CLEANUP;
|
||||
|
||||
@@ -45,6 +45,5 @@ extern bool useDeviceLocal;
|
||||
extern bool disableNTHandleType;
|
||||
// Enable offset for multiImport of vulkan device memory
|
||||
extern bool enableOffset;
|
||||
extern bool non_dedicated;
|
||||
|
||||
#endif // _vulkan_interop_common_hpp_
|
||||
|
||||
Reference in New Issue
Block a user