Hello community,

here is the log from the commit of package vulkan-tools for openSUSE:Factory 
checked in at 2020-08-29 20:40:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/vulkan-tools (Old)
 and      /work/SRC/openSUSE:Factory/.vulkan-tools.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "vulkan-tools"

Sat Aug 29 20:40:23 2020 rev:22 rq:830117 version:1.2.151

Changes:
--------
--- /work/SRC/openSUSE:Factory/vulkan-tools/vulkan-tools.changes        
2020-08-12 12:29:42.888189965 +0200
+++ /work/SRC/openSUSE:Factory/.vulkan-tools.new.3399/vulkan-tools.changes      
2020-08-29 20:40:45.705425365 +0200
@@ -1,0 +2,8 @@
+Wed Aug 19 07:32:08 UTC 2020 - Jan Engelhardt <[email protected]>
+
+- Update to release 1.2.151
+  * vulkaninfo: fix device ext list having bad items
+  * vulkaninfo: add `--summary` option that shows basic system info
+  * Add support for VK_EXT_directfb_surface extension
+
+-------------------------------------------------------------------

Old:
----
  v1.2.148.tar.gz

New:
----
  v1.2.151.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ vulkan-tools.spec ++++++
--- /var/tmp/diff_new_pack.p8AJae/_old  2020-08-29 20:40:46.593425735 +0200
+++ /var/tmp/diff_new_pack.p8AJae/_new  2020-08-29 20:40:46.593425735 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           vulkan-tools
-Version:        1.2.148
+Version:        1.2.151
 Release:        0
 Summary:        Diagnostic utilities for Vulkan
 License:        Apache-2.0

++++++ v1.2.148.tar.gz -> v1.2.151.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/BUILD.md 
new/Vulkan-Tools-1.2.151/BUILD.md
--- old/Vulkan-Tools-1.2.148/BUILD.md   2020-07-20 22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/BUILD.md   2020-08-18 05:43:44.000000000 +0200
@@ -205,6 +205,7 @@
 | BUILD_WSI_XCB_SUPPORT | Linux | `ON` | Build the components with XCB 
support. |
 | BUILD_WSI_XLIB_SUPPORT | Linux | `ON` | Build the components with Xlib 
support. |
 | BUILD_WSI_WAYLAND_SUPPORT | Linux | `ON` | Build the components with Wayland 
support. |
+| BUILD_WSI_DIRECTFB_SUPPORT | Linux | `OFF` | Build the components with 
DirectFB support. |
 | USE_CCACHE | Linux | `OFF` | Enable caching with the CCache program. |
 
 The following is a table of all string options currently supported by this 
repository:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Vulkan-Tools-1.2.148/build-android/vulkan-headers_revision_android 
new/Vulkan-Tools-1.2.151/build-android/vulkan-headers_revision_android
--- old/Vulkan-Tools-1.2.148/build-android/vulkan-headers_revision_android      
2020-07-20 22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/build-android/vulkan-headers_revision_android      
2020-08-18 05:43:44.000000000 +0200
@@ -1 +1 @@
-v1.2.148
+v1.2.151
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/cmake/FindDirectFB.cmake 
new/Vulkan-Tools-1.2.151/cmake/FindDirectFB.cmake
--- old/Vulkan-Tools-1.2.148/cmake/FindDirectFB.cmake   1970-01-01 
01:00:00.000000000 +0100
+++ new/Vulkan-Tools-1.2.151/cmake/FindDirectFB.cmake   2020-08-18 
05:43:44.000000000 +0200
@@ -0,0 +1,28 @@
+# Try to find DirectFB
+#
+# This will define:
+#
+#   DIRECTFB_FOUND       - True if DirectFB is found
+#   DIRECTFB_LIBRARIES   - Link these to use DirectFB
+#   DIRECTFB_INCLUDE_DIR - Include directory for DirectFB
+#   DIRECTFB_DEFINITIONS - Compiler flags for using DirectFB
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+IF (NOT WIN32)
+  FIND_PACKAGE(PkgConfig)
+  PKG_CHECK_MODULES(PKG_DIRECTFB QUIET directfb)
+
+  SET(DIRECTFB_DEFINITIONS ${PKG_DIRECTFB_CFLAGS})
+
+  FIND_PATH(DIRECTFB_INCLUDE_DIR  NAMES directfb.h HINTS 
${PKG_DIRECTFB_INCLUDE_DIRS})
+
+  FIND_LIBRARY(DIRECTFB_LIBRARIES NAMES directfb   HINTS 
${PKG_DIRECTFB_LIBRARY_DIRS})
+
+  include(FindPackageHandleStandardArgs)
+
+  FIND_PACKAGE_HANDLE_STANDARD_ARGS(DIRECTFB DEFAULT_MSG DIRECTFB_LIBRARIES 
DIRECTFB_INCLUDE_DIR)
+
+  MARK_AS_ADVANCED(DIRECTFB_INCLUDE_DIR DIRECTFB_LIBRARIES)
+ENDIF ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/cube/CMakeLists.txt 
new/Vulkan-Tools-1.2.151/cube/CMakeLists.txt
--- old/Vulkan-Tools-1.2.148/cube/CMakeLists.txt        2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/cube/CMakeLists.txt        2020-08-18 
05:43:44.000000000 +0200
@@ -46,7 +46,8 @@
     option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
     option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON)
     option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON)
