intel: use surface base offset for meta surfaces

Subtract off surface base address from surface offsets in meta surface states.
diff --git a/icd/intel/cmd_pipeline.c b/icd/intel/cmd_pipeline.c
index 97baed8..26db520 100644
--- a/icd/intel/cmd_pipeline.c
+++ b/icd/intel/cmd_pipeline.c
@@ -2113,6 +2113,8 @@
     const struct intel_cmd_meta *meta = cmd->bind.meta;
     uint32_t binding_table[2] = { 0, 0 };
     uint32_t offset;
+    const uint32_t sba_offset =
+        cmd->writers[INTEL_CMD_WRITER_SURFACE].sba_offset;
 
     CMD_ASSERT(cmd, 6, 7.5);
 
@@ -2135,7 +2137,7 @@
                     meta->src.reloc_offset, meta->src.reloc_flags);
         }
 
-        binding_table[0] = offset;
+        binding_table[0] = offset - sba_offset;
     }
     if (meta->dst.valid) {
         offset = cmd_surface_write(cmd, INTEL_CMD_ITEM_SURFACE,
@@ -2147,7 +2149,7 @@
                 (struct intel_bo *) meta->dst.reloc_target,
                 meta->dst.reloc_offset, meta->dst.reloc_flags);
 
-        binding_table[1] = offset;
+        binding_table[1] = offset - sba_offset;
     }
 
     /* BINDING_TABLE */
@@ -2159,13 +2161,13 @@
         const int subop = (meta->mode == INTEL_CMD_META_VS_POINTS) ?
             GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_VS :
             GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_PS;
-        gen7_3dstate_pointer(cmd, subop, offset);
+        gen7_3dstate_pointer(cmd, subop, offset - sba_offset);
     } else {
         /* 3DSTATE_BINDING_TABLE_POINTERS */
         if (meta->mode == INTEL_CMD_META_VS_POINTS)
-            gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd, offset, 0, 0);
+            gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd, offset - sba_offset, 0, 0);
         else
-            gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd, 0, 0, offset);
+            gen6_3DSTATE_BINDING_TABLE_POINTERS(cmd, 0, 0, offset - sba_offset);
     }
 }