intel: add intel_{alloc,free,logv,log}()
authorChia-I Wu <olv@lunarg.com>
Mon, 19 Jan 2015 03:14:00 +0000 (11:14 +0800)
committerChia-I Wu <olv@lunarg.com>
Thu, 5 Mar 2015 21:20:31 +0000 (14:20 -0700)
They are per-instance equivalents of icd_{alloc,free,logv,log}().  They also
require us to embed a pointer to icd_instance in intel_handle.

icd/intel/gpu.c
icd/intel/instance.c
icd/intel/intel.h
icd/intel/obj.c

index 56cb8cb..09ab4d2 100644 (file)
@@ -35,6 +35,7 @@
 #include "kmd/winsys.h"
 #include "queue.h"
 #include "gpu.h"
+#include "instance.h"
 #include "wsi_x11.h"
 
 static const char * const intel_gpu_exts[INTEL_EXT_COUNT] = {
@@ -165,7 +166,7 @@ XGL_RESULT intel_gpu_create(const struct intel_instance *instance, int devid,
 
     memset(gpu, 0, sizeof(*gpu));
     /* there is no XGL_DBG_OBJECT_GPU */
-    intel_handle_init(&gpu->handle, XGL_DBG_OBJECT_UNKNOWN);
+    intel_handle_init(&gpu->handle, XGL_DBG_OBJECT_UNKNOWN, instance->icd);
 
     gpu->devid = devid;
 
index 6c6f061..1564e02 100644 (file)
@@ -128,7 +128,7 @@ static struct intel_instance *intel_instance_create(const XGL_APPLICATION_INFO *
     }
 
     memset(instance, 0, sizeof(*instance));
-    intel_handle_init(&instance->handle, XGL_DBG_OBJECT_INSTANCE);
+    intel_handle_init(&instance->handle, XGL_DBG_OBJECT_INSTANCE, icd);
 
     instance->icd = icd;
 
index ccd96ac..4fb47e1 100644 (file)
@@ -29,6 +29,8 @@
 #define INTEL_H
 
 #include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <string.h>
@@ -70,6 +72,7 @@ struct intel_handle {
     void *loader_data;
 
     uint32_t magic;
+    const struct icd_instance *icd;
 };
 
 extern int intel_debug;
@@ -77,11 +80,13 @@ extern int intel_debug;
 static const uint32_t intel_handle_magic = 0x494e544c;
 
 static inline void intel_handle_init(struct intel_handle *handle,
-                                     XGL_DBG_OBJECT_TYPE type)
+                                     XGL_DBG_OBJECT_TYPE type,
+                                     const struct icd_instance *icd)
 {
     set_loader_magic_value(handle);
 
     handle->magic = intel_handle_magic + type;
+    handle->icd = icd;
 }
 
 /**
@@ -111,4 +116,53 @@ static inline bool intel_handle_validate_type(const void *handle,
     return (handle_type == (uint32_t) type);
 }
 
+static inline void *intel_alloc(const void *handle,
+                                size_t size, size_t alignment,
+                                XGL_SYSTEM_ALLOC_TYPE type)
+{
+    assert(intel_handle_validate(handle));
+    return icd_instance_alloc(((const struct intel_handle *) handle)->icd,
+            size, alignment, type);
+}
+
+static inline void intel_free(const void *handle, void *ptr)
+{
+    assert(intel_handle_validate(handle));
+    icd_instance_free(((const struct intel_handle *) handle)->icd, ptr);
+}
+
+static inline void intel_logv(const void *handle,
+                              XGL_DBG_MSG_TYPE msg_type,
+                              XGL_VALIDATION_LEVEL validation_level,
+                              XGL_BASE_OBJECT src_object,
+                              size_t location, int32_t msg_code,
+                              const char *format, va_list ap)
+{
+    char msg[256];
+    int ret;
+
+    ret = vsnprintf(msg, sizeof(msg), format, ap);
+    if (ret >= sizeof(msg) || ret < 0)
+        msg[sizeof(msg) - 1] = '\0';
+
+    assert(intel_handle_validate(handle));
+    icd_instance_log(((const struct intel_handle *) handle)->icd,
+            msg_type, validation_level, src_object, location, msg_code, msg);
+}
+
+static inline void intel_log(const void *handle,
+                             XGL_DBG_MSG_TYPE msg_type,
+                             XGL_VALIDATION_LEVEL validation_level,
+                             XGL_BASE_OBJECT src_object,
+                             size_t location, int32_t msg_code,
+                             const char *format, ...)
+{
+    va_list ap;
+
+    va_start(ap, format);
+    intel_logv(handle, msg_type, validation_level, src_object,
+            location, msg_code, format, ap);
+    va_end(ap);
+}
+
 #endif /* INTEL_H */
index a5ffb04..a8fcd0a 100644 (file)
@@ -363,7 +363,7 @@ struct intel_base *intel_base_create(const struct intel_handle *handle,
         return NULL;
 
     memset(base, 0, obj_size);
-    intel_handle_init(&base->handle, type);
+    intel_handle_init(&base->handle, type, handle->icd);
 
     if (debug) {
         base->dbg = intel_base_dbg_create(handle,