memory alloc: Add IMAGE and BUFFER alloc info structures

For images have the tests fill in the IMAGE_ALLOC structures.  For buffers
this is not yet done.

Conflicts:
	demos/cube.c
	demos/tri.c
	include/xgl.h
	tests/init.cpp
	tests/xgltestbinding.cpp
diff --git a/icd/intel/obj.c b/icd/intel/obj.c
index eb502e7..67ddeb1 100644
--- a/icd/intel/obj.c
+++ b/icd/intel/obj.c
@@ -67,6 +67,20 @@
         count = (XGL_UINT *) data;
         *count = 1;
         break;
+    case XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS:
+        s = sizeof(XGL_IMAGE_MEMORY_REQUIREMENTS);
+        *size = s;
+        if (data == NULL)
+            return ret;
+        memset(data, 0, s);
+        break;
+    case XGL_INFO_TYPE_BUFFER_MEMORY_REQUIREMENTS:
+        s = sizeof(XGL_BUFFER_MEMORY_REQUIREMENTS);
+        *size = s;
+        if (data == NULL)
+            return ret;
+        memset(data, 0, s);
+        break;
     default:
         ret = XGL_ERROR_INVALID_VALUE;
         break;
@@ -96,7 +110,6 @@
         break;
     case XGL_DBG_OBJECT_GPU_MEMORY:
         assert(info.header->struct_type == XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO);
-        shallow_copy = sizeof(XGL_MEMORY_ALLOC_INFO);
         break;
     case XGL_DBG_OBJECT_EVENT:
         assert(info.header->struct_type == XGL_STRUCTURE_TYPE_EVENT_CREATE_INFO);
@@ -202,6 +215,57 @@
         memcpy(dbg->create_info, create_info, shallow_copy);
         dbg->create_info_size = shallow_copy;
     } else if (info.header->struct_type ==
+            XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO) {
+        XGL_SIZE size;
+        const XGL_MEMORY_ALLOC_INFO *ptr_next, *src = info.ptr;
+        XGL_MEMORY_ALLOC_INFO *dst;
+        uint8_t *d;
+        size = sizeof(*src);
+
+        ptr_next = src->pNext;
+        while (ptr_next != NULL) {
+            switch (ptr_next->sType) {
+                case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO:
+                    size += sizeof(XGL_MEMORY_ALLOC_IMAGE_INFO);
+                    break;
+                case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO:
+                    size += sizeof(XGL_MEMORY_ALLOC_BUFFER_INFO);
+                    break;
+                default:
+                    intel_dev_log(dbg->dev, XGL_DBG_MSG_ERROR,
+                          XGL_VALIDATION_LEVEL_0, XGL_NULL_HANDLE, 0, 0,
+                          "Invalid Memory Alloc Create Info type: 0x%x",
+                          ptr_next->sType);
+                    return false;
+            }
+            ptr_next = (XGL_MEMORY_ALLOC_INFO *) ptr_next->pNext;
+        }
+        dbg->create_info_size = size;
+        dst = icd_alloc(size, 0, XGL_SYSTEM_ALLOC_DEBUG);
+        if (!dst)
+            return false;
+        memcpy(dst, src, sizeof(*src));
+
+        ptr_next = src->pNext;
+        d = (uint8_t *) dst;
+        d += sizeof(*src);
+        while (ptr_next != NULL) {
+            switch (ptr_next->sType) {
+            case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO:
+                memcpy(d, ptr_next, sizeof(XGL_MEMORY_ALLOC_IMAGE_INFO));
+                d += sizeof(XGL_MEMORY_ALLOC_IMAGE_INFO);
+                break;
+            case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO:
+                memcpy(d, ptr_next, sizeof(XGL_MEMORY_ALLOC_BUFFER_INFO));
+                d += sizeof(XGL_MEMORY_ALLOC_BUFFER_INFO);
+                break;
+            default:
+                return false;
+            }
+            ptr_next = (XGL_MEMORY_ALLOC_INFO *) ptr_next->pNext;
+        }
+        dbg->create_info = dst;
+    } else if (info.header->struct_type ==
             XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO) {
         const XGL_DEVICE_CREATE_INFO *src = info.ptr;
         XGL_DEVICE_CREATE_INFO *dst;