vulkaninfo: VK_EXT_fragment_shader_interlock
authorCharles Giessen <charles@lunarg.com>
Mon, 5 Aug 2019 22:18:25 +0000 (16:18 -0600)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Mon, 5 Aug 2019 22:41:54 +0000 (16:41 -0600)
Adds support for the extension

Change-Id: Ifc18acbdeae3b1b5b568e9a3ddaffb444d14ef86

vulkaninfo/vulkaninfo.c

index ee0dea1..87d0530 100644 (file)
@@ -1106,7 +1106,9 @@ static void AppGpuInit(struct AppGpu *gpu, struct AppInstance *inst, uint32_t id
             {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT,
              .mem_size = sizeof(VkPhysicalDeviceHostQueryResetFeaturesEXT)},
             {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR,
-             .mem_size = sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR)}};
+             .mem_size = sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR)},
+            {.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT,
+             .mem_size = sizeof(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT)}};
 
         uint32_t chain_info_len = ARRAY_SIZE(chain_info);
 
@@ -3409,6 +3411,35 @@ static void AppGpuDumpFeatures(const struct AppGpu *gpu, FILE *out) {
                     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);
+                } 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);
+                }
             }
             place = structure->pNext;
         }