summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2016-10-06 14:55:39 +0300
committerTapani Pälli <tapani.palli@intel.com>2019-04-18 10:32:24 +0300
commitedddf97a719dec0f4b6f2d8fc1dc72d6ddcb31bb (patch)
treeaf6a0b066c051f95fb4adf06eab803291a2521ab
parent829f278ad0042b0bb5026b10e7393fa3e11498b2 (diff)
glsl: debug facility to program resource listdebug_resource_list
This is just something I've used when debugging resource list failures. Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
-rw-r--r--src/compiler/glsl/linker.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index efcef9fedf0..314386944e9 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -4416,6 +4416,133 @@ write_top_level_array_size_and_stride:
uni->top_level_array_size = array_size;
}
+static const char*
+str_from_type(GLenum type)
+{
+ static char temp[256];
+
+ switch(type) {
+ case GL_PROGRAM_INPUT:
+ return "IN ";
+ case GL_PROGRAM_OUTPUT:
+ return "OUT";
+ case GL_UNIFORM:
+ return "UNI";
+ case GL_UNIFORM_BLOCK:
+ return "UBO";
+ case GL_TRANSFORM_FEEDBACK_VARYING:
+ return "XFB";
+ case GL_ATOMIC_COUNTER_BUFFER:
+ return "ATC";
+ case GL_VERTEX_SUBROUTINE:
+ case GL_TESS_CONTROL_SUBROUTINE:
+ case GL_TESS_EVALUATION_SUBROUTINE:
+ case GL_GEOMETRY_SUBROUTINE:
+ case GL_FRAGMENT_SUBROUTINE:
+ case GL_COMPUTE_SUBROUTINE:
+ return "SUB";
+ case GL_VERTEX_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+ case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+ case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ return "SUB_UNI";
+ default:
+ {
+ snprintf(temp, 256, "0x%x", type);
+ return temp;
+ }
+ }
+}
+
+static const char*
+resource_name(struct gl_program_resource *res)
+{
+ switch (res->Type) {
+ case GL_TRANSFORM_FEEDBACK_VARYING:
+ {
+ gl_transform_feedback_varying_info *info =
+ (gl_transform_feedback_varying_info*) res->Data;
+ return info->Name;
+ }
+ case GL_PROGRAM_INPUT:
+ case GL_PROGRAM_OUTPUT:
+ {
+ gl_shader_variable *var = (gl_shader_variable*) res->Data;
+ return var->name;
+ }
+ case GL_UNIFORM:
+ {
+ struct gl_uniform_storage *store =
+ (struct gl_uniform_storage*) res->Data;
+ return store->name;
+ }
+ case GL_UNIFORM_BLOCK:
+ {
+ struct gl_uniform_block *ubo =
+ (struct gl_uniform_block*) res->Data;
+ return ubo->Name;
+ }
+ case GL_ATOMIC_COUNTER_BUFFER:
+ {
+ return "";
+ }
+ case GL_VERTEX_SUBROUTINE:
+ case GL_GEOMETRY_SUBROUTINE:
+ case GL_FRAGMENT_SUBROUTINE:
+ case GL_COMPUTE_SUBROUTINE:
+ case GL_TESS_CONTROL_SUBROUTINE:
+ case GL_TESS_EVALUATION_SUBROUTINE:
+ {
+ struct gl_subroutine_function *func =
+ (struct gl_subroutine_function *) res->Data;
+ return func->name;
+ }
+ case GL_VERTEX_SUBROUTINE_UNIFORM:
+ case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+ case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+ {
+ struct gl_uniform_storage *store =
+ (struct gl_uniform_storage*) res->Data;
+ return store->name + MESA_SUBROUTINE_PREFIX_LEN;
+ }
+ default:
+ return "ERR";
+ }
+}
+
+static void
+debug_print_resources(struct gl_shader_program *shProg)
+{
+ printf("PROGRAM %p RESOURCE LIST\n", shProg);
+ printf("%-10s %-25s %-10s\n", "TYPE", "NAME", "STAGEREF");
+ printf("-----------------------------------------------------\n");
+ struct gl_program_resource *res = shProg->data->ProgramResourceList;
+ for (unsigned i = 0; i < shProg->data->NumProgramResourceList; i++, res++) {
+ printf("%-10s %-25s ", str_from_type(res->Type), resource_name(res));
+ printf("[");
+ for (unsigned j = 0; j < 8; j++) {
+ if (res->StageReferences & (1 << j))
+ printf("x");
+ else
+ printf("_");
+ }
+ printf("]");
+
+ if (res->Type == GL_UNIFORM) {
+ struct gl_uniform_storage *uni = (struct gl_uniform_storage *) res->Data;
+ printf(" loc %d", uni->remap_location);
+ }
+
+ printf("\n");
+ }
+ printf("\n");
+}
+
/**
* Builds up a list of program resources that point to existing
* resource data.
@@ -4587,6 +4714,8 @@ build_program_resource_list(struct gl_context *ctx,
}
}
+ debug_print_resources(shProg);
+
_mesa_set_destroy(resource_set, NULL);
}