intel: make cmd writers an array

Replace batch, state, and kernel writers by an array of writers.
diff --git a/icd/intel/cmd_priv.h b/icd/intel/cmd_priv.h
index 22face3..58330f3 100644
--- a/icd/intel/cmd_priv.h
+++ b/icd/intel/cmd_priv.h
@@ -37,7 +37,7 @@
     INTEL_GPU_ASSERT((cmd)->dev->gpu, (min_gen), (max_gen))
 
 struct intel_cmd_reloc {
-    struct intel_cmd_writer *writer;
+    enum intel_cmd_writer_type which;
     XGL_UINT pos;
 
     uint32_t val;
@@ -63,13 +63,13 @@
 }
 
 void cmd_writer_grow(struct intel_cmd *cmd,
-                     struct intel_cmd_writer *writer);
+                     enum intel_cmd_writer_type which);
 
 /**
  * Add a reloc at \p pos.  No error checking.
  */
 static inline void cmd_writer_add_reloc(struct intel_cmd *cmd,
-                                        struct intel_cmd_writer *writer,
+                                        enum intel_cmd_writer_type which,
                                         XGL_UINT pos, uint32_t val,
                                         struct intel_bo *bo,
                                         uint32_t flags)
@@ -78,7 +78,7 @@
 
     assert(cmd->reloc_used < cmd->reloc_count);
 
-    reloc->writer = writer;
+    reloc->which = which;
     reloc->pos = pos;
     reloc->val = val;
     reloc->bo = bo;
@@ -92,10 +92,10 @@
  */
 static inline void cmd_batch_reserve(struct intel_cmd *cmd, XGL_UINT len)
 {
-    struct intel_cmd_writer *writer = &cmd->batch;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_BATCH];
 
     if (writer->used + len > writer->size)
-        cmd_writer_grow(cmd, writer);
+        cmd_writer_grow(cmd, INTEL_CMD_WRITER_BATCH);
     assert(writer->used + len <= writer->size);
 }
 
@@ -115,7 +115,7 @@
  */
 static inline void cmd_batch_write(struct intel_cmd *cmd, uint32_t val)
 {
-    struct intel_cmd_writer *writer = &cmd->batch;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_BATCH];
 
     assert(writer->used < writer->size);
     ((uint32_t *) writer->ptr_opaque)[writer->used++] = val;
@@ -127,7 +127,7 @@
 static inline void cmd_batch_write_n(struct intel_cmd *cmd,
                                      const uint32_t *vals, XGL_UINT len)
 {
-    struct intel_cmd_writer *writer = &cmd->batch;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_BATCH];
 
     assert(writer->used + len <= writer->size);
 
@@ -143,9 +143,10 @@
                                    uint32_t val, struct intel_bo *bo,
                                    uint32_t flags)
 {
-    struct intel_cmd_writer *writer = &cmd->batch;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_BATCH];
 
-    cmd_writer_add_reloc(cmd, writer, writer->used, val, bo, flags);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            writer->used, val, bo, flags);
 
     writer->used++;
 }
@@ -165,7 +166,7 @@
     cmd_batch_reserve(cmd, cmd_len);
 
     /* relocs are not added until cmd_batch_end() */
-    assert(cmd->batch.used == 0);
+    assert(cmd->writers[INTEL_CMD_WRITER_BATCH].used == 0);
 
     cmd_batch_write(cmd, dw0);
 
@@ -187,20 +188,25 @@
  */
 static inline void cmd_batch_end(struct intel_cmd *cmd)
 {
-    struct intel_cmd_writer *writer = &cmd->batch;
-    const struct intel_cmd_writer *state = &cmd->state;
-    const struct intel_cmd_writer *kernel = &cmd->kernel;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_BATCH];
+    const struct intel_cmd_writer *state =
+        &cmd->writers[INTEL_CMD_WRITER_STATE];
+    const struct intel_cmd_writer *inst =
+        &cmd->writers[INTEL_CMD_WRITER_INSTRUCTION];
 
     cmd_reserve_reloc(cmd, 5);
-    cmd_writer_add_reloc(cmd, writer, 2, 1, state->bo, 0);
-    cmd_writer_add_reloc(cmd, writer, 3, 1, state->bo, 0);
-    cmd_writer_add_reloc(cmd, writer, 5, 1, kernel->bo, 0);
-    cmd_writer_add_reloc(cmd, writer, 7, 1 +
-            (state->size << 2), state->bo, 0);
-    cmd_writer_add_reloc(cmd, writer, 9, 1 +
-            (kernel->size << 2), kernel->bo, 0);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            2, 1, state->bo, 0);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            3, 1, state->bo, 0);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            5, 1, inst->bo, 0);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            7, 1 + (state->size << 2), state->bo, 0);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_BATCH,
+            9, 1 + (inst->size << 2), inst->bo, 0);
 
-    if (cmd->batch.used & 1) {
+    if (writer->used & 1) {
         cmd_batch_reserve(cmd, 1);
         cmd_batch_write(cmd, GEN6_MI_CMD(MI_BATCH_BUFFER_END));
     } else {
@@ -234,14 +240,14 @@
 static inline uint32_t *cmd_state_reserve(struct intel_cmd *cmd, XGL_UINT len,
                                           XGL_UINT alignment, XGL_UINT *pos)
 {
-    struct intel_cmd_writer *writer = &cmd->state;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_STATE];
     XGL_UINT aligned;
 
     assert(alignment && u_is_pow2(alignment));
     aligned = u_align(writer->used, alignment);
 
     if (aligned + len > writer->size)
-        cmd_writer_grow(cmd, writer);
+        cmd_writer_grow(cmd, INTEL_CMD_WRITER_STATE);
     assert(aligned + len <= writer->size);
 
     writer->used = aligned;
@@ -273,9 +279,10 @@
                                    struct intel_bo *bo,
                                    uint32_t flags)
 {
-    struct intel_cmd_writer *writer = &cmd->state;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_STATE];
 
-    cmd_writer_add_reloc(cmd, writer, writer->used + offset, val, bo, flags);
+    cmd_writer_add_reloc(cmd, INTEL_CMD_WRITER_STATE,
+            writer->used + offset, val, bo, flags);
 }
 
 /**
@@ -283,7 +290,7 @@
  */
 static inline void cmd_state_advance(struct intel_cmd *cmd, XGL_UINT len)
 {
-    struct intel_cmd_writer *writer = &cmd->state;
+    struct intel_cmd_writer *writer = &cmd->writers[INTEL_CMD_WRITER_STATE];
 
     assert(writer->used + len <= writer->size);
     writer->used += len;
@@ -323,12 +330,13 @@
     /* kernels are aligned to 64-byte */
     const XGL_UINT kernel_align = 64 / sizeof(uint32_t);
     const XGL_UINT kernel_len = ((size + 3) & ~3) / sizeof(uint32_t);
-    struct intel_cmd_writer *writer = &cmd->kernel;
+    struct intel_cmd_writer *writer =
+        &cmd->writers[INTEL_CMD_WRITER_INSTRUCTION];
     XGL_UINT kernel_pos;
 
     kernel_pos = u_align(writer->used, kernel_align);
     if (kernel_pos + kernel_len + prefetch_len > writer->size)
-        cmd_writer_grow(cmd, writer);
+        cmd_writer_grow(cmd, INTEL_CMD_WRITER_INSTRUCTION);
     assert(kernel_pos + kernel_len + prefetch_len <= writer->size);
 
     memcpy(&((uint32_t *) writer->ptr_opaque)[kernel_pos], kernel, size);