X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fcompiler%2Fnir%2Fnir_gather_info.c;h=03f0d15f73eac52be8b6e7bfee6dbc295ea67516;hp=5f59dd21dd0c833b46ae760cf932616fe869fe18;hb=17af07024dfc8302b37a270cea4ef3eae06fe5e2;hpb=502abfce7f5df1811b619657e2e973916699dbc0 diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 5f59dd21dd0..03f0d15f73e 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -297,6 +297,14 @@ static void gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, void *dead_ctx) { + unsigned slot_mask = 0; + + if (nir_intrinsic_infos[instr->intrinsic].index_map[NIR_INTRINSIC_IO_SEMANTICS] > 0) { + nir_io_semantics semantics = nir_intrinsic_io_semantics(instr); + + slot_mask = BITFIELD64_RANGE(semantics.location, semantics.num_slots); + } + switch (instr->intrinsic) { case nir_intrinsic_demote: case nir_intrinsic_demote_if: @@ -345,6 +353,41 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, break; } + case nir_intrinsic_load_input: + if (shader->info.stage == MESA_SHADER_TESS_EVAL) + shader->info.patch_inputs_read |= slot_mask; + else + shader->info.inputs_read |= slot_mask; + break; + + case nir_intrinsic_load_per_vertex_input: + case nir_intrinsic_load_input_vertex: + case nir_intrinsic_load_interpolated_input: + shader->info.inputs_read |= slot_mask; + break; + + case nir_intrinsic_load_output: + if (shader->info.stage == MESA_SHADER_TESS_CTRL) + shader->info.patch_outputs_read |= slot_mask; + else + shader->info.outputs_read |= slot_mask; + break; + + case nir_intrinsic_load_per_vertex_output: + shader->info.outputs_read |= slot_mask; + break; + + case nir_intrinsic_store_output: + if (shader->info.stage == MESA_SHADER_TESS_CTRL) + shader->info.patch_outputs_written |= slot_mask; + else + shader->info.outputs_written |= slot_mask; + break; + + case nir_intrinsic_store_per_vertex_output: + shader->info.outputs_written |= slot_mask; + break; + case nir_intrinsic_load_draw_id: case nir_intrinsic_load_frag_coord: case nir_intrinsic_load_point_coord: