diff options
| author | Jeff Smith <whydoubt@gmail.com> | 2018-08-31 01:03:25 -0500 |
|---|---|---|
| committer | Mark Young <marky@lunarg.com> | 2018-11-13 11:53:20 -0700 |
| commit | 4ec4d971ed59a9952c28a0448cc1d685a1faa694 (patch) | |
| tree | f45a66a89d912fe195b406470eb2f0854092016d | |
| parent | 2a8dd20c081257b3c036e1d7e94557a9ab3ff437 (diff) | |
| download | usermoji-4ec4d971ed59a9952c28a0448cc1d685a1faa694.tar.xz | |
vulkaninfo: Create AppDumpSurfaceExtensions
Refactored the code for setting up and dumping information about each
available surface extension.
| -rw-r--r-- | vulkaninfo/vulkaninfo.c | 146 |
1 files changed, 64 insertions, 82 deletions
diff --git a/vulkaninfo/vulkaninfo.c b/vulkaninfo/vulkaninfo.c index 95c99f9a..1fde1681 100644 --- a/vulkaninfo/vulkaninfo.c +++ b/vulkaninfo/vulkaninfo.c @@ -1617,6 +1617,44 @@ static void AppDumpSurfaceCapabilities(struct AppInstance *inst, struct AppGpu * } } +struct SurfaceExtensionInfo { + const char *name; + void (*create_window)(struct AppInstance *); + void (*create_surface)(struct AppInstance *); + void (*destroy_window)(struct AppInstance *); +}; + +static void AppDumpSurfaceExtension(struct AppInstance *inst, struct AppGpu *gpus, uint32_t gpu_count, + struct SurfaceExtensionInfo *surface_extension, int *format_count, int *present_mode_count, + FILE *out) { + + if (!CheckExtensionEnabled(surface_extension->name, inst->inst_extensions, inst->inst_extensions_count)) { + return; + } + + surface_extension->create_window(inst); + for (uint32_t i = 0; i < gpu_count; ++i) { + surface_extension->create_surface(inst); + if (html_output) { + fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary>\n", i, + gpus[i].props.deviceName); + fprintf(out, "\t\t\t\t\t<details><summary>Surface type : <div class='type'>%s</div></summary></details>\n", + surface_extension->name); + } else if (human_readable_output) { + printf("GPU id : %u (%s)\n", i, gpus[i].props.deviceName); + printf("Surface type : %s\n", surface_extension->name); + } + *format_count += AppDumpSurfaceFormats(inst, &gpus[i], out); + *present_mode_count += AppDumpSurfacePresentModes(inst, &gpus[i], out); + AppDumpSurfaceCapabilities(inst, &gpus[i], out); + AppDestroySurface(inst); + if (html_output) { + fprintf(out, "\t\t\t\t</details>\n"); + } + } + surface_extension->destroy_window(inst); +} + #endif static void AppDevDumpFormatProps(const struct AppGpu *gpu, VkFormat fmt, bool *first_in_list, FILE *out) { @@ -3514,96 +3552,40 @@ int main(int argc, char **argv) { //--WIN32-- #ifdef VK_USE_PLATFORM_WIN32_KHR - if (CheckExtensionEnabled(VK_KHR_WIN32_SURFACE_EXTENSION_NAME, inst.inst_extensions, inst.inst_extensions_count)) { - AppCreateWin32Window(&inst); - for (uint32_t i = 0; i < gpu_count; ++i) { - AppCreateWin32Surface(&inst); - if (html_output) { - fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary>\n", i, - gpus[i].props.deviceName); - fprintf(out, "\t\t\t\t\t<details><summary>Surface type : <div class='type'>%s</div></summary></details>\n", - VK_KHR_WIN32_SURFACE_EXTENSION_NAME); - } else if (human_readable_output) { - printf("GPU id : %u (%s)\n", i, gpus[i].props.deviceName); - printf("Surface type : %s\n", VK_KHR_WIN32_SURFACE_EXTENSION_NAME); - } - format_count += AppDumpSurfaceFormats(&inst, &gpus[i], out); - present_mode_count += AppDumpSurfacePresentModes(&inst, &gpus[i], out); - AppDumpSurfaceCapabilities(&inst, &gpus[i], out); - AppDestroySurface(&inst); - if (html_output) { - fprintf(out, "\t\t\t\t</details>\n"); - } - } - AppDestroyWin32Window(&inst); - } + struct SurfaceExtensionInfo surface_ext_win32; + surface_ext_win32.name = VK_KHR_WIN32_SURFACE_EXTENSION_NAME; + surface_ext_win32.create_window = AppCreateWin32Window; + surface_ext_win32.create_surface = AppCreateWin32Surface; + surface_ext_win32.destroy_window = AppDestroyWin32Window; + AppDumpSurfaceExtension(&inst, gpus, gpu_count, &surface_ext_win32, &format_count, &present_mode_count, out); //--XCB-- #elif VK_USE_PLATFORM_XCB_KHR - if (has_display && CheckExtensionEnabled(VK_KHR_XCB_SURFACE_EXTENSION_NAME, inst.inst_extensions, inst.inst_extensions_count)) { - AppCreateXcbWindow(&inst); - for (uint32_t i = 0; i < gpu_count; ++i) { - AppCreateXcbSurface(&inst); - if (html_output) { - fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary></details>\n", i, - gpus[i].props.deviceName); - fprintf(out, "\t\t\t\t<details><summary>Surface type : <div class='type'>%s</div></summary></details>\n", - VK_KHR_XCB_SURFACE_EXTENSION_NAME); - } else if (human_readable_output) { - printf("GPU id : %u (%s)\n", i, gpus[i].props.deviceName); - printf("Surface type : %s\n", VK_KHR_XCB_SURFACE_EXTENSION_NAME); - } - format_count += AppDumpSurfaceFormats(&inst, &gpus[i], out); - present_mode_count += AppDumpSurfacePresentModes(&inst, &gpus[i], out); - AppDumpSurfaceCapabilities(&inst, &gpus[i], out); - AppDestroySurface(&inst); - } - AppDestroyXcbWindow(&inst); + struct SurfaceExtensionInfo surface_ext_xcb; + surface_ext_xcb.name = VK_KHR_XCB_SURFACE_EXTENSION_NAME; + surface_ext_xcb.create_window = AppCreateXcbWindow; + surface_ext_xcb.create_surface = AppCreateXcbSurface; + surface_ext_xcb.destroy_window = AppDestroyXcbWindow; + if (has_display) { + AppDumpSurfaceExtension(&inst, gpus, gpu_count, &surface_ext_xcb, &format_count, &present_mode_count, out); } //--XLIB-- #elif VK_USE_PLATFORM_XLIB_KHR - if (has_display && - CheckExtensionEnabled(VK_KHR_XLIB_SURFACE_EXTENSION_NAME, inst.inst_extensions, inst.inst_extensions_count)) { - AppCreateXlibWindow(&inst); - for (uint32_t i = 0; i < gpu_count; ++i) { - AppCreateXlibSurface(&inst); - if (html_output) { - fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary></details>\n", i, - gpus[i].props.deviceName); - fprintf(out, "\t\t\t\t<details><summary>Surface type : <div class='type'>%s</div></summary></details>\n", - VK_KHR_XLIB_SURFACE_EXTENSION_NAME); - } else if (human_readable_output) { - printf("GPU id : %u (%s)\n", i, gpus[i].props.deviceName); - printf("Surface type : %s\n", VK_KHR_XLIB_SURFACE_EXTENSION_NAME); - } - format_count += AppDumpSurfaceFormats(&inst, &gpus[i], out); - present_mode_count += AppDumpSurfacePresentModes(&inst, &gpus[i], out); - AppDumpSurfaceCapabilities(&inst, &gpus[i], out); - AppDestroySurface(&inst); - } - AppDestroyXlibWindow(&inst); + struct SurfaceExtensionInfo surface_ext_xlib; + surface_ext_xlib.name = VK_KHR_XLIB_SURFACE_EXTENSION_NAME; + surface_ext_xlib.create_window = AppCreateXlibWindow; + surface_ext_xlib.create_surface = AppCreateXlibSurface; + surface_ext_xlib.destroy_window = AppDestroyXlibWindow; + if (has_display) { + AppDumpSurfaceExtension(&inst, gpus, gpu_count, &surface_ext_xlib, &format_count, &present_mode_count, out); } //--MACOS-- #elif VK_USE_PLATFORM_MACOS_MVK - if (CheckExtensionEnabled(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, inst.inst_extensions, inst.inst_extensions_count)) { - AppCreateMacOSWindow(&inst); - for (uint32_t i = 0; i < gpu_count; ++i) { - AppCreateMacOSSurface(&inst); - if (html_output) { - fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary></details>\n", i, - gpus[i].props.deviceName); - fprintf(out, "\t\t\t\t<details><summary>Surface type : <div class='type'>%s</div></summary></details>\n", - VK_MVK_MACOS_SURFACE_EXTENSION_NAME); - } else if (human_readable_output) { - printf("GPU id : %u (%s)\n", i, gpus[i].props.deviceName); - printf("Surface type : %s\n", VK_MVK_MACOS_SURFACE_EXTENSION_NAME); - } - format_count += AppDumpSurfaceFormats(&inst, &gpus[i], out); - present_mode_count += AppDumpSurfacePresentModes(&inst, &gpus[i], out); - AppDumpSurfaceCapabilities(&inst, &gpus[i], out); - AppDestroySurface(&inst); - } - AppDestroyMacOSWindow(&inst); - } + struct SurfaceExtensionInfo surface_ext_macos; + surface_ext_macos.name = VK_MVK_MACOS_SURFACE_EXTENSION_NAME; + surface_ext_macos.create_window = AppCreateMacOSWindow; + surface_ext_macos.create_surface = AppCreateMacOSSurface; + surface_ext_macos.destroy_window = AppDestroyMacOSWindow; + AppDumpSurfaceExtension(&inst, gpus, gpu_count, &surface_ext_macos, &format_count, &present_mode_count, out); #endif // TODO: Android / Wayland |
