binding: update for xglCmdBindDescriptorSets()

This update makes it possible to bind multiple descriptor sets to the command
buffer.  We introduced intel_cmd_dset_data to hold the descriptor set offsets
in the global descriptor region as well as their dynamic offsets.  We also
changed the descriptor reading routines from

  intel_desc_set_read_surface()
  intel_desc_set_read_sampler()

to

  intel_desc_region_read_surface()
  intel_desc_region_read_sampler()

v2: fix a potential crash when allocation of dynamic_desc_indices fails
diff --git a/icd/intel/cmd.h b/icd/intel/cmd.h
index be8bf13..2379b3a 100644
--- a/icd/intel/cmd.h
+++ b/icd/intel/cmd.h
@@ -133,6 +133,14 @@
     uint32_t used;
 };
 
+struct intel_cmd_dset_data {
+    struct intel_desc_offset *set_offsets;
+    uint32_t set_offset_count;
+
+    uint32_t *dynamic_offsets;
+    uint32_t dynamic_offset_count;
+};
+
 /*
  * States bounded to the command buffer.  We want to write states directly to
  * the command buffer when possible, and reduce this struct.
@@ -162,12 +170,11 @@
     } state;
 
     struct {
-        const struct intel_desc_set *graphics;
-        uint32_t *graphics_dynamic_offsets;
-        size_t graphics_dynamic_offset_size;
-        const struct intel_desc_set *compute;
-        uint32_t *compute_dynamic_offsets;
-        size_t compute_dynamic_offset_size;
+        const struct intel_desc_layout_chain *graphics;
+        struct intel_cmd_dset_data graphics_data;
+
+        const struct intel_desc_layout_chain *compute;
+        struct intel_cmd_dset_data compute_data;
     } dset;
 
     struct {