Lines Matching refs:shader

40 get_deref_info(nir_shader *shader, nir_variable *var, nir_deref_instr *deref,  in get_deref_info()  argument
46 const bool per_vertex = nir_is_per_vertex_io(var, shader->info.stage); in get_deref_info()
82 set_io_mask(nir_shader *shader, nir_variable *var, int offset, int len, in set_io_mask() argument
107 get_deref_info(shader, var, deref, &cross_invocation, &indirect); in set_io_mask()
111 shader->info.patch_inputs_read |= bitfield; in set_io_mask()
113 shader->info.patch_inputs_read_indirectly |= bitfield; in set_io_mask()
115 shader->info.inputs_read |= bitfield; in set_io_mask()
117 shader->info.inputs_read_indirectly |= bitfield; in set_io_mask()
120 if (cross_invocation && shader->info.stage == MESA_SHADER_TESS_CTRL) in set_io_mask()
121 shader->info.tess.tcs_cross_invocation_inputs_read |= bitfield; in set_io_mask()
123 if (shader->info.stage == MESA_SHADER_FRAGMENT) { in set_io_mask()
124 shader->info.fs.uses_sample_qualifier |= var->data.sample; in set_io_mask()
130 shader->info.patch_outputs_read |= bitfield; in set_io_mask()
132 shader->info.patch_outputs_accessed_indirectly |= bitfield; in set_io_mask()
134 shader->info.outputs_read |= bitfield; in set_io_mask()
136 shader->info.outputs_accessed_indirectly |= bitfield; in set_io_mask()
139 if (cross_invocation && shader->info.stage == MESA_SHADER_TESS_CTRL) in set_io_mask()
140 shader->info.tess.tcs_cross_invocation_outputs_read |= bitfield; in set_io_mask()
143 shader->info.patch_outputs_written |= bitfield; in set_io_mask()
145 shader->info.patch_outputs_accessed_indirectly |= bitfield; in set_io_mask()
147 shader->info.outputs_written |= bitfield; in set_io_mask()
149 shader->info.outputs_accessed_indirectly |= bitfield; in set_io_mask()
155 shader->info.outputs_read |= bitfield; in set_io_mask()
156 if (shader->info.stage == MESA_SHADER_FRAGMENT) in set_io_mask()
157 shader->info.fs.uses_fbfetch_output = true; in set_io_mask()
160 if (shader->info.stage == MESA_SHADER_FRAGMENT && in set_io_mask()
162 shader->info.fs.color_is_dual_source = true; in set_io_mask()
172 mark_whole_variable(nir_shader *shader, nir_variable *var, in mark_whole_variable() argument
177 if (nir_is_per_vertex_io(var, shader->info.stage)) { in mark_whole_variable()
188 assert(!nir_is_per_vertex_io(var, shader->info.stage)); in mark_whole_variable()
197 set_io_mask(shader, var, 0, slots, deref, is_output_read); in mark_whole_variable()
230 try_mask_partial_io(nir_shader *shader, nir_variable *var, in try_mask_partial_io() argument
234 bool per_vertex = nir_is_per_vertex_io(var, shader->info.stage); in try_mask_partial_io()
296 set_io_mask(shader, var, offset, elem_width, deref, is_output_read); in try_mask_partial_io()
301 update_memory_written_for_deref(nir_shader *shader, nir_deref_instr *deref) in update_memory_written_for_deref() argument
304 shader->info.writes_memory = true; in update_memory_written_for_deref()
308 gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, in gather_intrinsic_info() argument
318 assert((shader->info.stage == MESA_SHADER_TESS_EVAL && in gather_intrinsic_info()
320 (shader->info.stage == MESA_SHADER_TESS_CTRL && in gather_intrinsic_info()
334 shader->info.fs.uses_demote = true; in gather_intrinsic_info()
341 if (shader->info.stage == MESA_SHADER_FRAGMENT) in gather_intrinsic_info()
342 shader->info.fs.uses_discard = true; in gather_intrinsic_info()
347 assert(shader->info.stage == MESA_SHADER_FRAGMENT); in gather_intrinsic_info()
348 shader->info.fs.uses_discard = true; in gather_intrinsic_info()
366 if (!try_mask_partial_io(shader, var, deref, is_output_read)) in gather_intrinsic_info()
367 mark_whole_variable(shader, var, deref, is_output_read); in gather_intrinsic_info()
371 if (shader->info.stage == MESA_SHADER_VERTEX && in gather_intrinsic_info()
376 shader->info.vs.double_inputs |= BITFIELD64_BIT(idx); in gather_intrinsic_info()
381 update_memory_written_for_deref(shader, deref); in gather_intrinsic_info()
389 if (shader->info.stage == MESA_SHADER_TESS_EVAL && in gather_intrinsic_info()
391 shader->info.patch_inputs_read |= slot_mask; in gather_intrinsic_info()
393 shader->info.patch_inputs_read_indirectly |= slot_mask; in gather_intrinsic_info()
395 shader->info.inputs_read |= slot_mask; in gather_intrinsic_info()
397 shader->info.inputs_read_indirectly |= slot_mask; in gather_intrinsic_info()
400 if (shader->info.stage == MESA_SHADER_TESS_CTRL && in gather_intrinsic_info()
403 shader->info.tess.tcs_cross_invocation_inputs_read |= slot_mask; in gather_intrinsic_info()
408 if (shader->info.stage == MESA_SHADER_TESS_CTRL && in gather_intrinsic_info()
410 shader->info.patch_outputs_read |= slot_mask; in gather_intrinsic_info()
412 shader->info.patch_outputs_accessed_indirectly |= slot_mask; in gather_intrinsic_info()
414 shader->info.outputs_read |= slot_mask; in gather_intrinsic_info()
416 shader->info.outputs_accessed_indirectly |= slot_mask; in gather_intrinsic_info()
419 if (shader->info.stage == MESA_SHADER_TESS_CTRL && in gather_intrinsic_info()
422 shader->info.tess.tcs_cross_invocation_outputs_read |= slot_mask; in gather_intrinsic_info()
424 if (shader->info.stage == MESA_SHADER_FRAGMENT && in gather_intrinsic_info()
426 shader->info.fs.uses_fbfetch_output = true; in gather_intrinsic_info()
431 if (shader->info.stage == MESA_SHADER_TESS_CTRL && in gather_intrinsic_info()
433 shader->info.patch_outputs_written |= slot_mask; in gather_intrinsic_info()
435 shader->info.patch_outputs_accessed_indirectly |= slot_mask; in gather_intrinsic_info()
437 shader->info.outputs_written |= slot_mask; in gather_intrinsic_info()
439 shader->info.outputs_accessed_indirectly |= slot_mask; in gather_intrinsic_info()
442 if (shader->info.stage == MESA_SHADER_FRAGMENT && in gather_intrinsic_info()
444 shader->info.fs.color_is_dual_source = true; in gather_intrinsic_info()
449 shader->info.inputs_read |= in gather_intrinsic_info()
500 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
507 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
510 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
518 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
521 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
529 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
532 BITSET_SET(shader->info.system_values_read, in gather_intrinsic_info()
535 if (shader->info.stage == MESA_SHADER_FRAGMENT) in gather_intrinsic_info()
536 shader->info.fs.uses_sample_qualifier = true; in gather_intrinsic_info()
543 if (shader->info.stage == MESA_SHADER_FRAGMENT) in gather_intrinsic_info()
544 shader->info.fs.needs_helper_invocations = true; in gather_intrinsic_info()
549 assert(shader->info.stage == MESA_SHADER_GEOMETRY); in gather_intrinsic_info()
550 shader->info.gs.uses_end_primitive = 1; in gather_intrinsic_info()
555 shader->info.gs.active_stream_mask |= 1 << nir_intrinsic_stream_id(instr); in gather_intrinsic_info()
671 shader->info.writes_memory = true; in gather_intrinsic_info()
684 update_memory_written_for_deref(shader, nir_src_as_deref(instr->src[0])); in gather_intrinsic_info()
693 gather_tex_info(nir_tex_instr *instr, nir_shader *shader) in gather_tex_info() argument
695 if (shader->info.stage == MESA_SHADER_FRAGMENT && in gather_tex_info()
697 shader->info.fs.needs_helper_invocations = true; in gather_tex_info()
701 shader->info.uses_texture_gather = true; in gather_tex_info()
709 gather_alu_info(nir_alu_instr *instr, nir_shader *shader) in gather_alu_info() argument
714 shader->info.uses_fddx_fddy = true; in gather_alu_info()
720 if (shader->info.stage == MESA_SHADER_FRAGMENT) in gather_alu_info()
721 shader->info.fs.needs_helper_invocations = true; in gather_alu_info()
731 shader->info.bit_sizes_float |= nir_src_bit_size(instr->src[i].src); in gather_alu_info()
733 shader->info.bit_sizes_int |= nir_src_bit_size(instr->src[i].src); in gather_alu_info()
736 shader->info.bit_sizes_float |= nir_dest_bit_size(instr->dest.dest); in gather_alu_info()
738 shader->info.bit_sizes_int |= nir_dest_bit_size(instr->dest.dest); in gather_alu_info()
742 gather_info_block(nir_block *block, nir_shader *shader, void *dead_ctx) in gather_info_block() argument
747 gather_alu_info(nir_instr_as_alu(instr), shader); in gather_info_block()
750 gather_intrinsic_info(nir_instr_as_intrinsic(instr), shader, dead_ctx); in gather_info_block()
753 gather_tex_info(nir_instr_as_tex(instr), shader); in gather_info_block()
765 nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint) in nir_shader_gather_info() argument
767 shader->info.num_textures = 0; in nir_shader_gather_info()
768 shader->info.num_images = 0; in nir_shader_gather_info()
769 shader->info.image_buffers = 0; in nir_shader_gather_info()
770 shader->info.msaa_images = 0; in nir_shader_gather_info()
771 shader->info.bit_sizes_float = 0; in nir_shader_gather_info()
772 shader->info.bit_sizes_int = 0; in nir_shader_gather_info()
774 nir_foreach_uniform_variable(var, shader) { in nir_shader_gather_info()
782 shader->info.num_textures += glsl_type_get_sampler_count(var->type); in nir_shader_gather_info()
789 shader->info.image_buffers |= in nir_shader_gather_info()
790 BITFIELD_RANGE(shader->info.num_images, num_image_slots); in nir_shader_gather_info()
793 shader->info.msaa_images |= in nir_shader_gather_info()
794 BITFIELD_RANGE(shader->info.num_images, num_image_slots); in nir_shader_gather_info()
796 shader->info.num_images += num_image_slots; in nir_shader_gather_info()
800 shader->info.inputs_read = 0; in nir_shader_gather_info()
801 shader->info.outputs_written = 0; in nir_shader_gather_info()
802 shader->info.outputs_read = 0; in nir_shader_gather_info()
803 shader->info.patch_outputs_read = 0; in nir_shader_gather_info()
804 shader->info.patch_inputs_read = 0; in nir_shader_gather_info()
805 shader->info.patch_outputs_written = 0; in nir_shader_gather_info()
806 BITSET_ZERO(shader->info.system_values_read); in nir_shader_gather_info()
807 shader->info.inputs_read_indirectly = 0; in nir_shader_gather_info()
808 shader->info.outputs_accessed_indirectly = 0; in nir_shader_gather_info()
809 shader->info.patch_inputs_read_indirectly = 0; in nir_shader_gather_info()
810 shader->info.patch_outputs_accessed_indirectly = 0; in nir_shader_gather_info()
812 if (shader->info.stage == MESA_SHADER_VERTEX) { in nir_shader_gather_info()
813 shader->info.vs.double_inputs = 0; in nir_shader_gather_info()
815 if (shader->info.stage == MESA_SHADER_FRAGMENT) { in nir_shader_gather_info()
816 shader->info.fs.uses_sample_qualifier = false; in nir_shader_gather_info()
817 shader->info.fs.uses_discard = false; in nir_shader_gather_info()
818 shader->info.fs.uses_demote = false; in nir_shader_gather_info()
819 shader->info.fs.color_is_dual_source = false; in nir_shader_gather_info()
820 shader->info.fs.uses_fbfetch_output = false; in nir_shader_gather_info()
821 shader->info.fs.needs_helper_invocations = false; in nir_shader_gather_info()
823 if (shader->info.stage == MESA_SHADER_TESS_CTRL) { in nir_shader_gather_info()
824 shader->info.tess.tcs_cross_invocation_inputs_read = 0; in nir_shader_gather_info()
825 shader->info.tess.tcs_cross_invocation_outputs_read = 0; in nir_shader_gather_info()
828 shader->info.writes_memory = shader->info.has_transform_feedback_varyings; in nir_shader_gather_info()
832 gather_info_block(block, shader, dead_ctx); in nir_shader_gather_info()