[Mesa-dev] [PATCH 01/10] i965/fs: Do not mark direct used surfaces in VARYING_PULL_CONSTANT_LOAD
Francisco Jerez
currojerez at riseup.net
Fri Oct 30 06:30:09 PDT 2015
Iago Toral Quiroga <itoral at igalia.com> writes:
> Right now the generator marks direct surfaces as used but leaves marking of
> indirect surfaces to the caller. Just make the callers handle marking in both
> cases for consistency.
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 4 +++-
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 8 --------
> src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 6 ++++--
> 3 files changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index d9e2f2c..e55417d 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1907,7 +1907,8 @@ fs_visitor::demote_pull_constants()
>
> /* Set up the annotation tracking for new generated instructions. */
> const fs_builder ibld(this, block, inst);
> - fs_reg surf_index(stage_prog_data->binding_table.pull_constants_start);
> + unsigned index = stage_prog_data->binding_table.pull_constants_start;
const
> + fs_reg surf_index(index);
> fs_reg dst = vgrf(glsl_type::float_type);
>
> assert(inst->src[i].stride == 0);
> @@ -1920,6 +1921,7 @@ fs_visitor::demote_pull_constants()
> pull_index);
> inst->src[i].reladdr = NULL;
> inst->src[i].stride = 1;
> + brw_mark_surface_used(prog_data, index);
> } else {
> const fs_builder ubld = ibld.exec_all().group(8, 0);
> fs_reg offset = fs_reg((unsigned)(pull_index * 4) & ~15);
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index 58bd23f..5e877e1 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -1340,8 +1340,6 @@ fs_generator::generate_varying_pull_constant_load(fs_inst *inst,
> inst->header_size != 0,
> simd_mode,
> return_format);
> -
> - brw_mark_surface_used(prog_data, surf_index);
> }
>
> void
> @@ -1386,8 +1384,6 @@ fs_generator::generate_varying_pull_constant_load_gen7(fs_inst *inst,
> simd_mode,
> 0);
>
> - brw_mark_surface_used(prog_data, surf_index);
> -
> } else {
>
> struct brw_reg addr = vec1(retype(brw_address_reg(0), BRW_REGISTER_TYPE_UD));
> @@ -1418,10 +1414,6 @@ fs_generator::generate_varying_pull_constant_load_gen7(fs_inst *inst,
> false /* header */,
> simd_mode,
> 0);
> -
> - /* visitor knows more than we do about the surface limit required,
> - * so has already done marking.
> - */
> }
> }
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 9c1f95c..349b428 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -1446,8 +1446,10 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
> fs_reg surf_index;
>
> if (const_index) {
> - surf_index = fs_reg(stage_prog_data->binding_table.ubo_start +
> - const_index->u[0]);
> + unsigned index = stage_prog_data->binding_table.ubo_start +
> + const_index->u[0];
const -- With these fixed:
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> + surf_index = fs_reg(index);
> + brw_mark_surface_used(prog_data, index);
> } else {
> /* The block index is not a constant. Evaluate the index expression
> * per-channel and add the base UBO index; we have to select a value
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151030/de7aefd5/attachment-0001.sig>
More information about the mesa-dev
mailing list