2 * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * on the rights to use, copy, modify, merge, publish, distribute, sub
8 * license, and/or sell copies of the Software, and to permit persons to whom
9 * the Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21 * USE OR OTHER DEALINGS IN THE SOFTWARE.
27 #include "r600_compiler.h"
29 static const char *c_file_swz
[] = {
39 static const char *c_file_str
[] = {
53 static const char *c_semantic_str
[] = {
67 static const char *c_opcode_str
[] = {
217 static inline const char *c_get_name(const char *name
[], unsigned i
)
222 static void pindent(unsigned indent
)
225 for (i
= 0; i
< indent
; i
++)
226 fprintf(stderr
, " ");
229 static void c_node_dump(struct c_node
*node
, unsigned indent
)
231 struct c_instruction
*i
;
234 pindent(indent
); fprintf(stderr
, "# node %s\n", c_get_name(c_opcode_str
, node
->opcode
));
235 c_list_for_each(i
, &node
->insts
) {
236 pindent(indent
); fprintf(stderr
, "%s", c_get_name(c_opcode_str
, i
->opcode
));
237 fprintf(stderr
, " %s[%d][%s%s%s%s]",
238 c_get_name(c_file_str
, i
->output
.vector
->file
),
239 i
->output
.vector
->id
,
240 c_get_name(c_file_swz
, i
->output
.swizzle
[0]),
241 c_get_name(c_file_swz
, i
->output
.swizzle
[1]),
242 c_get_name(c_file_swz
, i
->output
.swizzle
[2]),
243 c_get_name(c_file_swz
, i
->output
.swizzle
[3]));
244 for (j
= 0; j
< i
->ninput
; j
++) {
245 fprintf(stderr
, " %s[%d][%s%s%s%s]",
246 c_get_name(c_file_str
, i
->input
[j
].vector
->file
),
247 i
->input
[j
].vector
->id
,
248 c_get_name(c_file_swz
, i
->input
[j
].swizzle
[0]),
249 c_get_name(c_file_swz
, i
->input
[j
].swizzle
[1]),
250 c_get_name(c_file_swz
, i
->input
[j
].swizzle
[2]),
251 c_get_name(c_file_swz
, i
->input
[j
].swizzle
[3]));
253 fprintf(stderr
, ";\n");
257 static void c_shader_dump_rec(struct c_shader
*shader
, struct c_node
*node
, unsigned indent
)
259 struct c_node_link
*link
;
261 c_node_dump(node
, indent
);
262 c_list_for_each(link
, &node
->childs
) {
263 c_shader_dump_rec(shader
, link
->node
, indent
+ 1);
267 void c_shader_dump(struct c_shader
*shader
)
269 c_shader_dump_rec(shader
, &shader
->entry
, 0);