aboutsummaryrefslogtreecommitdiff
path: root/vulkaninfo/vulkaninfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'vulkaninfo/vulkaninfo.c')
-rw-r--r--vulkaninfo/vulkaninfo.c348
1 files changed, 252 insertions, 96 deletions
diff --git a/vulkaninfo/vulkaninfo.c b/vulkaninfo/vulkaninfo.c
index bb099194..5103e79e 100644
--- a/vulkaninfo/vulkaninfo.c
+++ b/vulkaninfo/vulkaninfo.c
@@ -558,6 +558,7 @@ static const char *VkFormatString(VkFormat fmt) {
return "UNKNOWN_FORMAT";
}
}
+
#if defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR) || defined(VK_USE_PLATFORM_WIN32_KHR) || \
defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_WAYLAND_KHR)
static const char *VkPresentModeString(VkPresentModeKHR mode) {
@@ -578,6 +579,20 @@ static const char *VkPresentModeString(VkPresentModeKHR mode) {
}
#endif
+static const char *VkShaderFloatControlsIndependenceString(const VkShaderFloatControlsIndependenceKHR indep) {
+ switch (indep) {
+#define STR(r) \
+ case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_##r: \
+ return #r
+ STR(32_BIT_ONLY_KHR);
+ STR(ALL_KHR);
+ STR(NONE_KHR);
+#undef STR
+ default:
+ return "UNKNOWN_INDEPENDENCE";
+ }
+}
+
static bool CheckExtensionEnabled(const char *extension_to_check, const char **extension_list, uint32_t extension_count) {
for (uint32_t i = 0; i < extension_count; ++i) {
if (!strncmp(extension_to_check, extension_list[i], VK_MAX_EXTENSION_NAME_SIZE)) {
@@ -980,7 +995,9 @@ static void AppGpuInit(struct AppGpu *gpu, struct AppInstance *inst, uint32_t id
{.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)}};
+ .mem_size = sizeof(VkPhysicalDeviceDepthStencilResolvePropertiesKHR)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
+ .mem_size = sizeof(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT)}};
uint32_t chain_info_len = ARRAY_SIZE(chain_info);
@@ -1104,7 +1121,17 @@ static void AppGpuInit(struct AppGpu *gpu, struct AppInstance *inst, uint32_t id
{.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,
- .mem_size = sizeof(VkPhysicalDeviceHostQueryResetFeaturesEXT)}};
+ .mem_size = sizeof(VkPhysicalDeviceHostQueryResetFeaturesEXT)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR,
+ .mem_size = sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT,
+ .mem_size = sizeof(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR,
+ .mem_size = sizeof(VkPhysicalDeviceImagelessFramebufferFeaturesKHR)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT,
+ .mem_size = sizeof(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT)},
+ {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
+ .mem_size = sizeof(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)}};
uint32_t chain_info_len = ARRAY_SIZE(chain_info);
@@ -1254,6 +1281,7 @@ static void AppGpuDestroy(struct AppGpu *gpu) {
free(gpu->queue_props2);
freepNextChain(gpu->props2.pNext);
+ freepNextChain(gpu->memory_props2.pNext);
}
}
@@ -2103,6 +2131,7 @@ static void AppDumpSurfaceCapabilities(struct AppInstance *inst, struct AppGpu *
}
place = work->pNext;
}
+ freepNextChain(surface_capabilities2.pNext);
}
if (html_output) {
fprintf(out, "\t\t\t\t\t</details>\n");
@@ -3389,6 +3418,106 @@ static void AppGpuDumpFeatures(const struct AppGpu *gpu, FILE *out) {
indexing_features->descriptorBindingVariableDescriptorCount);
printf("\truntimeDescriptorArray = %" PRIuLEAST32 "\n", indexing_features->runtimeDescriptorArray);
}
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR &&
+ CheckPhysicalDeviceExtensionIncluded(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME,
+ gpu->device_extensions, gpu->device_extension_count)) {
+ VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR *standard_features =
+ (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR *)structure;
+ if (html_output) {
+ fprintf(out,
+ "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>uniformBufferStandardLayout = <span class='val'>%" PRIuLEAST32
+ "</span></summary></details>\n",
+ standard_features->uniformBufferStandardLayout);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR:\n");
+ printf("=======================================================\n");
+ printf("\tuniformBufferStandardLayout = %" PRIuLEAST32 "\n", standard_features->uniformBufferStandardLayout);
+ }
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT &&
+ CheckPhysicalDeviceExtensionIncluded(VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, gpu->device_extensions,
+ gpu->device_extension_count)) {
+ VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *fragment_shader_features =
+ (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *)structure;
+ if (html_output) {
+ fprintf(out, "\t\t\t\t\t<details><summary>VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>fragmentShaderPixelInterlock = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ fragment_shader_features->fragmentShaderPixelInterlock);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>fragmentShaderSampleInterlock = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ fragment_shader_features->fragmentShaderSampleInterlock);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>fragmentShaderShadingRateInterlock = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ fragment_shader_features->fragmentShaderShadingRateInterlock);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceFragmentShaderInterlockFeaturesEXT:\n");
+ printf("===================================================\n");
+ printf("\tfragmentShaderPixelInterlock = %" PRIuLEAST32 "\n",
+ fragment_shader_features->fragmentShaderPixelInterlock);
+ printf("\tfragmentShaderSampleInterlock = %" PRIuLEAST32 "\n",
+ fragment_shader_features->fragmentShaderSampleInterlock);
+ printf("\tfragmentShaderShadingRateInterlock = %" PRIuLEAST32 "\n",
+ fragment_shader_features->fragmentShaderShadingRateInterlock);
+ }
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR &&
+ CheckPhysicalDeviceExtensionIncluded(VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, gpu->device_extensions,
+ gpu->device_extension_count)) {
+ VkPhysicalDeviceImagelessFramebufferFeaturesKHR *imageless_framebuffer =
+ (VkPhysicalDeviceImagelessFramebufferFeaturesKHR *)structure;
+ if (html_output) {
+ fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceImagelessFramebufferFeaturesKHR</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>imagelessFramebuffer = <span class='val'>%" PRIuLEAST32
+ "</span></summary></details>\n",
+ imageless_framebuffer->imagelessFramebuffer);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceImagelessFramebufferFeaturesKHR:\n");
+ printf("================================================\n");
+ printf("\timagelessFramebuffer = %" PRIuLEAST32 "\n", imageless_framebuffer->imagelessFramebuffer);
+ }
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT &&
+ CheckPhysicalDeviceExtensionIncluded(VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, gpu->device_extensions,
+ gpu->device_extension_count)) {
+ VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *texel_buffer_alignment =
+ (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *)structure;
+ if (html_output) {
+ fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>texelBufferAlignment = <span class='val'>%" PRIuLEAST32
+ "</span></summary></details>\n",
+ texel_buffer_alignment->texelBufferAlignment);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:\n");
+ printf("================================================\n");
+ printf("\ttexelBufferAlignment = %" PRIuLEAST32 "\n", texel_buffer_alignment->texelBufferAlignment);
+ }
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT &&
+ CheckPhysicalDeviceExtensionIncluded(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME,
+ gpu->device_extensions, gpu->device_extension_count)) {
+ VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT *shader_helper =
+ (VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT *)structure;
+ if (html_output) {
+ fprintf(out,
+ "\t\t\t\t\t<details><summary>VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>shaderDemoteToHelperInvocation = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ shader_helper->shaderDemoteToHelperInvocation);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT:\n");
+ printf("===================================================\n");
+ printf("\tshaderDemoteToHelperInvocation = %" PRIuLEAST32 "\n", shader_helper->shaderDemoteToHelperInvocation);
+ }
}
place = structure->pNext;
}
@@ -4425,10 +4554,10 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
(uint32_t)id_props->deviceLUID[2], (uint32_t)id_props->deviceLUID[3],
(uint32_t)id_props->deviceLUID[4], (uint32_t)id_props->deviceLUID[5],
(uint32_t)id_props->deviceLUID[6], (uint32_t)id_props->deviceLUID[7]);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>deviceNodeMask = <span class='val'>0x%08x</span></summary></details>\n",
- id_props->deviceNodeMask);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>deviceNodeMask = <span "
+ "class='val'>0x%08x</span></summary></details>\n",
+ id_props->deviceNodeMask);
}
fprintf(out, "\t\t\t\t\t</details>\n");
} else if (human_readable_output) {
@@ -4510,13 +4639,13 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
if (html_output) {
fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceFloatControlsProperties</summary>\n");
fprintf(out,
- "\t\t\t\t\t\t<details><summary>separateDenormSettings = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- float_control_props->separateDenormSettings);
+ "\t\t\t\t\t\t<details><summary>denormBehaviorIndependence = <span "
+ "class='val'>%s</span></summary></details>\n",
+ VkShaderFloatControlsIndependenceString(float_control_props->denormBehaviorIndependence));
fprintf(out,
- "\t\t\t\t\t\t<details><summary>separateRoundingModeSettings = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- float_control_props->separateRoundingModeSettings);
+ "\t\t\t\t\t\t<details><summary>roundingModeIndependence = <span "
+ "class='val'>%s</span></summary></details>\n",
+ VkShaderFloatControlsIndependenceString(float_control_props->roundingModeIndependence));
fprintf(out,
"\t\t\t\t\t\t<details><summary>shaderSignedZeroInfNanPreserveFloat16 = <span class='val'>%" PRIuLEAST32
"</span></summary></details>\n",
@@ -4581,16 +4710,17 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
} else if (human_readable_output) {
printf("\nVkPhysicalDeviceFloatControlsProperties:\n");
printf("========================================\n");
- printf("\tseparateDenormSettings = %" PRIuLEAST32 "\n", float_control_props->separateDenormSettings);
- printf("\tseparateRoundingModeSettings = %" PRIuLEAST32 "\n",
- float_control_props->separateRoundingModeSettings);
+ printf("\tdenormBehaviorIndependence = %s\n",
+ VkShaderFloatControlsIndependenceString(float_control_props->denormBehaviorIndependence));
+ printf("\troundingModeIndependence = %s\n",
+ VkShaderFloatControlsIndependenceString(float_control_props->roundingModeIndependence));
printf("\tshaderSignedZeroInfNanPreserveFloat16 = %" PRIuLEAST32 "\n",
float_control_props->shaderSignedZeroInfNanPreserveFloat16);
printf("\tshaderSignedZeroInfNanPreserveFloat32 = %" PRIuLEAST32 "\n",
float_control_props->shaderSignedZeroInfNanPreserveFloat32);
printf("\tshaderSignedZeroInfNanPreserveFloat64 = %" PRIuLEAST32 "\n",
float_control_props->shaderSignedZeroInfNanPreserveFloat64);
- printf("\tshaderDenormPreserveFloat16 = %" PRIuLEAST32 "\n",
+ printf("\tshaderDenormPreserveFloat16 = %" PRIuLEAST32 "\n",
float_control_props->shaderDenormPreserveFloat16);
printf("\tshaderDenormPreserveFloat32 = %" PRIuLEAST32 "\n",
float_control_props->shaderDenormPreserveFloat32);
@@ -4606,7 +4736,7 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
float_control_props->shaderRoundingModeRTEFloat16);
printf("\tshaderRoundingModeRTEFloat32 = %" PRIuLEAST32 "\n",
float_control_props->shaderRoundingModeRTEFloat32);
- printf("\tshaderRoundingModeRTEFloat64 = %" PRIuLEAST32 "\n",
+ printf("\tshaderRoundingModeRTEFloat64 = %" PRIuLEAST32 "\n",
float_control_props->shaderRoundingModeRTEFloat64);
printf("\tshaderRoundingModeRTZFloat16 = %" PRIuLEAST32 "\n",
float_control_props->shaderRoundingModeRTZFloat16);
@@ -4637,6 +4767,8 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
"\t\t\t\t\t\t<details><summary>pciFunction = <span class='val'>%" PRIuLEAST32
"</span></summary></details>\n",
pci_bus_properties->pciFunction);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+
} else if (human_readable_output) {
printf("\nVkPhysicalDevicePCIBusInfoProperties\n");
printf("====================================\n");
@@ -4652,56 +4784,46 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
(VkPhysicalDeviceTransformFeedbackPropertiesEXT *)structure;
if (html_output) {
fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceTransformFeedbackProperties</summary>\n");
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackStreams = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackStreams);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBuffers = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackBuffers);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferSize = <span class='val'>%" PRIuLEAST64
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackBufferSize);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackStreamDataSize = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackStreamDataSize);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferDataSize = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackBufferDataSize);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferDataStride = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->maxTransformFeedbackBufferDataStride);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>transformFeedbackQueries = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->transformFeedbackQueries);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>transformFeedbackStreamsLinesTriangles = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->transformFeedbackStreamsLinesTriangles);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>transformFeedbackRasterizationStreamSelect = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->transformFeedbackRasterizationStreamSelect);
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>transformFeedbackDraw = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- transform_feedback_properties->transformFeedbackDraw);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackStreams = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackStreams);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBuffers = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackBuffers);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferSize = <span "
+ "class='val'>%" PRIuLEAST64 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackBufferSize);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackStreamDataSize = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackStreamDataSize);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferDataSize = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackBufferDataSize);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>maxTransformFeedbackBufferDataStride = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->maxTransformFeedbackBufferDataStride);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>transformFeedbackQueries = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->transformFeedbackQueries);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>transformFeedbackStreamsLinesTriangles = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->transformFeedbackStreamsLinesTriangles);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>transformFeedbackRasterizationStreamSelect = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->transformFeedbackRasterizationStreamSelect);
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>transformFeedbackDraw = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ transform_feedback_properties->transformFeedbackDraw);
fprintf(out, "\t\t\t\t\t</details>\n");
} else if (human_readable_output) {
printf("\nVkPhysicalDeviceTransformFeedbackProperties\n");
@@ -4834,35 +4956,35 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
} else if (human_readable_output) {
printf("\nVkPhysicalDeviceDepthStencilResolveProperties\n");
printf("============================================\n");
- printf("\t\tsupportedDepthResolveModes:\n");
+ printf("\tsupportedDepthResolveModes:\n");
if (depth_stencil_resolve_properties->supportedDepthResolveModes == 0) {
- printf("\t\t\tVK_RESOLVE_MODE_NONE_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_NONE_KHR\n");
} else {
if (depth_stencil_resolve_properties->supportedDepthResolveModes & VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedDepthResolveModes & VK_RESOLVE_MODE_AVERAGE_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_AVERAGE_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_AVERAGE_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedDepthResolveModes & VK_RESOLVE_MODE_MIN_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_MIN_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_MIN_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedDepthResolveModes & VK_RESOLVE_MODE_MAX_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_MAX_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_MAX_BIT_KHR\n");
}
- printf("\t\tsupportedStencilResolveModes:\n");
+ printf("\tsupportedStencilResolveModes:\n");
if (depth_stencil_resolve_properties->supportedStencilResolveModes == 0) {
- printf("\t\t\tVK_RESOLVE_MODE_NONE_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_NONE_KHR\n");
} else {
if (depth_stencil_resolve_properties->supportedStencilResolveModes & VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedStencilResolveModes & VK_RESOLVE_MODE_AVERAGE_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_AVERAGE_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_AVERAGE_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedStencilResolveModes & VK_RESOLVE_MODE_MIN_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_MIN_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_MIN_BIT_KHR\n");
if (depth_stencil_resolve_properties->supportedStencilResolveModes & VK_RESOLVE_MODE_MAX_BIT_KHR)
- printf("\t\t\tVK_RESOLVE_MODE_MAX_BIT_KHR\n");
+ printf("\t\tVK_RESOLVE_MODE_MAX_BIT_KHR\n");
}
- printf("\t\tindependentResolveNone = %" PRIuLEAST32 "\n",
+ printf("\tindependentResolveNone = %" PRIuLEAST32 "\n",
depth_stencil_resolve_properties->independentResolveNone);
- printf("\t\tindependentResolve = %" PRIuLEAST32 "\n", depth_stencil_resolve_properties->independentResolve);
+ printf("\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,
@@ -4871,11 +4993,10 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
(VkPhysicalDeviceDescriptorIndexingPropertiesEXT *)structure;
if (html_output) {
fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceDescriptorIndexingProperties</summary>\n");
- fprintf(
- out,
- "\t\t\t\t\t\t\t<details><summary>maxUpdateAfterBindDescriptorsInAllPools = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- indexing_properties->maxUpdateAfterBindDescriptorsInAllPools);
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>maxUpdateAfterBindDescriptorsInAllPools = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ indexing_properties->maxUpdateAfterBindDescriptorsInAllPools);
fprintf(out,
"\t\t\t\t\t\t\t<details><summary>shaderUniformBufferArrayNonUniformIndexingNative = <span "
"class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
@@ -4932,11 +5053,10 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
"\t\t\t\t\t\t\t<details><summary>maxPerStageUpdateAfterBindResources = <span class='val'>%" PRIuLEAST32
"</span></summary></details>\n",
indexing_properties->maxPerStageUpdateAfterBindResources);
- fprintf(
- out,
- "\t\t\t\t\t\t\t<details><summary>maxDescriptorSetUpdateAfterBindSamplers = <span class='val'>%" PRIuLEAST32
- "</span></summary></details>\n",
- indexing_properties->maxDescriptorSetUpdateAfterBindSamplers);
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>maxDescriptorSetUpdateAfterBindSamplers = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ indexing_properties->maxDescriptorSetUpdateAfterBindSamplers);
fprintf(out,
"\t\t\t\t\t\t\t<details><summary>maxDescriptorSetUpdateAfterBindUniformBuffers = <span "
"class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
@@ -5015,6 +5135,42 @@ static void AppGpuDumpProps(const struct AppGpu *gpu, FILE *out) {
printf("\tmaxDescriptorSetUpdateAfterBindInputAttachments = %" PRIuLEAST32 "\n",
indexing_properties->maxDescriptorSetUpdateAfterBindInputAttachments);
}
+ } else if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT &&
+ CheckPhysicalDeviceExtensionIncluded(VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, gpu->device_extensions,
+ gpu->device_extension_count)) {
+ VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *texel_buffer_alignment =
+ (VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *)structure;
+ if (html_output) {
+ fprintf(out, "\n\t\t\t\t\t<details><summary>VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</summary>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>storageTexelBufferOffsetAlignmentBytes = <span "
+ "class='val'>%" PRIuLEAST64 "</span></summary></details>\n",
+ texel_buffer_alignment->storageTexelBufferOffsetAlignmentBytes);
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>storageTexelBufferOffsetSingleTexelAlignment = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ texel_buffer_alignment->storageTexelBufferOffsetSingleTexelAlignment);
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>uniformTexelBufferOffsetAlignmentBytes = <span "
+ "class='val'>%" PRIuLEAST64 "</span></summary></details>\n",
+ texel_buffer_alignment->uniformTexelBufferOffsetAlignmentBytes);
+ fprintf(out,
+ "\t\t\t\t\t\t\t<details><summary>uniformTexelBufferOffsetSingleTexelAlignment = <span "
+ "class='val'>%" PRIuLEAST32 "</span></summary></details>\n",
+ texel_buffer_alignment->uniformTexelBufferOffsetSingleTexelAlignment);
+ fprintf(out, "\t\t\t\t\t</details>\n");
+ } else if (human_readable_output) {
+ printf("\nVkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\n");
+ printf("=================================================\n");
+ printf("\t\tstorageTexelBufferOffsetAlignmentBytes = %" PRIuLEAST64 "\n",
+ texel_buffer_alignment->storageTexelBufferOffsetAlignmentBytes);
+ printf("\t\tstorageTexelBufferOffsetSingleTexelAlignment = %" PRIuLEAST32 "\n",
+ texel_buffer_alignment->storageTexelBufferOffsetSingleTexelAlignment);
+ printf("\t\tuniformTexelBufferOffsetAlignmentBytes = %" PRIuLEAST64 "\n",
+ texel_buffer_alignment->uniformTexelBufferOffsetAlignmentBytes);
+ printf("\t\tuniformTexelBufferOffsetSingleTexelAlignment = %" PRIuLEAST32 "\n",
+ texel_buffer_alignment->uniformTexelBufferOffsetSingleTexelAlignment);
+ }
}
place = structure->pNext;
}
@@ -5704,8 +5860,8 @@ static void AppGroupDump(const VkPhysicalDeviceGroupProperties *group, const uin
VkDeviceGroupPresentCapabilitiesKHR group_capabilities = {.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
.pNext = NULL};
- // If the KHR_device_group extension is present, write the capabilities of the logical device into a struct for later output
- // to user.
+ // If the KHR_device_group extension is present, write the capabilities of the logical device into a struct for later
+ // output to user.
PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR =
(PFN_vkGetDeviceGroupPresentCapabilitiesKHR)vkGetInstanceProcAddr(inst->instance,
"vkGetDeviceGroupPresentCapabilitiesKHR");
@@ -5755,9 +5911,9 @@ static void AppGroupDump(const VkPhysicalDeviceGroupProperties *group, const uin
if (group_capabilities.modes & VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR)
fprintf(out, "\t\t\t\t\t\t<details><summary>VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR</summary></details>\n");
if (group_capabilities.modes & VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR)
- fprintf(
- out,
- "\t\t\t\t\t\t<details><summary>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR</summary></details>\n");
+ fprintf(out,
+ "\t\t\t\t\t\t<details><summary>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR</summary></"
+ "details>\n");
fprintf(out, "\t\t\t\t\t</details>\n");
} else if (human_readable_output) {
printf("\t\tPresent modes:\n");