X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fnir%2Fnir_print.c;h=9daaba7738575fb81638f9a47d4364f8b30e4525;hb=025bdbac3e09ae9bac9eefb831e9446b9574d120;hp=d4bc70a6aef59f7f95f8826497aa30761f7cbe4a;hpb=7acc81056f7ac6a869ef6403573b2572c77dbecf;p=mesa.git diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index d4bc70a6aef..9daaba77385 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -399,6 +399,7 @@ print_constant(nir_constant *c, const struct glsl_type *type, print_state *state break; case GLSL_TYPE_STRUCT: + case GLSL_TYPE_INTERFACE: for (i = 0; i < c->num_elements; i++) { if (i > 0) fprintf(fp, ", "); fprintf(fp, "{ "); @@ -461,8 +462,10 @@ print_var_decl(nir_variable *var, print_state *state) const char *const samp = (var->data.sample) ? "sample " : ""; const char *const patch = (var->data.patch) ? "patch " : ""; const char *const inv = (var->data.invariant) ? "invariant " : ""; - fprintf(fp, "%s%s%s%s%s %s ", - cent, samp, patch, inv, get_variable_mode_str(var->data.mode, false), + const char *const per_view = (var->data.per_view) ? "per_view " : ""; + fprintf(fp, "%s%s%s%s%s%s %s ", + cent, samp, patch, inv, per_view, + get_variable_mode_str(var->data.mode, false), glsl_interp_mode_name(var->data.interpolation)); enum gl_access_qualifier access = var->data.access; @@ -478,6 +481,16 @@ print_var_decl(nir_variable *var, print_state *state) fprintf(fp, "%s ", util_format_short_name(var->data.image.format)); } + if (var->data.precision) { + const char *precisions[] = { + "", + "highp", + "mediump", + "lowp", + }; + fprintf(fp, "%s ", precisions[var->data.precision]); + } + fprintf(fp, "%s %s", glsl_get_type_name(var->type), get_var_name(var, state)); @@ -714,6 +727,26 @@ vulkan_descriptor_type_name(VkDescriptorType type) } } +static void +print_alu_type(nir_alu_type type, print_state *state) +{ + FILE *fp = state->fp; + unsigned size = nir_alu_type_get_type_size(type); + const char *name; + + switch (nir_alu_type_get_base_type(type)) { + case nir_type_int: name = "int"; break; + case nir_type_uint: name = "uint"; break; + case nir_type_bool: name = "bool"; break; + case nir_type_float: name = "float"; break; + default: name = "invalid"; + } + if (size) + fprintf(fp, "%s%u", name, size); + else + fprintf(fp, "%s", name); +} + static void print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) { @@ -774,6 +807,7 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) [NIR_INTRINSIC_MEMORY_SEMANTICS] = "mem_semantics", [NIR_INTRINSIC_MEMORY_MODES] = "mem_modes", [NIR_INTRINSIC_MEMORY_SCOPE] = "mem_scope", + [NIR_INTRINSIC_EXECUTION_SCOPE] = "exec_scope", }; for (unsigned idx = 1; idx < NIR_INTRINSIC_NUM_INDEX_FLAGS; idx++) { if (!info->index_map[idx]) @@ -827,20 +861,8 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) } case NIR_INTRINSIC_TYPE: { - nir_alu_type type = nir_intrinsic_type(instr); - unsigned size = nir_alu_type_get_type_size(type); - const char *name; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_int: name = "int"; break; - case nir_type_uint: name = "uint"; break; - case nir_type_bool: name = "bool"; break; - case nir_type_float: name = "float"; break; - default: name = "invalid"; - } - if (size) - fprintf(fp, " type=%s%u", name, size); - else - fprintf(fp, " type=%s", name); + fprintf(fp, " type="); + print_alu_type(nir_intrinsic_type(instr), state); break; } @@ -884,9 +906,14 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) break; } + case NIR_INTRINSIC_EXECUTION_SCOPE: case NIR_INTRINSIC_MEMORY_SCOPE: { - fprintf(fp, " mem_scope="); - switch (nir_intrinsic_memory_scope(instr)) { + fprintf(fp, " %s=", index_name[idx]); + nir_scope scope = + idx == NIR_INTRINSIC_MEMORY_SCOPE ? nir_intrinsic_memory_scope(instr) + : nir_intrinsic_execution_scope(instr); + switch (scope) { + case NIR_SCOPE_NONE: fprintf(fp, "NONE"); break; case NIR_SCOPE_DEVICE: fprintf(fp, "DEVICE"); break; case NIR_SCOPE_QUEUE_FAMILY: fprintf(fp, "QUEUE_FAMILY"); break; case NIR_SCOPE_WORKGROUP: fprintf(fp, "WORKGROUP"); break; @@ -909,27 +936,26 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) if (!state->shader) return; - struct exec_list *var_list = NULL; - + nir_variable_mode var_mode; switch (instr->intrinsic) { case nir_intrinsic_load_uniform: - var_list = &state->shader->uniforms; + var_mode = nir_var_uniform; break; case nir_intrinsic_load_input: case nir_intrinsic_load_interpolated_input: case nir_intrinsic_load_per_vertex_input: - var_list = &state->shader->inputs; + var_mode = nir_var_shader_in; break; case nir_intrinsic_load_output: case nir_intrinsic_store_output: case nir_intrinsic_store_per_vertex_output: - var_list = &state->shader->outputs; + var_mode = nir_var_shader_out; break; default: return; } - nir_foreach_variable(var, var_list) { + nir_foreach_variable_with_modes(var, state->shader, var_mode) { if ((var->data.driver_location == nir_intrinsic_base(instr)) && (instr->intrinsic == nir_intrinsic_load_uniform || (nir_intrinsic_component(instr) >= var->data.location_frac && @@ -949,7 +975,9 @@ print_tex_instr(nir_tex_instr *instr, print_state *state) print_dest(&instr->dest, state); - fprintf(fp, " = "); + fprintf(fp, " = ("); + print_alu_type(instr->dest_type, state); + fprintf(fp, ")"); switch (instr->op) { case nir_texop_tex: @@ -1187,6 +1215,19 @@ print_jump_instr(nir_jump_instr *instr, print_state *state) case nir_jump_return: fprintf(fp, "return"); break; + + case nir_jump_goto: + fprintf(fp, "goto block_%u", + instr->target ? instr->target->index : -1); + break; + + case nir_jump_goto_if: + fprintf(fp, "goto block_%u if ", + instr->target ? instr->target->index : -1); + print_src(&instr->condition, state); + fprintf(fp, " else block_%u", + instr->else_target ? instr->else_target->index : -1); + break; } } @@ -1402,7 +1443,7 @@ print_function_impl(nir_function_impl *impl, print_state *state) fprintf(fp, "{\n"); - nir_foreach_variable(var, &impl->locals) { + nir_foreach_function_temp_variable(var, impl) { fprintf(fp, "\t"); print_var_decl(var, state); } @@ -1484,33 +1525,16 @@ nir_print_shader_annotated(nir_shader *shader, FILE *fp, fprintf(fp, "inputs: %u\n", shader->num_inputs); fprintf(fp, "outputs: %u\n", shader->num_outputs); fprintf(fp, "uniforms: %u\n", shader->num_uniforms); + if (shader->info.num_ubos) + fprintf(fp, "ubos: %u\n", shader->info.num_ubos); fprintf(fp, "shared: %u\n", shader->num_shared); if (shader->scratch_size) fprintf(fp, "scratch: %u\n", shader->scratch_size); + if (shader->constant_data_size) + fprintf(fp, "constants: %u\n", shader->constant_data_size); - nir_foreach_variable(var, &shader->uniforms) { + nir_foreach_variable_in_shader(var, shader) print_var_decl(var, &state); - } - - nir_foreach_variable(var, &shader->inputs) { - print_var_decl(var, &state); - } - - nir_foreach_variable(var, &shader->outputs) { - print_var_decl(var, &state); - } - - nir_foreach_variable(var, &shader->shared) { - print_var_decl(var, &state); - } - - nir_foreach_variable(var, &shader->globals) { - print_var_decl(var, &state); - } - - nir_foreach_variable(var, &shader->system_values) { - print_var_decl(var, &state); - } foreach_list_typed(nir_function, func, node, &shader->functions) { print_function(func, &state);