[Mesa-dev] [PATCH 2/6] mesa/st/glsl_to_tgsi: Correct debug output for indirect access
Nicolai Hähnle
nhaehnle at gmail.com
Mon Oct 9 14:43:56 UTC 2017
On 04.10.2017 11:45, Gert Wollny wrote:
> For arrays print the array ID, and with indirect access also print the
> reladdr* registers. The reladdr* registers are always used in the
> printout, even though the actual code may use an address register.
>
> Specifically, a sequence involving src.reladdr = TEMP[2] and src.index=10
> that emits the address register loading instruction will be printed like:
>
> MOV ADDR[0].x, TEMP[2].xxxx
> MOV TEMP[3], ARRAY(2)[TEMP[2].xxxx + 10]
>
> The reason for this is, that there is currently no indication in the src
> register on whether the address instruction was or must be emitted.
> ---
> .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 62 ++++++++++++----------
> 1 file changed, 34 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp
> index 76c198e165..36ddd7a258 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp
> @@ -918,6 +918,31 @@ static const char *tgsi_file_names[PROGRAM_FILE_MAX] = {
> "IMM", "BUF", "MEM", "IMAGE"
> };
>
> +static std::ostream& operator << (std::ostream& os, const st_src_reg& reg)
> +{
> + os << tgsi_file_names[reg.file];
> + if (reg.file == PROGRAM_ARRAY)
> + os << "(" << reg.array_id << ")";
> +
> + os << "[";
> + if (reg.reladdr)
> + os << *reg.reladdr << "+";
> + if (reg.reladdr2)
> + os << *reg.reladdr2 << "+";
This isn't how that works. reladdr2 is the relative address for 2D
register accesses; see has_index2 and index2D.
Besides, you're not actually printing reg.index.
Same for when you're printing the destination.
Cheers,
Nicolai
> + os << "]";
> +
> + if (reg.swizzle != SWIZZLE_XYZW) {
> + os << ".";
> + for (int idx = 0; idx < 4; ++idx) {
> + int swz = GET_SWZ(reg.swizzle, idx);
> + if (swz < 4) {
> + os << swizzle_txt[swz];
> + }
> + }
> + }
> + return os;
> +}
> +
> static
> void dump_instruction(int line, prog_scope *scope,
> const glsl_to_tgsi_instruction& inst)
> @@ -954,7 +979,12 @@ void dump_instruction(int line, prog_scope *scope,
> if (dst.file == PROGRAM_ARRAY)
> cerr << "(" << dst.array_id << ")";
>
> - cerr << "[" << dst.index << "]";
> + cerr << "[";
> + if (dst.reladdr)
> + cerr << *dst.reladdr;
> + if (dst.reladdr2)
> + cerr << *dst.reladdr2;
> + cerr << dst.index << "]";
>
> if (dst.writemask != TGSI_WRITEMASK_XYZW) {
> cerr << ".";
> @@ -970,19 +1000,7 @@ void dump_instruction(int line, prog_scope *scope,
> for (unsigned j = 0; j < num_inst_src_regs(&inst); j++) {
> if (j > 0)
> cerr << ", ";
> -
> - const st_src_reg& src = inst.src[j];
> - cerr << tgsi_file_names[src.file]
> - << "[" << src.index << "]";
> - if (src.swizzle != SWIZZLE_XYZW) {
> - cerr << ".";
> - for (int idx = 0; idx < 4; ++idx) {
> - int swz = GET_SWZ(src.swizzle, idx);
> - if (swz < 4) {
> - cerr << swizzle_txt[swz];
> - }
> - }
> - }
> + cerr << inst.src[j];
> }
>
> if (inst.tex_offset_num_offset > 0) {
> @@ -990,21 +1008,9 @@ void dump_instruction(int line, prog_scope *scope,
> for (unsigned j = 0; j < inst.tex_offset_num_offset; j++) {
> if (j > 0)
> cerr << ", ";
> -
> - const st_src_reg& src = inst.tex_offsets[j];
> - cerr << tgsi_file_names[src.file]
> - << "[" << src.index << "]";
> - if (src.swizzle != SWIZZLE_XYZW) {
> - cerr << ".";
> - for (int idx = 0; idx < 4; ++idx) {
> - int swz = GET_SWZ(src.swizzle, idx);
> - if (swz < 4) {
> - cerr << swizzle_txt[swz];
> - }
> - }
> - }
> + cerr << inst.tex_offsets[j];
> }
> }
> cerr << "\n";
> }
> -#endif
> +#endif
> \ No newline at end of file
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list