iris: decoder fixes
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 7 Apr 2018 13:59:22 +0000 (06:59 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:05 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_binder.h
src/gallium/drivers/iris/iris_state.c

index c54f23f662ee43e63bd3e32545b3b40b1fa723b1..0c62f1a8abb6acc15403e7f9934a7706771fabe6 100644 (file)
@@ -81,13 +81,15 @@ decode_get_bo(void *v_batch, uint64_t address)
 
    for (int i = 0; i < batch->exec_count; i++) {
       struct iris_bo *bo = batch->exec_bos[i];
-      if (address >= bo->gtt_offset &&
-          address < bo->gtt_offset + bo->size) {
+      /* The decoder zeroes out the top 16 bits, so we need to as well */
+      uint64_t bo_address = bo->gtt_offset & (~0ull >> 16);
+
+      if (address >= bo_address && address < bo_address + bo->size) {
          return (struct gen_batch_decode_bo) {
             .addr = address,
             .size = bo->size,
             .map = iris_bo_map(batch->dbg, bo, MAP_READ) +
-                   (address - bo->gtt_offset),
+                   (address - bo_address),
          };
       }
    }
index 5830288b5c570708f745fbc701fa02d46ba1ca92..7a26602bf48ead39e98c6f480247e5667dec517f 100644 (file)
@@ -30,6 +30,8 @@
 struct iris_bo;
 struct iris_bufmgr;
 
+#define IRIS_BINDER_ADDRESS (1ull << 32)
+
 struct iris_binder
 {
    struct iris_bo *bo;
index 38310cfd6c83dec4b8ab11964b7a6efe8865e5a4..0b0cdc1960a85f51266fc5fdd0f271f6305de105 100644 (file)
@@ -2113,8 +2113,8 @@ iris_upload_render_state(struct iris_context *ice,
          struct iris_resource *res = (void *) view->pipe.texture;
          *bt_map++ = use_sampler_view(batch, view);
       }
-#if 0
 
+#if 0
       // XXX: not implemented yet
       assert(prog_data->binding_table.pull_constants_start == 0xd0d0d0d0);
       assert(prog_data->binding_table.ubo_start == 0xd0d0d0d0);