intel: add generic object creation function

Add and use intel_base_create() for all objects deriving from intel_base.
diff --git a/icd/intel/fence.c b/icd/intel/fence.c
index 842f134..a90a991 100644
--- a/icd/intel/fence.c
+++ b/icd/intel/fence.c
@@ -39,25 +39,13 @@
 {
     struct intel_fence *fence;
 
-    fence = icd_alloc(sizeof(*fence), 0, XGL_SYSTEM_ALLOC_API_OBJECT);
+    fence = (struct intel_fence *) intel_base_create(sizeof(*fence),
+            dev->base.dbg, XGL_DBG_OBJECT_FENCE, info, 0);
     if (!fence)
         return XGL_ERROR_OUT_OF_MEMORY;
 
-    memset(fence, 0, sizeof(*fence));
-
     fence->obj.destroy = fence_destroy;
 
-    fence->obj.base.dispatch = dev->base.dispatch;
-    if (dev->base.dbg) {
-        fence->obj.base.dbg =
-            intel_base_dbg_create(XGL_DBG_OBJECT_FENCE, info, 0);
-        if (!fence->obj.base.dbg) {
-            icd_free(fence);
-            return XGL_ERROR_OUT_OF_MEMORY;
-        }
-    }
-    fence->obj.base.get_info = intel_base_get_info;
-
     *fence_ret = fence;
 
     return XGL_SUCCESS;
@@ -68,10 +56,7 @@
     if (fence->submitted_bo)
         intel_bo_unreference(fence->submitted_bo);
 
-    if (fence->obj.base.dbg)
-        intel_base_dbg_destroy(fence->obj.base.dbg);
-
-    icd_free(fence);
+    intel_base_destroy(&fence->obj.base);
 }
 
 XGL_RESULT intel_fence_get_status(struct intel_fence *fence)