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 for (k
= 0; k
< i
->nop
; k
++) {
238 fprintf(stderr
, "%s", c_get_name(c_opcode_str
, i
->op
[k
].opcode
));
239 fprintf(stderr
, " %s[%d][%s]",
240 c_get_name(c_file_str
, i
->op
[k
].output
.vector
->file
),
241 i
->op
[k
].output
.vector
->id
,
242 c_get_name(c_file_swz
, i
->op
[k
].output
.swizzle
));
243 for (j
= 0; j
< i
->op
[k
].ninput
; j
++) {
244 fprintf(stderr
, " %s[%d][%s]",
245 c_get_name(c_file_str
, i
->op
[k
].input
[j
].vector
->file
),
246 i
->op
[k
].input
[j
].vector
->id
,
247 c_get_name(c_file_swz
, i
->op
[k
].input
[j
].swizzle
));
249 fprintf(stderr
, ";\n");
254 static void c_shader_dump_rec(struct c_shader
*shader
, struct c_node
*node
, unsigned indent
)
256 struct c_node_link
*link
;
258 c_node_dump(node
, indent
);
259 c_list_for_each(link
, &node
->childs
) {
260 c_shader_dump_rec(shader
, link
->node
, indent
+ 1);
264 void c_shader_dump(struct c_shader
*shader
)
266 c_shader_dump_rec(shader
, &shader
->entry
, 0);