On 05/19/2014 11:55 AM, Matt Turner wrote: > --- > src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 4 ++-- > src/mesa/drivers/dri/i965/gen8_fs_generator.cpp | 4 ++-- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > index 872b5a4..914fb29 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > @@ -1843,12 +1843,12 @@ fs_generator::generate_assembly(exec_list > *simd8_instructions, > > if (simd16_instructions) { > /* align to 64 byte boundary. */ > - while ((p->nr_insn * sizeof(struct brw_instruction)) % 64) { > + while (p->next_insn_offset % 64) { > brw_NOP(p); > }
So, I wondered how this worked (before and after your change). In theory, we could have an odd number of compacted instructions, giving us a next_insn_offset of (64*n + 2). Emitting uncompacted NOPs adds 4 bytes each time, which would never get us to a multiple of 64. Apparently, this doesn't happen because sendc cannot be compacted and must be aligned on a 128-bit/4-byte boundary. So, it works. Someday we should probably just do: p->next_insn_offset = ALIGN(p->next_insn_offset, 64); and memset to 0 between the two programs. In the meantime, this seems better than the existing code. Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> > > /* Save off the start of this SIMD16 program */ > - prog_data->prog_offset_16 = p->nr_insn * sizeof(struct > brw_instruction); > + prog_data->prog_offset_16 = p->next_insn_offset; > > brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); > > diff --git a/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp > b/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp > index 9011bff..272f668 100644 > --- a/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp > +++ b/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp > @@ -1330,11 +1330,11 @@ gen8_fs_generator::generate_assembly(exec_list > *simd8_instructions, > > if (simd16_instructions) { > /* Align to a 64-byte boundary. */ > - while ((nr_inst * sizeof(gen8_instruction)) % 64) > + while (next_inst_offset % 64) > NOP(); > > /* Save off the start of this SIMD16 program */ > - prog_data->prog_offset_16 = nr_inst * sizeof(gen8_instruction); > + prog_data->prog_offset_16 = next_inst_offset; > > struct annotation *annotation; > int num_annotations; >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev