aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog.c5
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program.c32
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program.h1
3 files changed, 38 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.c b/src/mesa/drivers/dri/r300/r300_fragprog.c
index 4c6289298e7..814ccd3eacc 100644
--- a/src/mesa/drivers/dri/r300/r300_fragprog.c
+++ b/src/mesa/drivers/dri/r300/r300_fragprog.c
@@ -301,6 +301,11 @@ void r300TranslateFragmentShader(r300ContextPtr r300,
&compiler.compiler.Clauses[0],
1, transformations);
+ if (RADEON_DEBUG & DEBUG_PIXEL) {
+ _mesa_printf("Compiler state after transformations:\n");
+ radeonCompilerDump(&compiler.compiler);
+ }
+
if (!r300FragmentProgramEmit(&compiler))
fp->error = GL_TRUE;
diff --git a/src/mesa/drivers/dri/r300/radeon_program.c b/src/mesa/drivers/dri/r300/radeon_program.c
index 41cedbe61dc..c8f40e81893 100644
--- a/src/mesa/drivers/dri/r300/radeon_program.c
+++ b/src/mesa/drivers/dri/r300/radeon_program.c
@@ -27,6 +27,7 @@
#include "radeon_program.h"
+#include "shader/prog_print.h"
/**
* Initialize a compiler structure with a single mixed clause
@@ -79,6 +80,37 @@ int radeonCompilerAllocateTemporary(struct radeon_compiler *compiler)
}
+static const char* clausename(int type)
+{
+ switch(type) {
+ case CLAUSE_MIXED: return "CLAUSE_MIXED";
+ case CLAUSE_ALU: return "CLAUSE_ALU";
+ case CLAUSE_TEX: return "CLAUSE_TEX";
+ default: return "CLAUSE_UNKNOWN";
+ }
+}
+
+
+/**
+ * Dump the current compiler state to the console for debugging.
+ */
+void radeonCompilerDump(struct radeon_compiler *compiler)
+{
+ int i;
+ for(i = 0; i < compiler->NumClauses; ++i) {
+ struct radeon_clause *clause = &compiler->Clauses[i];
+ int j;
+
+ _mesa_printf("%2i: %s\n", i+1, clausename(clause->Type));
+
+ for(j = 0; j < clause->NumInstructions; ++j) {
+ _mesa_printf("%4i: ", j+1);
+ _mesa_print_instruction(&clause->Instructions[j]);
+ }
+ }
+}
+
+
/**
* \p position index of the new clause; later clauses are moved
* \p type of the new clause; one of CLAUSE_XXX
diff --git a/src/mesa/drivers/dri/r300/radeon_program.h b/src/mesa/drivers/dri/r300/radeon_program.h
index 3cde4d4f6fc..25e70505b16 100644
--- a/src/mesa/drivers/dri/r300/radeon_program.h
+++ b/src/mesa/drivers/dri/r300/radeon_program.h
@@ -104,6 +104,7 @@ void radeonCompilerInit(
struct gl_program *source);
void radeonCompilerCleanup(struct radeon_compiler *compiler);
int radeonCompilerAllocateTemporary(struct radeon_compiler *compiler);
+void radeonCompilerDump(struct radeon_compiler *compiler);
struct radeon_clause *radeonCompilerInsertClause(
struct radeon_compiler *compiler,