aboutsummaryrefslogtreecommitdiff
path: root/loader/debug_report.c
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtneygo@google.com>2015-11-30 15:28:25 -0700
committerJon Ashburn <jon@lunarg.com>2015-12-17 11:20:06 -0700
commitfd150e9eb3ba16a0df0f817cc00087827e49efd7 (patch)
treefec4d8adb1c192d0c249988eb44a1561486015b4 /loader/debug_report.c
parentc0e34c259c07ab819529c7b1ca712127dd633949 (diff)
downloadusermoji-fd150e9eb3ba16a0df0f817cc00087827e49efd7.tar.xz
debug_report: Add DebugReportMessage function
Diffstat (limited to 'loader/debug_report.c')
-rw-r--r--loader/debug_report.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/loader/debug_report.c b/loader/debug_report.c
index 5ef00ebf..35c3bd7a 100644
--- a/loader/debug_report.c
+++ b/loader/debug_report.c
@@ -92,6 +92,39 @@ static VKAPI_ATTR VkResult VKAPI_CALL debug_report_CreateDebugReportCallback(
return result;
}
+// Utility function to handle reporting
+static inline VkBool32 debug_report_log_msg(
+ VkInstance instance,
+ VkFlags msgFlags,
+ VkDebugReportObjectTypeLUNARG objectType,
+ uint64_t srcObject,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ struct loader_instance *inst = loader_get_instance(instance);
+ VkBool32 bail = false;
+ VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
+ while (pTrav) {
+ if (pTrav->msgFlags & msgFlags) {
+ if (pTrav->pfnMsgCallback(msgFlags,
+ objectType, srcObject,
+ location,
+ msgCode,
+ pLayerPrefix,
+ pMsg,
+ (void *) pTrav->pUserData)) {
+ bail = true;
+ }
+ }
+ pTrav = pTrav->pNext;
+ }
+
+ return bail;
+}
+
+
static VKAPI_ATTR void VKAPI_CALL debug_report_DestroyDebugReportCallback(
VkInstance instance,
VkDebugReportCallbackLUNARG callback,
@@ -119,6 +152,21 @@ static VKAPI_ATTR void VKAPI_CALL debug_report_DestroyDebugReportCallback(
loader_platform_thread_unlock_mutex(&loader_lock);
}
+static VKAPI_ATTR void VKAPI_CALL debug_report_DebugReportMessage(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ struct loader_instance *inst = loader_get_instance(instance);
+
+ inst->disp->DebugReportMessageLUNARG(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+
+}
/*
* This is the instance chain terminator function
@@ -216,6 +264,37 @@ VKAPI_ATTR void loader_DestroyDebugReportCallback(VkInstance instance,
}
}
+
+/*
+ * This is the instance chain terminator function
+ * for DebugReportMessage
+ */
+VKAPI_ATTR void VKAPI_CALL loader_DebugReportMessage(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ const struct loader_icd *icd;
+ struct loader_instance *inst = loader_get_instance(instance);
+
+ for (icd = inst->icds; icd; icd = icd->next) {
+ if (icd->DebugReportMessageLUNARG != NULL) {
+ icd->DebugReportMessageLUNARG(icd->instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+ }
+ }
+
+ /*
+ * Now that all ICDs have seen the message, call the necessary callbacks.
+ * Ignoring "bail" return value as there is nothing to bail from at this point.
+ */
+ debug_report_log_msg(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+}
+
bool debug_report_instance_gpa(
struct loader_instance *ptr_instance,
const char* name,
@@ -233,5 +312,9 @@ bool debug_report_instance_gpa(
*addr = ptr_instance->debug_report_enabled ? (void *) debug_report_DestroyDebugReportCallback : NULL;
return true;
}
+ if (!strcmp("vkDebugReportMessageLUNARG", name)) {
+ *addr = ptr_instance->debug_report_enabled ? (void *) debug_report_DebugReportMessage : NULL;
+ return true;
+ }
return false;
}