iris: Always reserve binding table space for NIR constants
Don't have a separate mechanism for NIR constants to be removed from the table. If unused, we will compact it away. The use_null_surface is needed when INTEL_DISABLE_COMPACT_BINDING_TABLE is set. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
5611444809
commit
045aeccf0e
|
@ -678,14 +678,14 @@ iris_setup_binding_table(struct nir_shader *nir,
|
||||||
|
|
||||||
bt->sizes[IRIS_SURFACE_GROUP_IMAGE] = info->num_images;
|
bt->sizes[IRIS_SURFACE_GROUP_IMAGE] = info->num_images;
|
||||||
|
|
||||||
/* Allocate a slot in the UBO section for NIR constants if present.
|
/* Allocate an extra slot in the UBO section for NIR constants.
|
||||||
|
* Binding table compaction will remove it if unnecessary.
|
||||||
|
*
|
||||||
* We don't include them in iris_compiled_shader::num_cbufs because
|
* We don't include them in iris_compiled_shader::num_cbufs because
|
||||||
* they are uploaded separately from shs->constbuf[], but from a shader
|
* they are uploaded separately from shs->constbuf[], but from a shader
|
||||||
* point of view, they're another UBO (at the end of the section).
|
* point of view, they're another UBO (at the end of the section).
|
||||||
*/
|
*/
|
||||||
if (nir->constant_data_size > 0)
|
bt->sizes[IRIS_SURFACE_GROUP_UBO] = num_cbufs + 1;
|
||||||
num_cbufs++;
|
|
||||||
bt->sizes[IRIS_SURFACE_GROUP_UBO] = num_cbufs;
|
|
||||||
|
|
||||||
/* The first IRIS_MAX_ABOs indices in the SSBO group are for atomics, real
|
/* The first IRIS_MAX_ABOs indices in the SSBO group are for atomics, real
|
||||||
* SSBOs start after that. Compaction will remove unused ABOs.
|
* SSBOs start after that. Compaction will remove unused ABOs.
|
||||||
|
|
|
@ -4191,11 +4191,16 @@ iris_populate_binding_table(struct iris_context *ice,
|
||||||
foreach_surface_used(i, IRIS_SURFACE_GROUP_UBO) {
|
foreach_surface_used(i, IRIS_SURFACE_GROUP_UBO) {
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
|
|
||||||
if ((i == bt->sizes[IRIS_SURFACE_GROUP_UBO] - 1) && ish->const_data) {
|
if (i == bt->sizes[IRIS_SURFACE_GROUP_UBO] - 1) {
|
||||||
iris_use_pinned_bo(batch, iris_resource_bo(ish->const_data), false);
|
if (ish->const_data) {
|
||||||
iris_use_pinned_bo(batch, iris_resource_bo(ish->const_data_state.res),
|
iris_use_pinned_bo(batch, iris_resource_bo(ish->const_data), false);
|
||||||
false);
|
iris_use_pinned_bo(batch, iris_resource_bo(ish->const_data_state.res),
|
||||||
addr = ish->const_data_state.offset;
|
false);
|
||||||
|
addr = ish->const_data_state.offset;
|
||||||
|
} else {
|
||||||
|
/* This can only happen with INTEL_DISABLE_COMPACT_BINDING_TABLE=1. */
|
||||||
|
addr = use_null_surface(batch, ice);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
addr = use_ubo_ssbo(batch, ice, &shs->constbuf[i],
|
addr = use_ubo_ssbo(batch, ice, &shs->constbuf[i],
|
||||||
&shs->constbuf_surf_state[i], false);
|
&shs->constbuf_surf_state[i], false);
|
||||||
|
|
Loading…
Reference in New Issue