summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-05-17 23:05:06 -0700
committerKeith Packard <keithp@keithp.com>2017-05-17 23:05:06 -0700
commit49092afa24182dd72bb11cc5eac756a871182d30 (patch)
tree53a95df20fa2fb64a6b070415166fbb60b17db1b
parenta695f807289cec3c29caf5cc7ddf39eea8167f66 (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--Makefile2
-rw-r--r--cube.c16
2 files changed, 17 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 475c788..91544e4 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/cube.c b/cube.c
index 4db3d91..2f94711 100644
--- a/cube.c
+++ b/cube.c
@@ -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;