From 39f264fd192ad346f489d31245e8789889e3fe0d Mon Sep 17 00:00:00 2001 From: Tony-LunarG Date: Tue, 2 Jul 2019 13:40:06 -0600 Subject: vulkaninfo: Add descriptor indexing feats/props Change-Id: I7863fb44fbc1e2c7f7833580799db6b8fb229afe --- vulkaninfo/vulkaninfo.c | 287 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 286 insertions(+), 1 deletion(-) diff --git a/vulkaninfo/vulkaninfo.c b/vulkaninfo/vulkaninfo.c index 0da527fb..bb099194 100644 --- a/vulkaninfo/vulkaninfo.c +++ b/vulkaninfo/vulkaninfo.c @@ -977,6 +977,8 @@ static void AppGpuInit(struct AppGpu *gpu, struct AppInstance *inst, uint32_t id .mem_size = sizeof(VkPhysicalDeviceTransformFeedbackPropertiesEXT)}, {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT, .mem_size = sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT)}, + {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, + .mem_size = sizeof(VkPhysicalDeviceDescriptorIndexingPropertiesEXT)}, {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, .mem_size = sizeof(VkPhysicalDeviceDepthStencilResolvePropertiesKHR)}}; @@ -1097,6 +1099,8 @@ static void AppGpuInit(struct AppGpu *gpu, struct AppInstance *inst, uint32_t id .mem_size = sizeof(VkPhysicalDeviceMemoryPriorityFeaturesEXT)}, {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT, .mem_size = sizeof(VkPhysicalDeviceBufferAddressFeaturesEXT)}, + {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, + .mem_size = sizeof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT)}, {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, .mem_size = sizeof(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT)}, {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, @@ -3254,6 +3258,137 @@ static void AppGpuDumpFeatures(const struct AppGpu *gpu, FILE *out) { printf("=======================================\n"); printf("\thostQueryReset = %" PRIuLEAST32 "\n", host_query_reset_features->hostQueryReset); } + } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT && + CheckPhysicalDeviceExtensionIncluded(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, gpu->device_extensions, + gpu->device_extension_count)) { + VkPhysicalDeviceDescriptorIndexingFeaturesEXT *indexing_features = + (VkPhysicalDeviceDescriptorIndexingFeaturesEXT *)structure; + if (html_output) { + fprintf(out, "\t\t\t\t\t
VkPhysicalDeviceDescriptorIndexingFeatures\n"); + fprintf(out, + "\t\t\t\t\t\t
shaderInputAttachmentArrayDynamicIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderInputAttachmentArrayDynamicIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderUniformTexelBufferArrayDynamicIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderUniformTexelBufferArrayDynamicIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderStorageTexelBufferArrayDynamicIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderStorageTexelBufferArrayDynamicIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderUniformBufferArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderUniformBufferArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderSampledImageArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderSampledImageArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderStorageBufferArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderStorageBufferArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderStorageImageArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderStorageImageArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderInputAttachmentArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderInputAttachmentArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderUniformTexelBufferArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderUniformTexelBufferArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
shaderStorageTexelBufferArrayNonUniformIndexing = %" PRIuLEAST32 "
\n", + indexing_features->shaderStorageTexelBufferArrayNonUniformIndexing); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingUniformBufferUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingUniformBufferUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingSampledImageUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingSampledImageUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingStorageImageUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingStorageImageUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingStorageBufferUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingStorageBufferUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingUniformTexelBufferUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingUniformTexelBufferUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingStorageTexelBufferUpdateAfterBind = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingStorageTexelBufferUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingUpdateUnusedWhilePending = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingUpdateUnusedWhilePending); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingPartiallyBound = %" PRIuLEAST32 + "
\n", + indexing_features->descriptorBindingPartiallyBound); + fprintf(out, + "\t\t\t\t\t\t
descriptorBindingVariableDescriptorCount = %" PRIuLEAST32 "
\n", + indexing_features->descriptorBindingVariableDescriptorCount); + fprintf(out, + "\t\t\t\t\t\t
runtimeDescriptorArray = %" PRIuLEAST32 + "
\n", + indexing_features->runtimeDescriptorArray); + fprintf(out, "\t\t\t\t\t
\n"); + } else if (human_readable_output) { + printf("\nVkPhysicalDeviceDescriptorIndexingFeatures:\n"); + printf("=======================================\n"); + printf("\tshaderInputAttachmentArrayDynamicIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderInputAttachmentArrayDynamicIndexing); + printf("\tshaderUniformTexelBufferArrayDynamicIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderUniformTexelBufferArrayDynamicIndexing); + printf("\tshaderStorageTexelBufferArrayDynamicIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderStorageTexelBufferArrayDynamicIndexing); + printf("\tshaderUniformBufferArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderUniformBufferArrayNonUniformIndexing); + printf("\tshaderSampledImageArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderSampledImageArrayNonUniformIndexing); + printf("\tshaderStorageBufferArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderStorageBufferArrayNonUniformIndexing); + printf("\tshaderStorageImageArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderStorageImageArrayNonUniformIndexing); + printf("\tshaderInputAttachmentArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderInputAttachmentArrayNonUniformIndexing); + printf("\tshaderUniformTexelBufferArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderUniformTexelBufferArrayNonUniformIndexing); + printf("\tshaderStorageTexelBufferArrayNonUniformIndexing = %" PRIuLEAST32 "\n", + indexing_features->shaderStorageTexelBufferArrayNonUniformIndexing); + printf("\tdescriptorBindingUniformBufferUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingUniformBufferUpdateAfterBind); + printf("\tdescriptorBindingSampledImageUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingSampledImageUpdateAfterBind); + printf("\tdescriptorBindingStorageImageUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingStorageImageUpdateAfterBind); + printf("\tdescriptorBindingStorageBufferUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingStorageBufferUpdateAfterBind); + printf("\tdescriptorBindingUniformTexelBufferUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingUniformTexelBufferUpdateAfterBind); + printf("\tdescriptorBindingStorageTexelBufferUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingStorageTexelBufferUpdateAfterBind); + printf("\tdescriptorBindingUpdateUnusedWhilePending = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingUpdateUnusedWhilePending); + printf("\tdescriptorBindingPartiallyBound = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingPartiallyBound); + printf("\tdescriptorBindingVariableDescriptorCount = %" PRIuLEAST32 "\n", + indexing_features->descriptorBindingVariableDescriptorCount); + printf("\truntimeDescriptorArray = %" PRIuLEAST32 "\n", indexing_features->runtimeDescriptorArray); + } } place = structure->pNext; } @@ -4729,8 +4864,158 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) { depth_stencil_resolve_properties->independentResolveNone); printf("\t\tindependentResolve = %" PRIuLEAST32 "\n", depth_stencil_resolve_properties->independentResolve); } + } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT && + CheckPhysicalDeviceExtensionIncluded(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, gpu->device_extensions, + gpu->device_extension_count)) { + VkPhysicalDeviceDescriptorIndexingPropertiesEXT *indexing_properties = + (VkPhysicalDeviceDescriptorIndexingPropertiesEXT *)structure; + if (html_output) { + fprintf(out, "\n\t\t\t\t\t
VkPhysicalDeviceDescriptorIndexingProperties\n"); + fprintf( + out, + "\t\t\t\t\t\t\t
maxUpdateAfterBindDescriptorsInAllPools = %" PRIuLEAST32 + "
\n", + indexing_properties->maxUpdateAfterBindDescriptorsInAllPools); + fprintf(out, + "\t\t\t\t\t\t\t
shaderUniformBufferArrayNonUniformIndexingNative = %" PRIuLEAST32 "
\n", + indexing_properties->shaderUniformBufferArrayNonUniformIndexingNative); + fprintf(out, + "\t\t\t\t\t\t\t
shaderSampledImageArrayNonUniformIndexingNative = %" PRIuLEAST32 "
\n", + indexing_properties->shaderSampledImageArrayNonUniformIndexingNative); + fprintf(out, + "\t\t\t\t\t\t\t
shaderStorageBufferArrayNonUniformIndexingNative = %" PRIuLEAST32 "
\n", + indexing_properties->shaderStorageBufferArrayNonUniformIndexingNative); + fprintf(out, + "\t\t\t\t\t\t\t
shaderStorageImageArrayNonUniformIndexingNative = %" PRIuLEAST32 "
\n", + indexing_properties->shaderStorageImageArrayNonUniformIndexingNative); + fprintf(out, + "\t\t\t\t\t\t\t
shaderInputAttachmentArrayNonUniformIndexingNative = %" PRIuLEAST32 "
\n", + indexing_properties->shaderInputAttachmentArrayNonUniformIndexingNative); + fprintf(out, + "\t\t\t\t\t\t\t
robustBufferAccessUpdateAfterBind = %" PRIuLEAST32 + "
\n", + indexing_properties->robustBufferAccessUpdateAfterBind); + fprintf(out, + "\t\t\t\t\t\t\t
quadDivergentImplicitLod = %" PRIuLEAST32 + "
\n", + indexing_properties->quadDivergentImplicitLod); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindSamplers = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindSamplers); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindUniformBuffers = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindStorageBuffers = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindSampledImages = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindSampledImages); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindStorageImages = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindStorageImages); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageDescriptorUpdateAfterBindInputAttachments = %" PRIuLEAST32 "
\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindInputAttachments); + fprintf(out, + "\t\t\t\t\t\t\t
maxPerStageUpdateAfterBindResources = %" PRIuLEAST32 + "
\n", + indexing_properties->maxPerStageUpdateAfterBindResources); + fprintf( + out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindSamplers = %" PRIuLEAST32 + "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindSamplers); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindUniformBuffers = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindUniformBuffers); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindStorageBuffers = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageBuffers); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindSampledImages = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindSampledImages); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindStorageImages = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageImages); + fprintf(out, + "\t\t\t\t\t\t\t
maxDescriptorSetUpdateAfterBindInputAttachments = %" PRIuLEAST32 "
\n", + indexing_properties->maxDescriptorSetUpdateAfterBindInputAttachments); + fprintf(out, "\t\t\t\t\t
\n"); + } else if (human_readable_output) { + printf("\nVkPhysicalDeviceDescriptorIndexingProperties\n"); + printf("============================================\n"); + printf("\tmaxUpdateAfterBindDescriptorsInAllPools = %" PRIuLEAST32 "\n", + indexing_properties->maxUpdateAfterBindDescriptorsInAllPools); + printf("\tshaderUniformBufferArrayNonUniformIndexingNative = %" PRIuLEAST32 "\n", + indexing_properties->shaderUniformBufferArrayNonUniformIndexingNative); + printf("\tshaderSampledImageArrayNonUniformIndexingNative = %" PRIuLEAST32 "\n", + indexing_properties->shaderSampledImageArrayNonUniformIndexingNative); + printf("\tshaderStorageBufferArrayNonUniformIndexingNative = %" PRIuLEAST32 "\n", + indexing_properties->shaderStorageBufferArrayNonUniformIndexingNative); + printf("\tshaderStorageImageArrayNonUniformIndexingNative = %" PRIuLEAST32 "\n", + indexing_properties->shaderStorageImageArrayNonUniformIndexingNative); + printf("\tshaderInputAttachmentArrayNonUniformIndexingNative = %" PRIuLEAST32 "\n", + indexing_properties->shaderInputAttachmentArrayNonUniformIndexingNative); + printf("\trobustBufferAccessUpdateAfterBind = %" PRIuLEAST32 "\n", + indexing_properties->robustBufferAccessUpdateAfterBind); + printf("\tquadDivergentImplicitLod = %" PRIuLEAST32 "\n", indexing_properties->quadDivergentImplicitLod); + printf("\tmaxPerStageDescriptorUpdateAfterBindSamplers = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindSamplers); + printf("\tmaxPerStageDescriptorUpdateAfterBindUniformBuffers = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers); + printf("\tmaxPerStageDescriptorUpdateAfterBindStorageBuffers = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers); + printf("\tmaxPerStageDescriptorUpdateAfterBindSampledImages = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindSampledImages); + printf("\tmaxPerStageDescriptorUpdateAfterBindStorageImages = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindStorageImages); + printf("\tmaxPerStageDescriptorUpdateAfterBindInputAttachments = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageDescriptorUpdateAfterBindInputAttachments); + printf("\tmaxPerStageUpdateAfterBindResources = %" PRIuLEAST32 "\n", + indexing_properties->maxPerStageUpdateAfterBindResources); + printf("\tmaxDescriptorSetUpdateAfterBindSamplers = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindSamplers); + printf("\tmaxDescriptorSetUpdateAfterBindUniformBuffers = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindUniformBuffers); + printf("\tmaxDescriptorSetUpdateAfterBindUniformBuffersDynamic = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); + printf("\tmaxDescriptorSetUpdateAfterBindStorageBuffer = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageBuffers); + printf("\tmaxDescriptorSetUpdateAfterBindStorageBuffersDynamic = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); + printf("\tmaxDescriptorSetUpdateAfterBindSampledImages = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindSampledImages); + printf("\tmaxDescriptorSetUpdateAfterBindStorageImages = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindStorageImages); + printf("\tmaxDescriptorSetUpdateAfterBindInputAttachments = %" PRIuLEAST32 "\n", + indexing_properties->maxDescriptorSetUpdateAfterBindInputAttachments); + } } - place = structure->pNext; } } -- cgit v1.2.3