diff options
author | Tapani Pälli <tapani.palli@intel.com> | 2016-10-06 14:55:39 +0300 |
---|---|---|
committer | Tapani Pälli <tapani.palli@intel.com> | 2019-04-18 10:32:24 +0300 |
commit | edddf97a719dec0f4b6f2d8fc1dc72d6ddcb31bb (patch) | |
tree | af6a0b066c051f95fb4adf06eab803291a2521ab | |
parent | 829f278ad0042b0bb5026b10e7393fa3e11498b2 (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.cpp | 129 |
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); } |