diff options
| author | Tony Barbour <tony@lunarg.com> | 2023-08-02 13:11:28 -0600 |
|---|---|---|
| committer | Tony Barbour <tony@lunarg.com> | 2023-08-11 11:16:02 -0600 |
| commit | 300d9bf6b3cf7b237ee5e2c1d0ae10b9236f82d3 (patch) | |
| tree | cac27c80eba23d87762f7e88387929f30052c302 | |
| parent | 1d8188a974ccd08caffb5bd7fec58751e0c7d786 (diff) | |
| download | usermoji-300d9bf6b3cf7b237ee5e2c1d0ae10b9236f82d3.tar.xz | |
icd: Add support for VK_EXT_host_image_copy
| -rw-r--r-- | icd/generated/function_definitions.h | 33 | ||||
| -rw-r--r-- | scripts/mock_icd_generator.py | 33 | ||||
| -rw-r--r-- | tests/icd/mock_icd_tests.cpp | 3 |
3 files changed, 68 insertions, 1 deletions
diff --git a/icd/generated/function_definitions.h b/icd/generated/function_definitions.h index 9f9155ba..bd4b8476 100644 --- a/icd/generated/function_definitions.h +++ b/icd/generated/function_definitions.h @@ -2898,6 +2898,11 @@ static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR( feat_bools = (VkBool32*)&blendop_features->advancedBlendCoherentOperations; SetBoolArrayTrue(feat_bools, num_bools); } + const auto *host_image_copy_features = lvl_find_in_chain<VkPhysicalDeviceHostImageCopyFeaturesEXT>(pFeatures->pNext); + if (host_image_copy_features) { + feat_bools = (VkBool32*)&host_image_copy_features->hostImageCopy; + SetBoolArrayTrue(feat_bools, 1); + } } static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR( @@ -2993,6 +2998,33 @@ static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR( fragment_density_map2_props->maxSubsampledArrayLayers = 2; fragment_density_map2_props->maxDescriptorSetSubsampledSamplers = 1; } + + const uint32_t num_copy_layouts = 5; + const VkImageLayout HostCopyLayouts[]{ + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_GENERAL, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + }; + + auto *host_image_copy_props = lvl_find_mod_in_chain< VkPhysicalDeviceHostImageCopyPropertiesEXT>(pProperties->pNext); + if (host_image_copy_props){ + if (host_image_copy_props->pCopyDstLayouts == nullptr) host_image_copy_props->copyDstLayoutCount = num_copy_layouts; + else { + uint32_t num_layouts = (std::min)(host_image_copy_props->copyDstLayoutCount, num_copy_layouts); + for (uint32_t i = 0; i < num_layouts; i++) { + host_image_copy_props->pCopyDstLayouts[i] = HostCopyLayouts[i]; + } + } + if (host_image_copy_props->pCopySrcLayouts == nullptr) host_image_copy_props->copySrcLayoutCount = num_copy_layouts; + else { + uint32_t num_layouts = (std::min)(host_image_copy_props->copySrcLayoutCount, num_copy_layouts); + for (uint32_t i = 0; i < num_layouts; i++) { + host_image_copy_props->pCopySrcLayouts[i] = HostCopyLayouts[i]; + } + } + } } static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR( @@ -3006,6 +3038,7 @@ static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR( props_3->linearTilingFeatures = pFormatProperties->formatProperties.linearTilingFeatures; props_3->optimalTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures; props_3->bufferFeatures = pFormatProperties->formatProperties.bufferFeatures; + props_3->optimalTilingFeatures |= VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT; } } diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py index 687ee594..636205c6 100644 --- a/scripts/mock_icd_generator.py +++ b/scripts/mock_icd_generator.py @@ -387,6 +387,11 @@ CUSTOM_C_INTERCEPTS = { feat_bools = (VkBool32*)&blendop_features->advancedBlendCoherentOperations; SetBoolArrayTrue(feat_bools, num_bools); } + const auto *host_image_copy_features = lvl_find_in_chain<VkPhysicalDeviceHostImageCopyFeaturesEXT>(pFeatures->pNext); + if (host_image_copy_features) { + feat_bools = (VkBool32*)&host_image_copy_features->hostImageCopy; + SetBoolArrayTrue(feat_bools, 1); + } ''', 'vkGetPhysicalDeviceFormatProperties': ''' if (VK_FORMAT_UNDEFINED == format) { @@ -417,6 +422,7 @@ CUSTOM_C_INTERCEPTS = { props_3->linearTilingFeatures = pFormatProperties->formatProperties.linearTilingFeatures; props_3->optimalTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures; props_3->bufferFeatures = pFormatProperties->formatProperties.bufferFeatures; + props_3->optimalTilingFeatures |= VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT; } ''', 'vkGetPhysicalDeviceImageFormatProperties': ''' @@ -575,6 +581,33 @@ CUSTOM_C_INTERCEPTS = { fragment_density_map2_props->maxSubsampledArrayLayers = 2; fragment_density_map2_props->maxDescriptorSetSubsampledSamplers = 1; } + + const uint32_t num_copy_layouts = 5; + const VkImageLayout HostCopyLayouts[]{ + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_GENERAL, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + }; + + auto *host_image_copy_props = lvl_find_mod_in_chain< VkPhysicalDeviceHostImageCopyPropertiesEXT>(pProperties->pNext); + if (host_image_copy_props){ + if (host_image_copy_props->pCopyDstLayouts == nullptr) host_image_copy_props->copyDstLayoutCount = num_copy_layouts; + else { + uint32_t num_layouts = (std::min)(host_image_copy_props->copyDstLayoutCount, num_copy_layouts); + for (uint32_t i = 0; i < num_layouts; i++) { + host_image_copy_props->pCopyDstLayouts[i] = HostCopyLayouts[i]; + } + } + if (host_image_copy_props->pCopySrcLayouts == nullptr) host_image_copy_props->copySrcLayoutCount = num_copy_layouts; + else { + uint32_t num_layouts = (std::min)(host_image_copy_props->copySrcLayoutCount, num_copy_layouts); + for (uint32_t i = 0; i < num_layouts; i++) { + host_image_copy_props->pCopySrcLayouts[i] = HostCopyLayouts[i]; + } + } + } ''', 'vkGetPhysicalDeviceExternalSemaphoreProperties':''' // Hard code support for all handle types and features diff --git a/tests/icd/mock_icd_tests.cpp b/tests/icd/mock_icd_tests.cpp index 4605658c..ee1cbcb5 100644 --- a/tests/icd/mock_icd_tests.cpp +++ b/tests/icd/mock_icd_tests.cpp @@ -441,6 +441,7 @@ TEST_F(MockICD, vkGetPhysicalDeviceFormatProperties2) { VkFormatProperties3 format_properties3{}; format_properties3.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3; VkFormatProperties2 format_properties2{}; + format_properties2.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; format_properties2.pNext = static_cast<void*>(&format_properties3); vkGetPhysicalDeviceFormatProperties2(physical_device, VK_FORMAT_R8G8B8A8_SRGB, &format_properties2); ASSERT_EQ(format_properties2.formatProperties.bufferFeatures, 0x00FFFDFF); @@ -448,7 +449,7 @@ TEST_F(MockICD, vkGetPhysicalDeviceFormatProperties2) { ASSERT_EQ(format_properties2.formatProperties.optimalTilingFeatures, 0x00FFFDFF); ASSERT_EQ(format_properties3.bufferFeatures, 0x00FFFDFF); ASSERT_EQ(format_properties3.linearTilingFeatures, 0x00FFFDFF); - ASSERT_EQ(format_properties3.optimalTilingFeatures, 0x00FFFDFF); + ASSERT_EQ(format_properties3.optimalTilingFeatures, 0x400000FFFDFF); } TEST_F(MockICD, vkGetPhysicalDeviceImageFormatProperties) { |
