Iago Toral Quiroga <ito...@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 <curroje...@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev