[metacity] vulkan: enumerate instance layers and extensions
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] vulkan: enumerate instance layers and extensions
- Date: Fri, 10 Mar 2017 20:22:21 +0000 (UTC)
commit a9ae64c1bbafdb0042b70cabc9a3bcf1d529b89d
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Fri Mar 10 17:16:30 2017 +0200
vulkan: enumerate instance layers and extensions
src/compositor/meta-compositor-vulkan.c | 117 +++++++++++++++++++++++++++++++
src/core/util.c | 5 +-
src/include/util.h | 3 +-
3 files changed, 123 insertions(+), 2 deletions(-)
---
diff --git a/src/compositor/meta-compositor-vulkan.c b/src/compositor/meta-compositor-vulkan.c
index 69165b2..4108242 100644
--- a/src/compositor/meta-compositor-vulkan.c
+++ b/src/compositor/meta-compositor-vulkan.c
@@ -17,7 +17,13 @@
#include "config.h"
+#ifdef HAVE_VULKAN
+#define VK_USE_PLATFORM_XLIB_KHR
+#include <vulkan/vulkan.h>
+#endif
+
#include "meta-compositor-vulkan.h"
+#include "util.h"
struct _MetaCompositorVulkan
{
@@ -26,11 +32,122 @@ struct _MetaCompositorVulkan
G_DEFINE_TYPE (MetaCompositorVulkan, meta_compositor_vulkan, META_TYPE_COMPOSITOR)
+#ifdef HAVE_VULKAN
+static void
+enumerate_instance_layers (MetaCompositorVulkan *vulkan)
+{
+ uint32_t n_layers;
+ VkLayerProperties *layers;
+ VkResult result;
+ uint32_t i;
+
+ if (!meta_check_debug_flags (META_DEBUG_VULKAN))
+ return;
+
+ result = vkEnumerateInstanceLayerProperties (&n_layers, NULL);
+
+ if (result != VK_SUCCESS)
+ {
+ meta_topic (META_DEBUG_VULKAN,
+ "Failed to enumerate instance layer properties\n");
+
+ return;
+ }
+
+ layers = g_new0 (VkLayerProperties, n_layers);
+ result = vkEnumerateInstanceLayerProperties (&n_layers, layers);
+
+ if (result != VK_SUCCESS)
+ {
+ meta_topic (META_DEBUG_VULKAN,
+ "Failed to enumerate instance layer properties\n");
+
+ g_free (layers);
+ return;
+ }
+
+ meta_topic (META_DEBUG_VULKAN, "Available instance layers:\n");
+ meta_push_no_msg_prefix ();
+
+ for (i = 0; i < n_layers; i++)
+ {
+ meta_topic (META_DEBUG_VULKAN, " %s v%u.%u.%u (%s)\n",
+ layers[i].layerName,
+ VK_VERSION_MAJOR (layers[i].specVersion),
+ VK_VERSION_MINOR (layers[i].specVersion),
+ VK_VERSION_PATCH (layers[i].specVersion),
+ layers[i].description);
+ }
+
+ meta_pop_no_msg_prefix ();
+
+ g_free (layers);
+}
+
+static void
+enumerate_instance_extensions (MetaCompositorVulkan *vulkan)
+{
+ uint32_t n_extensions;
+ VkExtensionProperties *extensions;
+ VkResult result;
+ uint32_t i;
+
+ if (!meta_check_debug_flags (META_DEBUG_VULKAN))
+ return;
+
+ result = vkEnumerateInstanceExtensionProperties (NULL, &n_extensions, NULL);
+
+ if (result != VK_SUCCESS)
+ {
+ meta_topic (META_DEBUG_VULKAN,
+ "Failed to enumerate instance extension properties\n");
+
+ return;
+ }
+
+ extensions = g_new0 (VkExtensionProperties, n_extensions);
+ result = vkEnumerateInstanceExtensionProperties (NULL, &n_extensions,
+ extensions);
+
+ if (result != VK_SUCCESS)
+ {
+ meta_topic (META_DEBUG_VULKAN,
+ "Failed to enumerate instance extension properties\n");
+
+ g_free (extensions);
+ return;
+ }
+
+ meta_topic (META_DEBUG_VULKAN, "Available instance extensions:\n");
+ meta_push_no_msg_prefix ();
+
+ for (i = 0; i < n_extensions; i++)
+ {
+ meta_topic (META_DEBUG_VULKAN, " %s v%u.%u.%u\n",
+ extensions[i].extensionName,
+ VK_VERSION_MAJOR (extensions[i].specVersion),
+ VK_VERSION_MINOR (extensions[i].specVersion),
+ VK_VERSION_PATCH (extensions[i].specVersion));
+ }
+
+ meta_pop_no_msg_prefix ();
+
+ g_free (extensions);
+}
+#endif
+
static gboolean
meta_compositor_vulkan_manage (MetaCompositor *compositor,
GError **error)
{
#ifdef HAVE_VULKAN
+ MetaCompositorVulkan *vulkan;
+
+ vulkan = META_COMPOSITOR_VULKAN (compositor);
+
+ enumerate_instance_layers (vulkan);
+ enumerate_instance_extensions (vulkan);
+
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Not implemented");
return FALSE;
diff --git a/src/core/util.c b/src/core/util.c
index 790cda0..b2e4deb 100644
--- a/src/core/util.c
+++ b/src/core/util.c
@@ -55,7 +55,8 @@ static const GDebugKey debug_keys[] = {
{ "resizing", META_DEBUG_RESIZING },
{ "shapes", META_DEBUG_SHAPES },
{ "edge-resistance", META_DEBUG_EDGE_RESISTANCE },
- { "verbose", META_DEBUG_VERBOSE }
+ { "verbose", META_DEBUG_VERBOSE },
+ { "vulkan", META_DEBUG_VULKAN }
};
static guint debug_flags = 0;
@@ -281,6 +282,8 @@ topic_name (MetaDebugFlags topic)
return "EDGE_RESISTANCE";
case META_DEBUG_VERBOSE:
return "VERBOSE";
+ case META_DEBUG_VULKAN:
+ return "VULKAN";
default:
break;
}
diff --git a/src/include/util.h b/src/include/util.h
index 0090177..2fdd038 100644
--- a/src/include/util.h
+++ b/src/include/util.h
@@ -48,7 +48,8 @@ typedef enum
META_DEBUG_RESIZING = 1 << 16,
META_DEBUG_SHAPES = 1 << 17,
META_DEBUG_EDGE_RESISTANCE = 1 << 18,
- META_DEBUG_VERBOSE = 1 << 19
+ META_DEBUG_VERBOSE = 1 << 19,
+ META_DEBUG_VULKAN = 1 << 20
} MetaDebugFlags;
void meta_init_debug (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]