summaryrefslogtreecommitdiff
path: root/lib/mesa/src/vulkan/util
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2019-01-29 11:08:07 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2019-01-29 11:08:07 +0000
commit6b139c2063623e9310025247cd966490b9aa57ea (patch)
tree375acfd898ca3d721250aa17291bbb90a8d7250a /lib/mesa/src/vulkan/util
parentcce99579dcfb1d54c54cff65573be3430e77f2c5 (diff)
Import Mesa 18.3.2
Diffstat (limited to 'lib/mesa/src/vulkan/util')
-rw-r--r--lib/mesa/src/vulkan/util/meson.build45
-rw-r--r--lib/mesa/src/vulkan/util/vk_debug_report.c122
-rw-r--r--lib/mesa/src/vulkan/util/vk_debug_report.h72
3 files changed, 239 insertions, 0 deletions
diff --git a/lib/mesa/src/vulkan/util/meson.build b/lib/mesa/src/vulkan/util/meson.build
new file mode 100644
index 000000000..15e4ff491
--- /dev/null
+++ b/lib/mesa/src/vulkan/util/meson.build
@@ -0,0 +1,45 @@
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+files_vulkan_util = files(
+ 'vk_alloc.h',
+ 'vk_debug_report.c',
+ 'vk_debug_report.h',
+ 'vk_util.c',
+ 'vk_util.h',
+)
+
+vk_enum_to_str = custom_target(
+ 'vk_enum_to_str',
+ input : ['gen_enum_to_str.py', vk_api_xml[0]],
+ output : ['vk_enum_to_str.c', 'vk_enum_to_str.h'],
+ command : [
+ prog_python, '@INPUT0@', '--xml', '@INPUT1@', '--outdir',
+ meson.current_build_dir()
+ ],
+)
+
+libvulkan_util = static_library(
+ 'vulkan_util',
+ [files_vulkan_util, vk_enum_to_str],
+ include_directories : [inc_common, inc_vulkan],
+ c_args : [c_vis_args],
+ build_by_default : false,
+)
diff --git a/lib/mesa/src/vulkan/util/vk_debug_report.c b/lib/mesa/src/vulkan/util/vk_debug_report.c
new file mode 100644
index 000000000..22ae4a7d9
--- /dev/null
+++ b/lib/mesa/src/vulkan/util/vk_debug_report.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright © 2017 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "vk_debug_report.h"
+
+#include "vk_alloc.h"
+#include "vk_util.h"
+
+VkResult vk_debug_report_instance_init(struct vk_debug_report_instance *instance)
+{
+ if (pthread_mutex_init(&instance->callbacks_mutex, NULL) != 0) {
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+
+ list_inithead(&instance->callbacks);
+
+ return VK_SUCCESS;
+}
+
+void vk_debug_report_instance_destroy(struct vk_debug_report_instance *instance)
+{
+ pthread_mutex_destroy(&instance->callbacks_mutex);
+}
+
+VkResult
+vk_create_debug_report_callback(struct vk_debug_report_instance *instance,
+ const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ const VkAllocationCallbacks* instance_allocator,
+ VkDebugReportCallbackEXT* pCallback)
+{
+
+ struct vk_debug_report_callback *cb =
+ vk_alloc2(instance_allocator, pAllocator,
+ sizeof(struct vk_debug_report_callback), 8,
+ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+
+ if (!cb)
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+ cb->flags = pCreateInfo->flags;
+ cb->callback = pCreateInfo->pfnCallback;
+ cb->data = pCreateInfo->pUserData;
+
+ pthread_mutex_lock(&instance->callbacks_mutex);
+ list_addtail(&cb->link, &instance->callbacks);
+ pthread_mutex_unlock(&instance->callbacks_mutex);
+
+ *pCallback = (VkDebugReportCallbackEXT)(uintptr_t)cb;
+
+ return VK_SUCCESS;
+}
+
+void
+vk_destroy_debug_report_callback(struct vk_debug_report_instance *instance,
+ VkDebugReportCallbackEXT _callback,
+ const VkAllocationCallbacks* pAllocator,
+ const VkAllocationCallbacks* instance_allocator)
+{
+ struct vk_debug_report_callback *callback =
+ (struct vk_debug_report_callback *)(uintptr_t)_callback;
+
+ /* Remove from list and destroy given callback. */
+ pthread_mutex_lock(&instance->callbacks_mutex);
+ list_del(&callback->link);
+ vk_free2(instance_allocator, pAllocator, callback);
+ pthread_mutex_unlock(&instance->callbacks_mutex);
+}
+
+
+void
+vk_debug_report(struct vk_debug_report_instance *instance,
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT object_type,
+ uint64_t handle,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char *pMessage)
+{
+ /* Allow NULL for convinience, return if no callbacks registered. */
+ if (!instance || list_empty(&instance->callbacks))
+ return;
+
+ pthread_mutex_lock(&instance->callbacks_mutex);
+
+ /* Section 33.2 of the Vulkan 1.0.59 spec says:
+ *
+ * "callback is an externally synchronized object and must not be
+ * used on more than one thread at a time. This means that
+ * vkDestroyDebugReportCallbackEXT must not be called when a callback
+ * is active."
+ */
+ list_for_each_entry(struct vk_debug_report_callback, cb,
+ &instance->callbacks, link) {
+ if (cb->flags & flags)
+ cb->callback(flags, object_type, handle, location, messageCode,
+ pLayerPrefix, pMessage, cb->data);
+ }
+
+ pthread_mutex_unlock(&instance->callbacks_mutex);
+}
diff --git a/lib/mesa/src/vulkan/util/vk_debug_report.h b/lib/mesa/src/vulkan/util/vk_debug_report.h
new file mode 100644
index 000000000..625ecbb69
--- /dev/null
+++ b/lib/mesa/src/vulkan/util/vk_debug_report.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2018, Google Inc.
+ *
+ * based on the anv driver which is:
+ * Copyright © 2017 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+#ifndef VK_DEBUG_REPORT_H
+#define VK_DEBUG_REPORT_H
+
+#include <pthread.h>
+
+#include "util/list.h"
+#include <vulkan/vulkan.h>
+
+struct vk_debug_report_callback {
+ /* Link in the 'callbacks' list in anv_instance struct. */
+ struct list_head link;
+ VkDebugReportFlagsEXT flags;
+ PFN_vkDebugReportCallbackEXT callback;
+ void * data;
+};
+
+struct vk_debug_report_instance {
+ /* VK_EXT_debug_report debug callbacks */
+ pthread_mutex_t callbacks_mutex;
+ struct list_head callbacks;
+};
+
+VkResult vk_debug_report_instance_init(struct vk_debug_report_instance *instance);
+void vk_debug_report_instance_destroy(struct vk_debug_report_instance *instance);
+
+VkResult
+vk_create_debug_report_callback(struct vk_debug_report_instance *instance,
+ const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ const VkAllocationCallbacks* instance_allocator,
+ VkDebugReportCallbackEXT* pCallback);
+void
+vk_destroy_debug_report_callback(struct vk_debug_report_instance *instance,
+ VkDebugReportCallbackEXT _callback,
+ const VkAllocationCallbacks* pAllocator,
+ const VkAllocationCallbacks* instance_allocator);
+
+void
+vk_debug_report(struct vk_debug_report_instance *instance,
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT object_type,
+ uint64_t handle,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char *pMessage);
+#endif