intel: emit BINDING_TABLE_STATE for all stages

We had emit_ps_binding_table() for PS.  It turned out it was generic enough to
do all stages.
diff --git a/icd/intel/cmd_pipeline.c b/icd/intel/cmd_pipeline.c
index 72b307e..4642477 100644
--- a/icd/intel/cmd_pipeline.c
+++ b/icd/intel/cmd_pipeline.c
@@ -1519,16 +1519,19 @@
     return sampler_offset;
 }
 
-static void emit_ps_binding_table(struct intel_cmd *cmd,
-                                  const struct intel_pipeline_rmap *rmap)
+static uint32_t emit_binding_table(struct intel_cmd *cmd,
+                                   const struct intel_pipeline_rmap *rmap)
 {
-    const XGL_UINT surface_count = rmap->rt_count +
-        rmap->resource_count + rmap->uav_count;
     uint32_t binding_table[256], offset;
-    XGL_UINT i;
+    XGL_UINT surface_count, i;
 
     CMD_ASSERT(cmd, 6, 7.5);
 
+    surface_count = (rmap) ?
+        rmap->rt_count + rmap->resource_count + rmap->uav_count : 0;
+    if (!surface_count)
+        return 0;
+
     assert(surface_count <= ARRAY_SIZE(binding_table));
 
     for (i = 0; i < surface_count; i++) {
@@ -1609,25 +1612,9 @@
         binding_table[i] = offset;
     }
 
-    offset = cmd_state_write(cmd, INTEL_CMD_ITEM_BINDING_TABLE,
+    return cmd_state_write(cmd, INTEL_CMD_ITEM_BINDING_TABLE,
             GEN6_ALIGNMENT_BINDING_TABLE_STATE * 4,
             surface_count, binding_table);
-
-    if (cmd_gen(cmd) >= INTEL_GEN(7)) {
-        gen7_3dstate_pointer(cmd,
-                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_PS, offset);
-
-        gen7_3dstate_pointer(cmd,
-                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_VS, 0);
-        gen7_3dstate_pointer(cmd,
-                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_HS, 0);
-        gen7_3dstate_pointer(cmd,
-                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_DS, 0);
-        gen7_3dstate_pointer(cmd,
-                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_GS, 0);
-    } else {
-        gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd, 0, 0, offset);
-    }
 }
 
 static void gen6_3DSTATE_VERTEX_BUFFERS(struct intel_cmd *cmd)
@@ -1785,9 +1772,18 @@
 static void emit_shader_resources(struct intel_cmd *cmd)
 {
     /* five HW shader stages */
-    uint32_t samplers[5];
+    uint32_t binding_tables[5], samplers[5];
 
-    emit_ps_binding_table(cmd, cmd->bind.pipeline.graphics->fs.rmap);
+    binding_tables[0] = emit_binding_table(cmd,
+            cmd->bind.pipeline.graphics->vs.rmap);
+    binding_tables[1] = emit_binding_table(cmd,
+            cmd->bind.pipeline.graphics->tcs.rmap);
+    binding_tables[2] = emit_binding_table(cmd,
+            cmd->bind.pipeline.graphics->tes.rmap);
+    binding_tables[3] = emit_binding_table(cmd,
+            cmd->bind.pipeline.graphics->gs.rmap);
+    binding_tables[4] = emit_binding_table(cmd,
+            cmd->bind.pipeline.graphics->fs.rmap);
 
     samplers[0] = emit_samplers(cmd, cmd->bind.pipeline.graphics->vs.rmap);
     samplers[1] = emit_samplers(cmd, cmd->bind.pipeline.graphics->tcs.rmap);
@@ -1797,6 +1793,22 @@
 
     if (cmd_gen(cmd) >= INTEL_GEN(7)) {
         gen7_3dstate_pointer(cmd,
+                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_VS,
+                binding_tables[0]);
+        gen7_3dstate_pointer(cmd,
+                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_HS,
+                binding_tables[1]);
+        gen7_3dstate_pointer(cmd,
+                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_DS,
+                binding_tables[2]);
+        gen7_3dstate_pointer(cmd,
+                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_GS,
+                binding_tables[3]);
+        gen7_3dstate_pointer(cmd,
+                GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_PS,
+                binding_tables[4]);
+
+        gen7_3dstate_pointer(cmd,
                 GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_VS,
                 samplers[0]);
         gen7_3dstate_pointer(cmd,
@@ -1812,6 +1824,10 @@
                 GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_PS,
                 samplers[4]);
     } else {
+        assert(!binding_tables[1] && !binding_tables[2]);
+        gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd,
+                binding_tables[0], binding_tables[3], binding_tables[4]);
+
         assert(!samplers[1] && !samplers[2]);
         gen6_3DSTATE_SAMPLER_STATE_POINTERS(cmd,
                 samplers[0], samplers[3], samplers[4]);