diff options
author | Keith Packard <keithp@keithp.com> | 2017-05-17 23:05:06 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2017-05-17 23:05:06 -0700 |
commit | 49092afa24182dd72bb11cc5eac756a871182d30 (patch) | |
tree | 53a95df20fa2fb64a6b070415166fbb60b17db1b | |
parent | a695f807289cec3c29caf5cc7ddf39eea8167f66 (diff) |
Add code to use VK_KEITHP_kms_display extension
Open the DRM render node for now; we'll get a lease later on.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | cube.c | 16 |
2 files changed, 17 insertions, 1 deletions
@@ -15,7 +15,7 @@ GLSV=glslangValidator SPV=cube-vert.spv cube-frag.spv -CFLAGS=-O0 -g -DVK_USE_PLATFORM_XCB_KHR -I/local/xorg/include +CFLAGS=-O0 -g -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_KMS_KEITHP -I/local/xorg/include -I/local/xorg/include/libdrm all: $(TARGET) $(SPV) @@ -33,6 +33,9 @@ #include <stdbool.h> #include <assert.h> #include <signal.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> #if defined(VK_USE_PLATFORM_XLIB_KHR) || defined(VK_USE_PLATFORM_XCB_KHR) #include <X11/Xutil.h> #endif @@ -3074,6 +3077,7 @@ static void demo_init_vk(struct demo *demo) { /* Look for instance extensions */ VkBool32 surfaceExtFound = 0; VkBool32 platformSurfaceExtFound = 0; + VkBool32 kmsExtFound = 0; memset(demo->extension_names, 0, sizeof(demo->extension_names)); err = vkEnumerateInstanceExtensionProperties( @@ -3147,6 +3151,11 @@ static void demo_init_vk(struct demo *demo) { demo->extension_names[demo->enabled_extension_count++] = VK_MVK_MACOS_SURFACE_EXTENSION_NAME; } #endif + if (!strcmp(VK_KEITHP_KMS_DISPLAY_EXTENSION_NAME, + instance_extensions[i].extensionName)) { + printf("found kms display extension\n"); + demo->extension_names[demo->enabled_extension_count++] = VK_KEITHP_KMS_DISPLAY_EXTENSION_NAME; + } if (!strcmp(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, instance_extensions[i].extensionName)) { if (demo->validate) { @@ -3298,6 +3307,12 @@ static void demo_init_vk(struct demo *demo) { "vkCreateInstance Failure"); } + VkKmsDisplayInfoKEITHP display_info = { + .fd = open("/dev/dri/renderD128", 2), + }; + + vkSetKmsDisplayInfoKEITHP(demo->inst, &display_info); + /* Make initial call to query gpu_count, then second call for gpu info*/ err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, NULL); assert(!err && gpu_count > 0); @@ -3316,6 +3331,7 @@ static void demo_init_vk(struct demo *demo) { "additional information.\n", "vkEnumeratePhysicalDevices Failure"); } + close(display_info.fd); /* Look for device extensions */ uint32_t device_extension_count = 0; |