xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/r600/r600_dump.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /* -*- mesa-c++  -*-
2  * Copyright (c) 2018 Collabora LTD
3  * Author: Gert Wollny <[email protected]>
4  * SPDX-License-Identifier: MIT
5  */
6 
7 #include "r600_dump.h"
8 #include "r600_shader.h"
9 #include "tgsi/tgsi_strings.h"
10 
print_shader_info(FILE * f,int id,struct r600_shader * shader)11 void print_shader_info(FILE *f , int id, struct r600_shader *shader)
12 {
13 
14 #define PRINT_INT_MEMBER(NAME) \
15    if (shader-> NAME) fprintf(f, "  shader->"  #NAME  "=%d;\n", shader-> NAME)
16 #define PRINT_UINT_MEMBER(NAME) \
17    if (shader-> NAME) fprintf(f, "  shader->"  #NAME  "=%u;\n", (unsigned)shader-> NAME)
18 
19 #define PRINT_INT_ARRAY_ELM(NAME, ELM) \
20    if (shader->NAME[i].ELM) fprintf(f, "  shader->"  #NAME "[%d]." #ELM "=%d;\n", i, (int)shader->NAME[i].ELM)
21 #define PRINT_UINT_ARRAY_ELM(NAME, ELM) \
22    if (shader->NAME[i].ELM) fprintf(f, "  shader->"  #NAME "[%d]." #ELM" =%u;\n", i, (unsigned)shader->NAME[i].ELM)
23 #define PRINT_BOOL_ARRAY_ELM(NAME, ELM) \
24    if (shader->NAME[i].ELM) fprintf(f, "  shader->"  #NAME "[%d]." #ELM "=%s;\n", i, shader->NAME[i].ELM ? "true" : "false")
25 
26    fprintf(f, "#include \"gallium/drivers/r600/r600_shader.h\"\n");
27    fprintf(f, "void shader_%d_fill_data(struct r600_shader *shader)\n{\n", id);
28    fprintf(f, "  memset(shader, 0, sizeof(struct r600_shader));\n");
29 
30    PRINT_UINT_MEMBER(processor_type);
31    PRINT_UINT_MEMBER(ninput);
32    PRINT_UINT_MEMBER(noutput);
33    PRINT_UINT_MEMBER(nhwatomic);
34    PRINT_UINT_MEMBER(nlds);
35    PRINT_UINT_MEMBER(nsys_inputs);
36    PRINT_UINT_MEMBER(highest_export_param);
37 
38    for (unsigned i = 0; i < shader->ninput; ++i) {
39       PRINT_INT_ARRAY_ELM(input, varying_slot);
40       PRINT_INT_ARRAY_ELM(input, system_value);
41       PRINT_UINT_ARRAY_ELM(input, gpr);
42       PRINT_INT_ARRAY_ELM(input, spi_sid);
43       PRINT_UINT_ARRAY_ELM(input, interpolate);
44       PRINT_UINT_ARRAY_ELM(input, ij_index);
45       PRINT_UINT_ARRAY_ELM(input, interpolate_location); //  TGSI_INTERPOLATE_LOC_CENTER, CENTROID, SAMPLE
46       PRINT_UINT_ARRAY_ELM(input, lds_pos); /* for evergreen */
47       PRINT_INT_ARRAY_ELM(input, ring_offset);
48       PRINT_BOOL_ARRAY_ELM(input, uses_interpolate_at_centroid);
49    }
50 
51    for (unsigned i = 0; i < shader->noutput; ++i) {
52       PRINT_INT_ARRAY_ELM(output, varying_slot);
53       PRINT_INT_ARRAY_ELM(output, frag_result);
54       PRINT_UINT_ARRAY_ELM(output, gpr);
55       PRINT_INT_ARRAY_ELM(output, spi_sid);
56       PRINT_UINT_ARRAY_ELM(output, write_mask);
57       PRINT_INT_ARRAY_ELM(output, export_param);
58       PRINT_INT_ARRAY_ELM(output, ring_offset);
59    }
60 
61    for (unsigned i = 0; i < shader->nhwatomic; ++i) {
62       PRINT_UINT_ARRAY_ELM(atomics, start);
63       PRINT_UINT_ARRAY_ELM(atomics, end);
64       PRINT_UINT_ARRAY_ELM(atomics, buffer_id);
65       PRINT_UINT_ARRAY_ELM(atomics, hw_idx);
66    }
67 
68    PRINT_UINT_MEMBER(nhwatomic_ranges);
69    PRINT_UINT_MEMBER(uses_kill);
70    PRINT_UINT_MEMBER(fs_write_all);
71    PRINT_UINT_MEMBER(two_side);
72    PRINT_UINT_MEMBER(needs_scratch_space);
73    /* Real number of ps color exports compiled in the bytecode */
74    PRINT_UINT_MEMBER(nr_ps_color_exports);
75    PRINT_UINT_MEMBER(ps_color_export_mask);
76    PRINT_UINT_MEMBER(ps_export_highest);
77    /* bit n is set if the shader writes gl_ClipDistance[n] */
78    PRINT_UINT_MEMBER(cc_dist_mask);
79    PRINT_UINT_MEMBER(clip_dist_write);
80    PRINT_UINT_MEMBER(cull_dist_write);
81    PRINT_UINT_MEMBER(vs_position_window_space);
82    /* flag is set if the shader writes VS_OUT_MISC_VEC (e.g. for PSIZE) */
83    PRINT_UINT_MEMBER(vs_out_misc_write);
84    PRINT_UINT_MEMBER(vs_out_point_size);
85    PRINT_UINT_MEMBER(vs_out_layer);
86    PRINT_UINT_MEMBER(vs_out_viewport);
87    PRINT_UINT_MEMBER(vs_out_edgeflag);
88    PRINT_UINT_MEMBER(has_txq_cube_array_z_comp);
89    PRINT_UINT_MEMBER(uses_tex_buffers);
90    PRINT_UINT_MEMBER(gs_prim_id_input);
91    PRINT_UINT_MEMBER(gs_tri_strip_adj_fix);
92    PRINT_UINT_MEMBER(ps_conservative_z);
93 
94    /* Size in bytes of a data item in the ring(s) (single vertex data).
95       Stages with only one ring items 123 will be set to 0. */
96 
97    PRINT_UINT_MEMBER(ring_item_sizes[0]);
98    PRINT_UINT_MEMBER(ring_item_sizes[1]);
99    PRINT_UINT_MEMBER(ring_item_sizes[2]);
100    PRINT_UINT_MEMBER(ring_item_sizes[3]);
101 
102    PRINT_UINT_MEMBER(indirect_files);
103    PRINT_UINT_MEMBER(max_arrays);
104    PRINT_UINT_MEMBER(num_arrays);
105    PRINT_UINT_MEMBER(vs_as_es);
106    PRINT_UINT_MEMBER(vs_as_ls);
107    PRINT_UINT_MEMBER(vs_as_gs_a);
108    PRINT_UINT_MEMBER(tes_as_es);
109    PRINT_UINT_MEMBER(tcs_prim_mode);
110 
111    if (shader->num_arrays > 0) {
112       fprintf(stderr, "  shader->arrays = new r600_shader_array[%d];\n", shader->num_arrays);
113       for (unsigned i = 0; i  < shader->num_arrays; ++i) {
114          PRINT_UINT_ARRAY_ELM(arrays, gpr_start);
115          PRINT_UINT_ARRAY_ELM(arrays, gpr_count);
116          PRINT_UINT_ARRAY_ELM(arrays, comp_mask);
117       }
118    }
119 
120    PRINT_UINT_MEMBER(uses_doubles);
121    PRINT_UINT_MEMBER(uses_atomics);
122    PRINT_UINT_MEMBER(uses_images);
123    PRINT_UINT_MEMBER(uses_helper_invocation);
124    PRINT_UINT_MEMBER(atomic_base);
125    PRINT_UINT_MEMBER(rat_base);
126    PRINT_UINT_MEMBER(image_size_const_offset);
127 
128    fprintf(f, "}\n");
129 }
130 
print_pipe_info(FILE * f,struct tgsi_shader_info * shader)131 void print_pipe_info(FILE *f, struct tgsi_shader_info *shader)
132 {
133    PRINT_UINT_MEMBER(shader_buffers_load);
134    PRINT_UINT_MEMBER(shader_buffers_store);
135    PRINT_UINT_MEMBER(shader_buffers_atomic);
136    PRINT_UINT_MEMBER(writes_memory);
137    PRINT_UINT_MEMBER(file_mask[TGSI_FILE_HW_ATOMIC]);
138    PRINT_UINT_MEMBER(file_count[TGSI_FILE_HW_ATOMIC]);
139 
140    for(unsigned int i = 0; i < TGSI_PROPERTY_COUNT; ++i) {
141       if (shader->properties[i] != 0)
142 	 fprintf(stderr, "PROP: %s = %d\n", tgsi_property_names[i], shader->properties[i]);
143    }
144 
145 #define PRINT_UINT_ARRAY_MEMBER(M, IDX) \
146    if (shader-> M [ IDX ])  fprintf(f, #M "[%d] = %d\n",  IDX, (unsigned) shader-> M [ IDX ]);
147 
148    for (int i = 0; i < shader->num_inputs; ++i) {
149       PRINT_UINT_ARRAY_MEMBER(input_semantic_name, i); /**< TGSI_SEMANTIC_x */
150       PRINT_UINT_ARRAY_MEMBER(input_semantic_index, i);
151       PRINT_UINT_ARRAY_MEMBER(input_interpolate, i);
152       PRINT_UINT_ARRAY_MEMBER(input_interpolate_loc, i);
153       PRINT_UINT_ARRAY_MEMBER(input_usage_mask, i);
154    }
155 
156    for (int i = 0; i < shader->num_outputs; ++i) {
157       PRINT_UINT_ARRAY_MEMBER(output_semantic_name, i);
158       PRINT_UINT_ARRAY_MEMBER(output_semantic_index, i);
159       PRINT_UINT_ARRAY_MEMBER(output_usagemask, i);
160       PRINT_UINT_ARRAY_MEMBER(output_streams, i);
161    }
162 
163    for (int i = 0; i < shader->num_system_values; ++i)
164       PRINT_UINT_ARRAY_MEMBER(system_value_semantic_name, i);
165 
166    PRINT_UINT_MEMBER(reads_pervertex_outputs);
167    PRINT_UINT_MEMBER(reads_perpatch_outputs);
168    PRINT_UINT_MEMBER(reads_tessfactor_outputs);
169 }
170