xgl: Resource transition proposal from Bug 12904.

Added resource transition proposal from Bug 12904.
Updated function prototypes.
Added XGL_IMAGE_CREATE_MUTABLE_FORMAT_BIT based on Intel's request.
Unless this flag is specified, image views created from the image must match the base format.
xgl.py: changes for resource tracking
loader: changes for resource tracking
icd: changes for resource tracking
tests: changes for resource tracking
demos: changes for resource tracking
diff --git a/icd/intel/cmd_mi.c b/icd/intel/cmd_mi.c
index 9a4caee..371bc22 100644
--- a/icd/intel/cmd_mi.c
+++ b/icd/intel/cmd_mi.c
@@ -180,12 +180,36 @@
 
 ICD_EXPORT XGL_VOID XGLAPI xglCmdSetEvent(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_EVENT                                   event_)
+    XGL_EVENT                                   event_,
+    XGL_SET_EVENT                               pipeEvent)
 {
     struct intel_cmd *cmd = intel_cmd(cmdBuffer);
     struct intel_event *event = intel_event(event_);
+    uint32_t pipe_control_flags;
 
-    cmd_batch_immediate(cmd, event->obj.mem->bo, 0, 1);
+    /* Event setting is done with PIPE_CONTROL post-sync write immediate.
+     * With no other PIPE_CONTROL flags set, it behaves as XGL_SET_EVENT_TOP_OF_PIPE.
+     * All other pipeEvent values will behave as XGL_SET_EVENT_GPU_COMMANDS_COMPLETE.
+     */
+    switch(pipeEvent)
+    {
+    case XGL_SET_EVENT_TOP_OF_PIPE:
+        pipe_control_flags = 0;
+        break;
+    case XGL_SET_EVENT_VERTEX_PROCESSING_COMPLETE:
+    case XGL_SET_EVENT_FRAGMENT_PROCESSING_COMPLETE:
+    case XGL_SET_EVENT_GRAPHICS_PIPELINE_COMPLETE:
+    case XGL_SET_EVENT_COMPUTE_PIPELINE_COMPLETE:
+    case XGL_SET_EVENT_TRANSFER_COMPLETE:
+    case XGL_SET_EVENT_GPU_COMMANDS_COMPLETE:
+        pipe_control_flags = GEN6_PIPE_CONTROL_CS_STALL;
+        break;
+    default:
+        cmd->result = XGL_ERROR_UNKNOWN;
+        return;
+        break;
+    }
+    cmd_batch_immediate(cmd, pipe_control_flags, event->obj.mem->bo, 0, 1);
 }
 
 ICD_EXPORT XGL_VOID XGLAPI xglCmdResetEvent(
@@ -195,7 +219,10 @@
     struct intel_cmd *cmd = intel_cmd(cmdBuffer);
     struct intel_event *event = intel_event(event_);
 
-    cmd_batch_immediate(cmd, event->obj.mem->bo, 0, 0);
+    /* The timing of event reset is not well specifed.
+     * Event reset is done like XGL_SET_EVENT_TOP_OF_PIPE.
+     */
+    cmd_batch_immediate(cmd, 0, event->obj.mem->bo, 0, 0);
 }
 
 ICD_EXPORT XGL_VOID XGLAPI xglCmdWriteTimestamp(