summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-08-30 15:49:32 -0700
committerKenneth Graunke <[email protected]>2019-02-21 10:26:09 -0800
commit5d1dadfc38a0a6a7af1ad66d33466f9dd7916753 (patch)
tree71ddc852482ec1562b43679d7d8407b8457b1697 /src
parentf5b887da6c188f1848fa6651ca96a97a10cbe3df (diff)
iris: bother with BTIs
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/iris/iris_program.c5
-rw-r--r--src/gallium/drivers/iris/iris_state.c23
2 files changed, 24 insertions, 4 deletions
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index 5ccb987da15..a0dcaa77175 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -363,10 +363,9 @@ assign_common_binding_table_offsets(const struct gen_device_info *devinfo,
}
if (info->num_ssbos || info->num_abos) {
- //assert(info->num_abos <= BRW_MAX_ABO);
- //assert(info->num_ssbos <= BRW_MAX_SSBO);
prog_data->binding_table.ssbo_start = next_binding_table_offset;
- next_binding_table_offset += info->num_abos + info->num_ssbos;
+ // XXX: see iris_state "wasting 16 binding table slots for ABOs" comment
+ next_binding_table_offset += IRIS_MAX_ABOS + info->num_ssbos;
} else {
prog_data->binding_table.ssbo_start = 0xd0d0d0d0;
}
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index dd90d2816ed..0b7cc0db512 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -3248,6 +3248,21 @@ use_ssbo(struct iris_batch *batch, struct iris_context *ice,
return surf_state->offset;
}
+static uint32_t
+use_image(struct iris_batch *batch, struct iris_context *ice,
+ struct iris_shader_state *shs, int i)
+{
+ if (!shs->image[i])
+ return use_null_surface(batch, ice);
+
+ struct iris_state_ref *surf_state = &shs->image_surface_state[i];
+
+ iris_use_pinned_bo(batch, iris_resource_bo(shs->image[i]), true);
+ iris_use_pinned_bo(batch, iris_resource_bo(surf_state->res), false);
+
+ return surf_state->offset;
+}
+
#define push_bt_entry(addr) \
assert(addr >= binder_addr); \
if (!pin_only) bt_map[s++] = (addr) - binder_addr;
@@ -3331,9 +3346,15 @@ iris_populate_binding_table(struct iris_context *ice,
}
}
+ if (info->num_images > 0) {
+ for (int i = 0; i < info->num_images; i++) {
+ uint32_t addr = use_image(batch, ice, shs, i);
+ push_bt_entry(addr);
+ }
+ }
+
#if 0
// XXX: not implemented yet
- assert(prog_data->binding_table.image_start == 0xd0d0d0d0);
assert(prog_data->binding_table.plane_start[1] == 0xd0d0d0d0);
assert(prog_data->binding_table.plane_start[2] == 0xd0d0d0d0);
#endif