-    set(CUBE_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for vkcube 
(XCB, XLIB, WAYLAND, DISPLAY)")
+    option(BUILD_WSI_DIRECTFB_SUPPORT "Build DirectFB WSI support" OFF)
+    set(CUBE_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for vkcube 
(XCB, XLIB, WAYLAND, DIRECTFB, DISPLAY)")
 
     if(BUILD_WSI_XCB_SUPPORT)
         find_package(XCB REQUIRED)
@@ -60,6 +61,11 @@
         find_package(Wayland REQUIRED)
         include_directories(${WAYLAND_CLIENT_INCLUDE_DIR})
     endif()
+
+    if(BUILD_WSI_DIRECTFB_SUPPORT)
+        find_package(DirectFB REQUIRED)
+        include_directories(${DIRECTFB_INCLUDE_DIR})
+    endif()
 endif()
 
 if(WIN32)
@@ -101,6 +107,13 @@
         set(CUBE_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR} 
${CUBE_INCLUDE_DIRS})
         link_libraries(${WAYLAND_CLIENT_LIBRARIES})
         add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR)
+    elseif(CUBE_WSI_SELECTION STREQUAL "DIRECTFB")
+        if(NOT BUILD_WSI_DIRECTFB_SUPPORT)
+            message(FATAL_ERROR "Selected DIRECTFB for vkcube build but not 
building DirectFB support")
+        endif()
+        set(CUBE_INCLUDE_DIRS ${DIRECTFB_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS})
+        link_libraries(${DIRECTFB_LIBRARIES})
+        add_definitions(-DVK_USE_PLATFORM_DIRECTFB_EXT)
     elseif(CUBE_WSI_SELECTION STREQUAL "DISPLAY")
         add_definitions(-DVK_USE_PLATFORM_DISPLAY_KHR)
     else()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/cube/cube.c 
new/Vulkan-Tools-1.2.151/cube/cube.c
--- old/Vulkan-Tools-1.2.148/cube/cube.c        2020-07-20 22:47:26.000000000 
+0200
+++ new/Vulkan-Tools-1.2.151/cube/cube.c        2020-08-18 05:43:44.000000000 
+0200
@@ -327,6 +327,10 @@
     struct wl_seat *seat;
     struct wl_pointer *pointer;
     struct wl_keyboard *keyboard;
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    IDirectFB *dfb;
+    IDirectFBSurface *window;
+    IDirectFBEventBuffer *event_buffer;
 #elif defined(VK_USE_PLATFORM_ANDROID_KHR)
     struct ANativeWindow *window;
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
@@ -2367,6 +2371,10 @@
     wl_compositor_destroy(demo->compositor);
     wl_registry_destroy(demo->registry);
     wl_display_disconnect(demo->display);
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    demo->event_buffer->Release(demo->event_buffer);
+    demo->window->Release(demo->window);
+    demo->dfb->Release(demo->dfb);
 #endif
 
     vkDestroyInstance(demo->inst, NULL);
@@ -2769,6 +2777,80 @@
     wl_shell_surface_set_toplevel(demo->shell_surface);
     wl_shell_surface_set_title(demo->shell_surface, APP_SHORT_NAME);
 }
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+static void demo_create_directfb_window(struct demo *demo) {
+    DFBResult ret;
+
+    ret = DirectFBInit(NULL, NULL);
+    if (ret) {
+        printf("DirectFBInit failed to initialize DirectFB!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    ret = DirectFBCreate(&demo->dfb);
+    if (ret) {
+        printf("DirectFBCreate failed to create main interface of 
DirectFB!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    DFBSurfaceDescription desc;
+    desc.flags = DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT;
+    desc.caps = DSCAPS_PRIMARY;
+    desc.width = demo->width;
+    desc.height = demo->height;
+    ret = demo->dfb->CreateSurface(demo->dfb, &desc, &demo->window);
+    if (ret) {
+        printf("CreateSurface failed to create DirectFB surface interface!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    ret = demo->dfb->CreateInputEventBuffer(demo->dfb, DICAPS_KEYS, DFB_FALSE, 
&demo->event_buffer);
+    if (ret) {
+        printf("CreateInputEventBuffer failed to create DirectFB event buffer 
interface!\n");
+        fflush(stdout);
+        exit(1);
+    }
+}
+
+static void demo_handle_directfb_event(struct demo *demo, const DFBInputEvent 
*event) {
+    if (event->type != DIET_KEYPRESS) return;
+    switch (event->key_symbol) {
+        case DIKS_ESCAPE:  // Escape
+            demo->quit = true;
+            break;
+        case DIKS_CURSOR_LEFT:  // left arrow key
+            demo->spin_angle -= demo->spin_increment;
+            break;
+        case DIKS_CURSOR_RIGHT:  // right arrow key
+            demo->spin_angle += demo->spin_increment;
+            break;
+        case DIKS_SPACE:  // space bar
+            demo->pause = !demo->pause;
+            break;
+        default:
+            break;
+    }
+}
+
+static void demo_run_directfb(struct demo *demo) {
+    while (!demo->quit) {
+        DFBInputEvent event;
+
+        if (demo->pause) {
+            demo->event_buffer->WaitForEvent(demo->event_buffer);
+            if (!demo->event_buffer->GetEvent(demo->event_buffer, 
DFB_EVENT(&event))) demo_handle_directfb_event(demo, &event);
+        } else {
+            if (!demo->event_buffer->GetEvent(demo->event_buffer, 
DFB_EVENT(&event))) demo_handle_directfb_event(demo, &event);
+
+            demo_draw(demo);
+            demo->curFrame++;
+            if (demo->frameCount != INT32_MAX && demo->curFrame == 
demo->frameCount) demo->quit = true;
+        }
+    }
+}
 #elif defined(VK_USE_PLATFORM_ANDROID_KHR)
 static void demo_run(struct demo *demo) {
     if (!demo->prepared) return;
@@ -3031,6 +3113,11 @@
                 platformSurfaceExtFound = 1;
                 demo->extension_names[demo->enabled_extension_count++] = 
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME;
             }
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+            if (!strcmp(VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME, 
instance_extensions[i].extensionName)) {
+                platformSurfaceExtFound = 1;
+                demo->extension_names[demo->enabled_extension_count++] = 
VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME;
+            }
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
             if (!strcmp(VK_KHR_DISPLAY_EXTENSION_NAME, 
instance_extensions[i].extensionName)) {
                 platformSurfaceExtFound = 1;
@@ -3108,6 +3195,12 @@
                  "Do you have a compatible Vulkan installable client driver 
(ICD) installed?\n"
                  "Please look at the Getting Started guide for additional 
information.\n",
                  "vkCreateInstance Failure");
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+        ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " 
VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME
+                 " extension.\n\n"
+                 "Do you have a compatible Vulkan installable client driver 
(ICD) installed?\n"
+                 "Please look at the Getting Started guide for additional 
information.\n",
+                 "vkCreateInstance Failure");
 #endif
     }
     const VkApplicationInfo app = {
@@ -3405,6 +3498,15 @@
     createInfo.window = demo->xcb_window;
 
     err = vkCreateXcbSurfaceKHR(demo->inst, &createInfo, NULL, &demo->surface);
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    VkDirectFBSurfaceCreateInfoEXT createInfo;
+    createInfo.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
+    createInfo.pNext = NULL;
+    createInfo.flags = 0;
+    createInfo.dfb = demo->dfb;
+    createInfo.surface = demo->window;
+
+    err = vkCreateDirectFBSurfaceEXT(demo->inst, &createInfo, NULL, 
&demo->surface);
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
     err = demo_create_display_surface(demo);
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
@@ -4014,6 +4116,8 @@
     demo_create_xlib_window(&demo);
 #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
     demo_create_window(&demo);
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    demo_create_directfb_window(&demo);
 #endif
 
     demo_init_vk_swapchain(&demo);
@@ -4026,6 +4130,8 @@
     demo_run_xlib(&demo);
 #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
     demo_run(&demo);
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    demo_run_directfb(&demo);
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
     demo_run_display(&demo);
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/cube/cube.cpp 
new/Vulkan-Tools-1.2.151/cube/cube.cpp
--- old/Vulkan-Tools-1.2.148/cube/cube.cpp      2020-07-20 22:47:26.000000000 
+0200
+++ new/Vulkan-Tools-1.2.151/cube/cube.cpp      2020-08-18 05:43:44.000000000 
+0200
@@ -263,6 +263,10 @@
 #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
     void run();
     void create_window();
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    void handle_directfb_event(const DFBInputEvent *);
+    void run_directfb();
+    void create_directfb_window();
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
     void run();
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
@@ -294,6 +298,10 @@
     wl_seat *seat;
     wl_pointer *pointer;
     wl_keyboard *keyboard;
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    IDirectFB *dfb;
+    IDirectFBSurface *window;
+    IDirectFBEventBuffer *event_buffer;
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
     void *caMetalLayer;
 #endif
@@ -531,6 +539,10 @@
       seat{nullptr},
       pointer{nullptr},
       keyboard{nullptr},
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+      dfb{nullptr},
+      window{nullptr},
+      event_buffer{nullptr},
 #endif
       prepared{false},
       use_staging_buffer{false},
@@ -677,6 +689,10 @@
     wl_compositor_destroy(compositor);
     wl_registry_destroy(registry);
     wl_display_disconnect(display);
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    event_buffer->Release(event_buffer);
+    window->Release(window);
+    dfb->Release(dfb);
 #endif
 
     inst.destroy(nullptr);
@@ -1118,6 +1134,11 @@
                 platformSurfaceExtFound = 1;
                 extension_names[enabled_extension_count++] = 
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME;
             }
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+            if (!strcmp(VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME, 
instance_extensions[i].extensionName)) {
+                platformSurfaceExtFound = 1;
+                extension_names[enabled_extension_count++] = 
VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME;
+            }
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
             if (!strcmp(VK_KHR_DISPLAY_EXTENSION_NAME, 
instance_extensions[i].extensionName)) {
                 platformSurfaceExtFound = 1;
@@ -1167,6 +1188,12 @@
                  "Do you have a compatible Vulkan installable client driver 
(ICD) installed?\n"
                  "Please look at the Getting Started guide for additional 
information.\n",
                  "vkCreateInstance Failure");
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+        ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " 
VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME
+                 " extension.\n\n"
+                 "Do you have a compatible Vulkan installable client driver 
(ICD) installed?\n"
+                 "Please look at the Getting Started guide for additional 
information.\n",
+                 "vkCreateInstance Failure");
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
         ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " 
VK_KHR_DISPLAY_EXTENSION_NAME
                  " extension.\n\n"
@@ -1315,6 +1342,13 @@
         auto result = inst.createXcbSurfaceKHR(&createInfo, nullptr, &surface);
         VERIFY(result == vk::Result::eSuccess);
     }
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    {
+        auto const createInfo = 
vk::DirectFBSurfaceCreateInfoEXT().setDfb(dfb).setSurface(window);
+
+        auto result = inst.createDirectFBSurfaceEXT(&createInfo, nullptr, 
&surface);
+        VERIFY(result == vk::Result::eSuccess);
+    }
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
     {
         auto const createInfo = 
vk::MetalSurfaceCreateInfoEXT().setPLayer(static_cast<CAMetalLayer 
*>(caMetalLayer));
@@ -2711,6 +2745,83 @@
     wl_shell_surface_set_toplevel(shell_surface);
     wl_shell_surface_set_title(shell_surface, APP_SHORT_NAME);
 }
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+
+void Demo::handle_directfb_event(const DFBInputEvent *event) {
+    if (event->type != DIET_KEYPRESS) return;
+    switch (event->key_symbol) {
+        case DIKS_ESCAPE:  // Escape
+            quit = true;
+            break;
+        case DIKS_CURSOR_LEFT:  // left arrow key
+            spin_angle -= spin_increment;
+            break;
+        case DIKS_CURSOR_RIGHT:  // right arrow key
+            spin_angle += spin_increment;
+            break;
+        case DIKS_SPACE:  // space bar
+            pause = !pause;
+            break;
+        default:
+            break;
+    }
+}
+
+void Demo::run_directfb() {
+    while (!quit) {
+        DFBInputEvent event;
+
+        if (pause) {
+            event_buffer->WaitForEvent(event_buffer);
+            if (!event_buffer->GetEvent(event_buffer, DFB_EVENT(&event))) 
handle_directfb_event(&event);
+        } else {
+            if (!event_buffer->GetEvent(event_buffer, DFB_EVENT(&event))) 
handle_directfb_event(&event);
+
+            draw();
+            curFrame++;
+            if (frameCount != UINT32_MAX && curFrame == frameCount) {
+                quit = true;
+            }
+        }
+    }
+}
+
+void Demo::create_directfb_window() {
+    DFBResult ret;
+
+    ret = DirectFBInit(NULL, NULL);
+    if (ret) {
+        printf("DirectFBInit failed to initialize DirectFB!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    ret = DirectFBCreate(&dfb);
+    if (ret) {
+        printf("DirectFBCreate failed to create main interface of 
DirectFB!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    DFBSurfaceDescription desc;
+    desc.flags = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS | DSDESC_WIDTH | 
DSDESC_HEIGHT);
+    desc.caps = DSCAPS_PRIMARY;
+    desc.width = width;
+    desc.height = height;
+    ret = dfb->CreateSurface(dfb, &desc, &window);
+    if (ret) {
+        printf("CreateSurface failed to create DirectFB surface interface!\n");
+        fflush(stdout);
+        exit(1);
+    }
+
+    ret = dfb->CreateInputEventBuffer(dfb, DICAPS_KEYS, DFB_FALSE, 
&event_buffer);
+    if (ret) {
+        printf("CreateInputEventBuffer failed to create DirectFB event buffer 
interface!\n");
+        fflush(stdout);
+        exit(1);
+    }
+}
 #elif defined(VK_USE_PLATFORM_METAL_EXT)
 void Demo::run() {
     draw();
@@ -3024,6 +3135,8 @@
     demo.create_xlib_window();
 #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
     demo.create_window();
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    demo.create_directfb_window();
 #endif
 
     demo.init_vk_swapchain();
@@ -3036,6 +3149,8 @@
     demo.run_xlib();
 #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
     demo.run();
+#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
+    demo.run_directfb();
 #elif defined(VK_USE_PLATFORM_DISPLAY_KHR)
     demo.run_display();
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/icd/generated/mock_icd.cpp 
new/Vulkan-Tools-1.2.151/icd/generated/mock_icd.cpp
--- old/Vulkan-Tools-1.2.148/icd/generated/mock_icd.cpp 2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/icd/generated/mock_icd.cpp 2020-08-18 
05:43:44.000000000 +0200
@@ -4643,6 +4643,7 @@
 
 
 
+
 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDirectFBSurfaceEXT(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/icd/generated/mock_icd.h 
new/Vulkan-Tools-1.2.151/icd/generated/mock_icd.h
--- old/Vulkan-Tools-1.2.148/icd/generated/mock_icd.h   2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/icd/generated/mock_icd.h   2020-08-18 
05:43:44.000000000 +0200
@@ -73,13 +73,13 @@
     {"VK_KHR_external_fence_capabilities", 1},
     {"VK_KHR_get_surface_capabilities2", 1},
     {"VK_KHR_get_display_properties2", 1},
-    {"VK_MVK_ios_surface", 2},
-    {"VK_MVK_macos_surface", 2},
+    {"VK_MVK_ios_surface", 3},
+    {"VK_MVK_macos_surface", 3},
     {"VK_EXT_debug_utils", 2},
     {"VK_FUCHSIA_imagepipe_surface", 1},
     {"VK_EXT_metal_surface", 1},
     {"VK_KHR_surface_protected_capabilities", 1},
-    {"VK_EXT_validation_features", 3},
+    {"VK_EXT_validation_features", 4},
     {"VK_EXT_headless_surface", 1},
     {"VK_EXT_directfb_surface", 1},
 };
@@ -262,6 +262,7 @@
     {"VK_QCOM_render_pass_store_ops", 2},
     {"VK_EXT_fragment_density_map2", 1},
     {"VK_EXT_image_robustness", 1},
+    {"VK_EXT_4444_formats", 1},
 };
 
 
@@ -2826,6 +2827,7 @@
 
 
 
+
 
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Vulkan-Tools-1.2.148/icd/generated/vk_typemap_helper.h 
new/Vulkan-Tools-1.2.151/icd/generated/vk_typemap_helper.h
--- old/Vulkan-Tools-1.2.148/icd/generated/vk_typemap_helper.h  2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/icd/generated/vk_typemap_helper.h  2020-08-18 
05:43:44.000000000 +0200
@@ -3895,6 +3895,15 @@
     typedef VkPhysicalDeviceImageRobustnessFeaturesEXT Type;
 };
 
+// Map type VkPhysicalDevice4444FormatsFeaturesEXT to id 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT
+template <> struct LvlTypeMap<VkPhysicalDevice4444FormatsFeaturesEXT> {
+    static const VkStructureType kSType = 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
+};
+
+template <> struct 
LvlSTypeMap<VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT> {
+    typedef VkPhysicalDevice4444FormatsFeaturesEXT Type;
+};
+
 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
 // Map type VkDirectFBSurfaceCreateInfoEXT to id 
VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT
 template <> struct LvlTypeMap<VkDirectFBSurfaceCreateInfoEXT> {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/scripts/known_good.json 
new/Vulkan-Tools-1.2.151/scripts/known_good.json
--- old/Vulkan-Tools-1.2.148/scripts/known_good.json    2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/scripts/known_good.json    2020-08-18 
05:43:44.000000000 +0200
@@ -6,7 +6,7 @@
       "sub_dir" : "Vulkan-Headers",
       "build_dir" : "Vulkan-Headers/build",
       "install_dir" : "Vulkan-Headers/build/install",
-      "commit" : "v1.2.148"
+      "commit" : "v1.2.151"
     },
     {
       "name" : "MoltenVK",
@@ -14,10 +14,10 @@
       "sub_dir" : "MoltenVK",
       "build_dir" : "MoltenVK",
       "install_dir" : "MoltenVK",
-      "commit" : "v.1.0.43",
+      "commit" : "v1.0.44",
       "custom_build" : [
-        "./fetchDependencies",
-        "xcodebuild -project MoltenVKPackaging.xcodeproj 
GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS 
MVK_CONFIG_LOG_LEVEL=1' -scheme \"MoltenVK Package\" build"
+        "./fetchDependencies --macos --no-parallel-build",
+        "xcodebuild -project MoltenVKPackaging.xcodeproj 
GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS 
MVK_CONFIG_LOG_LEVEL=1' -scheme \"MoltenVK Package (macOS only)\" build"
       ],
       "build_step" : "custom",
       "build_platforms" : [
@@ -30,7 +30,7 @@
       "sub_dir" : "Vulkan-Loader",
       "build_dir" : "Vulkan-Loader/build",
       "install_dir" : "Vulkan-Loader/build/install",
-      "commit" : "v1.2.148",
+      "commit" : "v1.2.151",
       "deps" : [
         {
           "var_name" : "VULKAN_HEADERS_INSTALL_DIR",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/vulkaninfo/CMakeLists.txt 
new/Vulkan-Tools-1.2.151/vulkaninfo/CMakeLists.txt
--- old/Vulkan-Tools-1.2.148/vulkaninfo/CMakeLists.txt  2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/vulkaninfo/CMakeLists.txt  2020-08-18 
05:43:44.000000000 +0200
@@ -40,6 +40,7 @@
     option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
     option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON)
     option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON)
+    option(BUILD_WSI_DIRECTFB_SUPPORT "Build DirectFB WSI support" OFF)
 
     if(BUILD_WSI_XCB_SUPPORT)
         find_package(XCB REQUIRED)
@@ -61,6 +62,13 @@
         target_link_libraries(vulkaninfo ${WAYLAND_CLIENT_LIBRARIES})
         target_compile_definitions(vulkaninfo PRIVATE 
-DVK_USE_PLATFORM_WAYLAND_KHR -DVK_NO_PROTOTYPES)
     endif()
+
+    if(BUILD_WSI_DIRECTFB_SUPPORT)
+        find_package(DirectFB REQUIRED)
+        target_include_directories(vulkaninfo PRIVATE ${DIRECTFB_INCLUDE_DIR})
+        target_link_libraries(vulkaninfo ${DIRECTFB_LIBRARIES})
+        target_compile_definitions(vulkaninfo PRIVATE 
-DVK_USE_PLATFORM_DIRECTFB_EXT -DVK_NO_PROTOTYPES)
+    endif()
 endif()
 
 if(APPLE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Vulkan-Tools-1.2.148/vulkaninfo/generated/vulkaninfo.hpp 
new/Vulkan-Tools-1.2.151/vulkaninfo/generated/vulkaninfo.hpp
--- old/Vulkan-Tools-1.2.148/vulkaninfo/generated/vulkaninfo.hpp        
2020-07-20 22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/vulkaninfo/generated/vulkaninfo.hpp        
2020-08-18 05:43:44.000000000 +0200
@@ -346,6 +346,8 @@
         case (1000066011): return "FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
         case (1000066012): return "FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
         case (1000066013): return "FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
+        case (1000340000): return "FORMAT_A4R4G4B4_UNORM_PACK16_EXT";
+        case (1000340001): return "FORMAT_A4B4G4R4_UNORM_PACK16_EXT";
         default: return "UNKNOWN_VkFormat";
     }
 }
@@ -960,6 +962,11 @@
     p.PrintKeyBool("storagePushConstant16", 
static_cast<bool>(obj.storagePushConstant16), 34);
     p.PrintKeyBool("storageInputOutput16", 
static_cast<bool>(obj.storageInputOutput16), 34);
 }
+void DumpVkPhysicalDevice4444FormatsFeaturesEXT(Printer &p, std::string name, 
VkPhysicalDevice4444FormatsFeaturesEXT &obj) {
+    ObjectWrapper object{p, name};
+    p.PrintKeyBool("formatA4R4G4B4", static_cast<bool>(obj.formatA4R4G4B4), 
14);
+    p.PrintKeyBool("formatA4B4G4R4", static_cast<bool>(obj.formatA4B4G4R4), 
14);
+}
 void DumpVkPhysicalDevice8BitStorageFeatures(Printer &p, std::string name, 
VkPhysicalDevice8BitStorageFeatures &obj) {
     ObjectWrapper object{p, name};
     p.PrintKeyBool("storageBuffer8BitAccess", 
static_cast<bool>(obj.storageBuffer8BitAccess), 33);
@@ -1924,6 +1931,7 @@
     };
     infos.phys_device_features2 = {
         {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, 
sizeof(VkPhysicalDevice16BitStorageFeatures)},
+        {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, 
sizeof(VkPhysicalDevice4444FormatsFeaturesEXT)},
         {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, 
sizeof(VkPhysicalDevice8BitStorageFeatures)},
         {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, 
sizeof(VkPhysicalDeviceASTCDecodeFeaturesEXT)},
         
{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, 
sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT)},
@@ -2230,6 +2238,12 @@
             DumpVkPhysicalDevice16BitStorageFeatures(p, version.minor >= 1 
?"VkPhysicalDevice16BitStorageFeatures":"VkPhysicalDevice16BitStorageFeaturesKHR",
 *props);
             p.AddNewline();
         }
+        if (structure->sType == 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT && 
+           
(gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_4444_FORMATS_EXTENSION_NAME))) 
{
+            VkPhysicalDevice4444FormatsFeaturesEXT* props = 
(VkPhysicalDevice4444FormatsFeaturesEXT*)structure;
+            DumpVkPhysicalDevice4444FormatsFeaturesEXT(p, 
"VkPhysicalDevice4444FormatsFeaturesEXT", *props);
+            p.AddNewline();
+        }
         if (structure->sType == 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES && 
            
(gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_8BIT_STORAGE_EXTENSION_NAME) ||
             version.minor >= 2)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.cpp 
new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.cpp
--- old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.cpp  2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.cpp  2020-08-18 
05:43:44.000000000 +0200
@@ -43,31 +43,29 @@
 
 // =========== Dump Functions ========= //
 
-void DumpExtensions(Printer &p, std::string layer_name, 
std::vector<VkExtensionProperties> extensions) {
+void DumpExtensions(Printer &p, std::string layer_name, 
std::vector<VkExtensionProperties> extensions, bool do_indent) {
     std::sort(extensions.begin(), extensions.end(), [](VkExtensionProperties 
&a, VkExtensionProperties &b) -> int {
         return std::string(a.extensionName) < std::string(b.extensionName);
     });
 
-    int max_length = 0;
-    if (extensions.size() > 0) {
-        max_length = static_cast<int>(strlen(extensions.at(0).extensionName));
-        for (auto &ext : extensions) {
-            int len = static_cast<int>(strlen(ext.extensionName));
-            if (len > max_length) max_length = len;
-        }
+    size_t max_length = 0;
+    for (const auto &ext : extensions) {
+        max_length = std::max(max_length, std::strlen(ext.extensionName));
     }
 
     ObjectWrapper obj(p, layer_name + " Extensions", extensions.size());
+    if (do_indent) p.IndentDecrease();
     for (auto &ext : extensions) {
         p.PrintExtension(ext.extensionName, ext.specVersion, max_length);
     }
+    if (do_indent) p.IndentIncrease();
+}
+void DumpExtensions(Printer &p, std::string layer_name, 
std::vector<VkExtensionProperties> extensions) {
+    DumpExtensions(p, layer_name, extensions, false);
 }
-
 void DumpLayers(Printer &p, std::vector<LayerExtensionList> layers, const 
std::vector<std::unique_ptr<AppGpu>> &gpus) {
     std::sort(layers.begin(), layers.end(), [](LayerExtensionList &left, 
LayerExtensionList &right) -> int {
-        const char *a = left.layer_properties.layerName;
-        const char *b = right.layer_properties.layerName;
-        return a && (!b || std::strcmp(a, b) < 0);
+        return std::strncmp(left.layer_properties.layerName, 
right.layer_properties.layerName, VK_MAX_DESCRIPTION_SIZE) < 0;
     });
     switch (p.Type()) {
         case OutputType::text:
@@ -705,6 +703,69 @@
     GpuDevDumpJson(p, gpu);
 }
 
+// Print summary of system
+void DumpSummaryInstance(Printer &p, AppInstance &inst) {
+    p.SetSubHeader();
+    DumpExtensions(p, "Instance", inst.global_extensions, true);
+    p.AddNewline();
+
+    p.SetSubHeader();
+    ArrayWrapper arr(p, "Instance Layers", inst.global_layers.size());
+    IndentWrapper indent(p);
+    std::sort(inst.global_layers.begin(), inst.global_layers.end(), 
[](LayerExtensionList &left, LayerExtensionList &right) -> int {
+        return std::strncmp(left.layer_properties.layerName, 
right.layer_properties.layerName, VK_MAX_DESCRIPTION_SIZE) < 0;
+    });
+    size_t layer_name_max = 0;
+    size_t layer_desc_max = 0;
+    size_t layer_version_max = 0;
+
+    // find max of each type to align everything in columns
+    for (auto &layer : inst.global_layers) {
+        auto props = layer.layer_properties;
+        layer_name_max = std::max(layer_name_max, strlen(props.layerName));
+        layer_desc_max = std::max(layer_desc_max, strlen(props.description));
+        layer_version_max = std::max(layer_version_max, 
VkVersionString(layer.layer_properties.specVersion).size());
+    }
+    for (auto &layer : inst.global_layers) {
+        auto v_str = VkVersionString(layer.layer_properties.specVersion);
+        auto props = layer.layer_properties;
+
+        auto name_padding = std::string(layer_name_max - 
strlen(props.layerName), ' ');
+        auto desc_padding = std::string(layer_desc_max - 
strlen(props.description), ' ');
+        auto version_padding = std::string(layer_version_max - v_str.size(), ' 
');
+        p.PrintString(std::string(props.layerName) + name_padding + " " + 
props.description + desc_padding + " " + v_str + " " +
+                      version_padding + " version " + 
std::to_string(props.implementationVersion));
+    }
+    p.AddNewline();
+}
+
+void DumpSummaryGPU(Printer &p, AppGpu &gpu) {
+    ObjectWrapper obj(p, "GPU" + std::to_string(gpu.id));
+    auto props = gpu.GetDeviceProperties();
+    p.PrintKeyValue("apiVersion", props.apiVersion, 18, 
VkVersionString(props.apiVersion));
+    p.PrintKeyValue("driverVersion", props.driverVersion, 18, 
to_hex_str(props.driverVersion));
+    p.PrintKeyString("vendorID", to_hex_str(props.vendorID), 18);
+    p.PrintKeyString("deviceID", to_hex_str(props.deviceID), 18);
+    p.PrintKeyString("deviceType", 
VkPhysicalDeviceTypeString(props.deviceType), 18);
+    p.PrintKeyString("deviceName", props.deviceName, 18);
+
+    if 
(gpu.inst.CheckExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)
 &&
+        
(gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME)
 || gpu.api_version.minor >= 2)) {
+        void *place = gpu.props2.pNext;
+        while (place) {
+            struct VkStructureHeader *structure = (struct VkStructureHeader 
*)place;
+            if (structure->sType == 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES) {
+                VkPhysicalDeviceDriverProperties *props = 
(VkPhysicalDeviceDriverProperties *)structure;
+                DumpVkDriverId(p, "driverID", props->driverID, 18);
+                p.PrintKeyString("driverName", props->driverName, 18);
+                p.PrintKeyString("driverInfo", props->driverInfo, 18);
+                DumpVkConformanceVersion(p, "conformanceVersion", 
props->conformanceVersion, 18);
+            }
+            place = structure->pNext;
+        }
+    }
+}
+
 // ============ Printing Logic ============= //
 
 #ifdef _WIN32
@@ -749,6 +810,7 @@
     std::cout << "--show-formats        Display the format properties of each 
physical device.\n";
     std::cout << "                      Note: This option does not affect html 
or json output;\n";
     std::cout << "                      they will always print format 
properties.\n\n";
+    std::cout << "--summary             Show a summary of the instance and 
GPU's on a system.\n\n";
 }
 
 int main(int argc, char **argv) {
@@ -780,6 +842,8 @@
             }
             human_readable_output = false;
             json_output = true;
+        } else if (strcmp(argv[i], "--summary") == 0) {
+            summary = true;
         } else if (strcmp(argv[i], "--html") == 0) {
             human_readable_output = false;
             html_output = true;
@@ -808,8 +872,9 @@
         auto phys_devices = instance.FindPhysicalDevices();
 
         std::vector<std::unique_ptr<AppSurface>> surfaces;
-#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR)
+#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR) || \
+    defined(VK_USE_PLATFORM_DIRECTFB_EXT)
         for (auto &surface_extension : instance.surface_extensions) {
             surface_extension.create_window(instance);
             surface_extension.surface = 
surface_extension.create_surface(instance);
@@ -854,7 +919,15 @@
         }
 
         for (auto &p : printers) {
-            if (p->Type() == OutputType::json) {
+            if (summary) {
+                DumpSummaryInstance(*p.get(), instance);
+                p->SetHeader();
+                ObjectWrapper obj(*p, "Devices");
+                IndentWrapper indent(*p);
+                for (auto &gpu : gpus) {
+                    DumpSummaryGPU(*p.get(), *gpu.get());
+                }
+            } else if (p->Type() == OutputType::json) {
                 DumpLayers(*p.get(), instance.global_layers, gpus);
                 DumpGpuJson(*p.get(), *gpus.at(selected_gpu).get());
 
@@ -865,8 +938,9 @@
 
                 DumpLayers(*p.get(), instance.global_layers, gpus);
 
-#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR)
+#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR) || \
+    defined(VK_USE_PLATFORM_DIRECTFB_EXT)
                 DumpPresentableSurfaces(*p.get(), instance, gpus, surfaces);
 #endif
                 DumpGroups(*p.get(), instance);
@@ -881,8 +955,9 @@
             }
         }
 
-#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR)
+#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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR) || \
+    defined(VK_USE_PLATFORM_DIRECTFB_EXT)
 
         for (auto &surface_extension : instance.surface_extensions) {
             AppDestroySurface(instance, surface_extension.surface);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.h 
new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.h
--- old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.h    2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.h    2020-08-18 
05:43:44.000000000 +0200
@@ -57,7 +57,11 @@
 #if defined(_WIN32)
 #include <fcntl.h>
 #include <io.h>
+#define NOMINMAX
 #include <windows.h>
+#if _MSC_VER == 1900
+#pragma warning(disable : 4800)
+#endif
 #endif  // _WIN32
 
 #if defined(__linux__) || defined(__APPLE__)
@@ -107,6 +111,7 @@
 bool html_output = false;
 bool json_output = false;
 bool vkconfig_output = false;
+bool summary = false;
 
 #ifdef _WIN32
 
@@ -240,6 +245,7 @@
         if (err) THROW_VK_ERR(func_name, err);
         results.resize(count, init);
         err = f(ts..., &count, results.data());
+        results.resize(count);
     } while (err == VK_INCOMPLETE);
     if (err) THROW_VK_ERR(func_name, err);
     return results;
@@ -341,6 +347,13 @@
     PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR 
fp_vkGetPhysicalDeviceWaylandPresentationSupportKHR =
         APPLE_FP(vkGetPhysicalDeviceWaylandPresentationSupportKHR);
 #endif  // VK_USE_PLATFORM_WAYLAND_KHR
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    PFN_vkCreateDirectFBSurfaceEXT fp_vkCreateDirectFBSurfaceEXT = 
APPLE_FP(vkCreateDirectFBSurfaceEXT);
+#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT 
fp_vkGetPhysicalDeviceDirectFBPresentationSupportEXT =
+        APPLE_FP(vkGetPhysicalDeviceDirectFBPresentationSupportEXT);
+#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
     PFN_vkCreateAndroidSurfaceKHR fp_vkCreateAndroidSurfaceKHR = 
APPLE_FP(vkCreateAndroidSurfaceKHR);
 #endif  // VK_USE_PLATFORM_ANDROID_KHR
@@ -407,6 +420,12 @@
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
         Load(fp_vkGetPhysicalDeviceWaylandPresentationSupportKHR, 
"vkGetPhysicalDeviceWaylandPresentationSupportKHR");
 #endif  // VK_USE_PLATFORM_WAYLAND_KHR
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+        Load(fp_vkCreateDirectFBSurfaceEXT, "vkCreateDirectFBSurfaceEXT");
+#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+        Load(fp_vkGetPhysicalDeviceDirectFBPresentationSupportEXT, 
"vkGetPhysicalDeviceDirectFBPresentationSupportEXT");
+#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
         Load(fp_vkCreateAndroidSurfaceKHR, "vkCreateAndroidSurfaceKHR");
 #endif  // VK_USE_PLATFORM_ANDROID_KHR
@@ -593,6 +612,10 @@
     wl_display *wayland_display;
     wl_surface *wayland_surface;
 #endif
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    IDirectFB *dfb;
+    IDirectFBSurface *directfb_surface;
+#endif
 #ifdef VK_USE_PLATFORM_ANDROID_KHR  // TODO
     ANativeWindow *window;
 #endif
@@ -772,7 +795,7 @@
 
 #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_METAL_EXT) 
|| defined(VK_USE_PLATFORM_WAYLAND_KHR) || \
-    defined(VK_USE_PLATFORM_ANDROID_KHR)
+    defined(VK_USE_PLATFORM_DIRECTFB_EXT) || 
defined(VK_USE_PLATFORM_ANDROID_KHR)
 static void AppDestroySurface(AppInstance &inst, VkSurfaceKHR surface) {  // 
same for all platforms
     inst.dll.fp_vkDestroySurfaceKHR(inst.instance, surface, nullptr);
 }
@@ -978,6 +1001,53 @@
 #endif  // VK_USE_PLATFORM_WAYLAND_KHR
 //-----------------------------------------------------------
 
+//-------------------------DIRECTFB--------------------------
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+static void AppCreateDirectFBWindow(AppInstance &inst) {
+    DFBResult ret;
+
+    ret = DirectFBInit(NULL, NULL);
+    if (ret) {
+        THROW_ERR("DirectFBInit failed to initialize DirectFB.\nExiting...");
+    }
+
+    ret = DirectFBCreate(&inst.dfb);
+    if (ret) {
+        THROW_ERR("DirectFBCreate failed to create main interface of 
DirectFB.\nExiting...");
+    }
+
+    DFBSurfaceDescription desc;
+    desc.flags = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS | DSDESC_WIDTH | 
DSDESC_HEIGHT);
+    desc.caps = DSCAPS_PRIMARY;
+    desc.width = inst.width;
+    desc.height = inst.height;
+    ret = inst.dfb->CreateSurface(inst.dfb, &desc, &inst.directfb_surface);
+    if (ret) {
+        THROW_ERR("CreateSurface failed to create DirectFB surface 
interface.\nExiting...");
+    }
+}
+
+static VkSurfaceKHR AppCreateDirectFBSurface(AppInstance &inst) {
+    VkDirectFBSurfaceCreateInfoEXT createInfo;
+    createInfo.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
+    createInfo.pNext = nullptr;
+    createInfo.flags = 0;
+    createInfo.dfb = inst.dfb;
+    createInfo.surface = inst.directfb_surface;
+
+    VkSurfaceKHR surface;
+    VkResult err = inst.dll.fp_vkCreateDirectFBSurfaceEXT(inst.instance, 
&createInfo, nullptr, &surface);
+    if (err) THROW_VK_ERR("vkCreateDirectFBSurfaceEXT", err);
+    return surface;
+}
+
+static void AppDestroyDirectFBWindow(AppInstance &inst) {
+    inst.directfb_surface->Release(inst.directfb_surface);
+    inst.dfb->Release(inst.dfb);
+}
+#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
+//-----------------------------------------------------------
+
 //-------------------------ANDROID---------------------------
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
 static void AppCreateAndroidWindow(AppInstance &inst) {}
@@ -1091,6 +1161,18 @@
         }
     }
 #endif
+//--DIRECTFB--
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    SurfaceExtension surface_ext_directfb;
+    if (inst.CheckExtensionEnabled(VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME)) {
+        surface_ext_directfb.name = VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME;
+        surface_ext_directfb.create_window = AppCreateDirectFBWindow;
+        surface_ext_directfb.create_surface = AppCreateDirectFBSurface;
+        surface_ext_directfb.destroy_window = AppDestroyDirectFBWindow;
+
+        inst.AddSurfaceExtension(surface_ext_directfb);
+    }
+#endif
 //--ANDROID--
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
     SurfaceExtension surface_ext_android;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.md 
new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.md
--- old/Vulkan-Tools-1.2.148/vulkaninfo/vulkaninfo.md   2020-07-20 
22:47:26.000000000 +0200
+++ new/Vulkan-Tools-1.2.151/vulkaninfo/vulkaninfo.md   2020-08-18 
05:43:44.000000000 +0200
@@ -66,7 +66,7 @@
 --show-formats        Display the format properties of each physical device.
                       Note: This option does not affect html or json output;
                       they will always print format properties.
-
+--summary             Show a summary of the instance and GPU's on a system.
 ```
 
 ### Windows


Reply via email to