summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2011-10-18 15:21:04 -0700
committerIan Romanick <[email protected]>2011-11-07 13:33:16 -0800
commitcfab4327c380e5abd4976e937d9421aa098d0c5f (patch)
tree1555cafbdb8bf8acf4e2a232fa5e7c4819009703 /src/mesa
parentd7a7e4fc99888da424f324d1fc7e066673e804c2 (diff)
mesa: Add log_uniform and log_program_parameters to dump data
These were both useful debugging aids while developing this code. log_uniform will be used to keep the MESA_GLSL=uniform behavior. Signed-off-by: Ian Romanick <[email protected]> Tested-by: Tom Stellard <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/uniform_query.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index d4d6e8262ed..3df9a848f9a 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -538,6 +538,78 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location,
}
}
+static void
+log_uniform(const void *values, enum glsl_base_type basicType,
+ unsigned rows, unsigned cols, unsigned count,
+ bool transpose,
+ const struct gl_shader_program *shProg,
+ GLint location,
+ const struct gl_uniform_storage *uni)
+{
+
+ const union gl_constant_value *v = (const union gl_constant_value *) values;
+ const unsigned elems = rows * cols * count;
+ const char *const extra = (cols == 1) ? "uniform" : "uniform matrix";
+
+ printf("Mesa: set program %u %s \"%s\" (loc %d, type \"%s\", "
+ "transpose = %s) to: ",
+ shProg->Name, extra, uni->name, location, uni->type->name,
+ transpose ? "true" : "false");
+ for (unsigned i = 0; i < elems; i++) {
+ if (i != 0 && ((i % rows) == 0))
+ printf(", ");
+
+ switch (basicType) {
+ case GLSL_TYPE_UINT:
+ printf("%u ", v[i].u);
+ break;
+ case GLSL_TYPE_INT:
+ printf("%d ", v[i].i);
+ break;
+ case GLSL_TYPE_FLOAT:
+ printf("%g ", v[i].f);
+ break;
+ default:
+ assert(!"Should not get here.");
+ break;
+ }
+ }
+ printf("\n");
+ fflush(stdout);
+}
+
+#if 0
+static void
+log_program_parameters(const struct gl_shader_program *shProg)
+{
+ static const char *stages[] = {
+ "vertex", "fragment", "geometry"
+ };
+
+ assert(Elements(stages) == MESA_SHADER_TYPES);
+
+ for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
+ if (shProg->_LinkedShaders[i] == NULL)
+ continue;
+
+ const struct gl_program *const prog = shProg->_LinkedShaders[i]->Program;
+
+ printf("Program %d %s shader parameters:\n",
+ shProg->Name, stages[i]);
+ for (unsigned j = 0; j < prog->Parameters->NumParameters; j++) {
+ printf("%s: %p %f %f %f %f\n",
+ prog->Parameters->Parameters[j].Name,
+ prog->Parameters->ParameterValues[j],
+ prog->Parameters->ParameterValues[j][0].f,
+ prog->Parameters->ParameterValues[j][1].f,
+ prog->Parameters->ParameterValues[j][2].f,
+ prog->Parameters->ParameterValues[j][3].f);
+ }
+ }
+ fflush(stdout);
+}
+#endif
+
/**
* Check if the type given by userType is allowed to set a uniform of the
* target type. Generally, equivalence is required, but setting Boolean