Lines Matching refs:ir

73    void create_function(ir_function_signature *ir);
77 nir_ssa_def *evaluate_rvalue(ir_rvalue *ir);
93 nir_deref_var *evaluate_deref(nir_instr *mem_ctx, ir_instruction *ir);
157 v2.run(sh->ir); in glsl_to_nir()
158 visit_exec_list(sh->ir, &v1); in glsl_to_nir()
209 nir_visitor::evaluate_deref(nir_instr *mem_ctx, ir_instruction *ir) in evaluate_deref() argument
211 ir->accept(this); in evaluate_deref()
217 constant_copy(ir_constant *ir, void *mem_ctx) in constant_copy() argument
219 if (ir == NULL) in constant_copy()
224 const unsigned rows = ir->type->vector_elements; in constant_copy()
225 const unsigned cols = ir->type->matrix_columns; in constant_copy()
229 switch (ir->type->base_type) { in constant_copy()
235 ret->values[0].u32[r] = ir->value.u[r]; in constant_copy()
244 ret->values[0].i32[r] = ir->value.i[r]; in constant_copy()
251 ret->values[c].f32[r] = ir->value.f[c * rows + r]; in constant_copy()
258 ret->values[c].f64[r] = ir->value.d[c * rows + r]; in constant_copy()
267 ret->values[0].u64[r] = ir->value.u64[r]; in constant_copy()
275 ret->values[0].i64[r] = ir->value.i64[r]; in constant_copy()
283 ret->values[0].u32[r] = ir->value.b[r] ? NIR_TRUE : NIR_FALSE; in constant_copy()
290 ir->type->length); in constant_copy()
291 ret->num_elements = ir->type->length; in constant_copy()
293 for (i = 0; i < ir->type->length; i++) in constant_copy()
294 ret->elements[i] = constant_copy(ir->const_elements[i], mem_ctx); in constant_copy()
305 nir_visitor::visit(ir_variable *ir) in visit() argument
311 if (ir->data.mode == ir_var_shader_shared) in visit()
315 var->type = ir->type; in visit()
316 var->name = ralloc_strdup(var, ir->name); in visit()
318 var->data.always_active_io = ir->data.always_active_io; in visit()
319 var->data.read_only = ir->data.read_only; in visit()
320 var->data.centroid = ir->data.centroid; in visit()
321 var->data.sample = ir->data.sample; in visit()
322 var->data.patch = ir->data.patch; in visit()
323 var->data.invariant = ir->data.invariant; in visit()
324 var->data.location = ir->data.location; in visit()
325 var->data.stream = ir->data.stream; in visit()
328 switch(ir->data.mode) { in visit()
346 ir->data.location == VARYING_SLOT_FACE) { in visit()
351 ir->data.location == VARYING_SLOT_PRIMITIVE_ID) { in visit()
359 (ir->data.location == VARYING_SLOT_TESS_LEVEL_INNER || in visit()
360 ir->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)) { in visit()
361 var->data.compact = ir->type->without_array()->is_scalar(); in visit()
377 (ir->data.location == VARYING_SLOT_TESS_LEVEL_INNER || in visit()
378 ir->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)) { in visit()
379 var->data.compact = ir->type->without_array()->is_scalar(); in visit()
399 var->data.interpolation = ir->data.interpolation; in visit()
400 var->data.origin_upper_left = ir->data.origin_upper_left; in visit()
401 var->data.pixel_center_integer = ir->data.pixel_center_integer; in visit()
402 var->data.location_frac = ir->data.location_frac; in visit()
404 switch (ir->data.depth_layout) { in visit()
424 var->data.index = ir->data.index; in visit()
426 var->data.binding = ir->data.binding; in visit()
427 var->data.offset = ir->data.offset; in visit()
428 var->data.image.read_only = ir->data.memory_read_only; in visit()
429 var->data.image.write_only = ir->data.memory_write_only; in visit()
430 var->data.image.coherent = ir->data.memory_coherent; in visit()
431 var->data.image._volatile = ir->data.memory_volatile; in visit()
432 var->data.image.restrict_flag = ir->data.memory_restrict; in visit()
433 var->data.image.format = ir->data.image_format; in visit()
434 var->data.fb_fetch_output = ir->data.fb_fetch_output; in visit()
436 var->num_state_slots = ir->get_num_state_slots(); in visit()
441 ir_state_slot *state_slots = ir->get_state_slots(); in visit()
451 var->constant_initializer = constant_copy(ir->constant_initializer, var); in visit()
453 var->interface_type = ir->get_interface_type(); in visit()
460 _mesa_hash_table_insert(var_table, ir, var); in visit()
465 nir_function_visitor::visit_enter(ir_function *ir) in visit_enter() argument
467 foreach_in_list(ir_function_signature, sig, &ir->signatures) { in visit_enter()
474 nir_visitor::create_function(ir_function_signature *ir) in create_function() argument
476 if (ir->is_intrinsic()) in create_function()
479 nir_function *func = nir_function_create(shader, ir->function_name()); in create_function()
481 assert(ir->parameters.is_empty()); in create_function()
482 assert(ir->return_type == glsl_type::void_type); in create_function()
484 _mesa_hash_table_insert(this->overload_table, ir, func); in create_function()
488 nir_visitor::visit(ir_function *ir) in visit() argument
490 foreach_in_list(ir_function_signature, sig, &ir->signatures) in visit()
495 nir_visitor::visit(ir_function_signature *ir) in visit() argument
497 if (ir->is_intrinsic()) in visit()
501 _mesa_hash_table_search(this->overload_table, ir); in visit()
506 if (ir->is_defined) { in visit()
511 assert(ir->parameters.is_empty()); in visit()
518 visit_exec_list(&ir->body, this); in visit()
527 nir_visitor::visit(ir_loop *ir) in visit() argument
530 visit_exec_list(&ir->body_instructions, this); in visit()
535 nir_visitor::visit(ir_if *ir) in visit() argument
537 nir_push_if(&b, evaluate_rvalue(ir->condition)); in visit()
538 visit_exec_list(&ir->then_instructions, this); in visit()
540 visit_exec_list(&ir->else_instructions, this); in visit()
545 nir_visitor::visit(ir_discard *ir) in visit() argument
555 if (ir->condition) { in visit()
559 nir_src_for_ssa(evaluate_rvalue(ir->condition)); in visit()
568 nir_visitor::visit(ir_emit_vertex *ir) in visit() argument
572 nir_intrinsic_set_stream_id(instr, ir->stream_id()); in visit()
577 nir_visitor::visit(ir_end_primitive *ir) in visit() argument
581 nir_intrinsic_set_stream_id(instr, ir->stream_id()); in visit()
586 nir_visitor::visit(ir_loop_jump *ir) in visit() argument
589 switch (ir->mode) { in visit()
605 nir_visitor::visit(ir_return *ir) in visit() argument
607 if (ir->value != NULL) { in visit()
612 copy->variables[1] = evaluate_deref(&copy->instr, ir->value); in visit()
620 nir_visitor::visit(ir_call *ir) in visit() argument
622 if (ir->callee->is_intrinsic()) { in visit()
625 switch (ir->callee->intrinsic_id) { in visit()
717 assert(ir->return_deref); in visit()
718 if (ir->return_deref->type == glsl_type::int_type) in visit()
720 else if (ir->return_deref->type == glsl_type::uint_type) in visit()
726 assert(ir->return_deref); in visit()
727 if (ir->return_deref->type == glsl_type::int_type) in visit()
729 else if (ir->return_deref->type == glsl_type::uint_type) in visit()
777 assert(ir->return_deref); in visit()
778 if (ir->return_deref->type == glsl_type::int_type) in visit()
780 else if (ir->return_deref->type == glsl_type::uint_type) in visit()
786 assert(ir->return_deref); in visit()
787 if (ir->return_deref->type == glsl_type::int_type) in visit()
789 else if (ir->return_deref->type == glsl_type::uint_type) in visit()
838 exec_node *param = ir->actual_parameters.get_head(); in visit()
845 if (ir->return_deref) { in visit()
882 exec_node *param = ir->actual_parameters.get_head(); in visit()
891 if (ir->return_deref) { in visit()
892 unsigned num_components = ir->return_deref->type->vector_elements; in visit()
962 exec_node *param = ir->actual_parameters.get_head(); in visit()
985 exec_node *param = ir->actual_parameters.get_head(); in visit()
994 const glsl_type *type = ir->return_deref->var->type; in visit()
1040 int param_count = ir->actual_parameters.length(); in visit()
1044 exec_node *param = ir->actual_parameters.get_head(); in visit()
1067 assert(ir->return_deref); in visit()
1069 ir->return_deref->type->vector_elements, 32, NULL); in visit()
1074 exec_node *param = ir->actual_parameters.get_head(); in visit()
1080 const glsl_type *type = ir->return_deref->var->type; in visit()
1092 exec_node *param = ir->actual_parameters.get_head(); in visit()
1123 int param_count = ir->actual_parameters.length(); in visit()
1127 exec_node *param = ir->actual_parameters.get_head(); in visit()
1146 assert(ir->return_deref); in visit()
1147 unsigned bit_size = glsl_get_bit_size(ir->return_deref->type); in visit()
1149 ir->return_deref->type->vector_elements, in visit()
1159 ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); in visit()
1168 ir->return_deref->type->vector_elements, 64, NULL); in visit()
1169 instr->num_components = ir->return_deref->type->vector_elements; in visit()
1171 ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); in visit()
1179 ir->return_deref->type->vector_elements, 32, NULL); in visit()
1180 instr->num_components = ir->return_deref->type->vector_elements; in visit()
1182 ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); in visit()
1185 ir_rvalue *invocation = (ir_rvalue *) ir->actual_parameters.get_head()->next; in visit()
1193 ir->return_deref->type->vector_elements, 32, NULL); in visit()
1194 instr->num_components = ir->return_deref->type->vector_elements; in visit()
1196 ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); in visit()
1206 if (ir->return_deref) { in visit()
1209 store_instr->num_components = ir->return_deref->type->vector_elements; in visit()
1214 evaluate_deref(&store_instr->instr, ir->return_deref); in visit()
1224 _mesa_hash_table_search(this->overload_table, ir->callee); in visit()
1231 foreach_in_list(ir_dereference, param, &ir->actual_parameters) { in visit()
1236 instr->return_deref = evaluate_deref(&instr->instr, ir->return_deref); in visit()
1241 nir_visitor::visit(ir_assignment *ir) in visit() argument
1243 unsigned num_components = ir->lhs->type->vector_elements; in visit()
1245 b.exact = ir->lhs->variable_referenced()->data.invariant || in visit()
1246 ir->lhs->variable_referenced()->data.precise; in visit()
1248 if ((ir->rhs->as_dereference() || ir->rhs->as_constant()) && in visit()
1249 (ir->write_mask == (1 << num_components) - 1 || ir->write_mask == 0)) { in visit()
1254 copy->variables[0] = evaluate_deref(&copy->instr, ir->lhs); in visit()
1255 copy->variables[1] = evaluate_deref(&copy->instr, ir->rhs); in visit()
1257 if (ir->condition) { in visit()
1258 nir_push_if(&b, evaluate_rvalue(ir->condition)); in visit()
1267 assert(ir->rhs->type->is_scalar() || ir->rhs->type->is_vector()); in visit()
1269 ir->lhs->accept(this); in visit()
1271 nir_ssa_def *src = evaluate_rvalue(ir->rhs); in visit()
1273 if (ir->write_mask != (1 << num_components) - 1 && ir->write_mask != 0) { in visit()
1282 swiz[i] = ir->write_mask & (1 << i) ? component++ : 0; in visit()
1289 store->num_components = ir->lhs->type->vector_elements; in visit()
1290 nir_intrinsic_set_write_mask(store, ir->write_mask); in visit()
1294 if (ir->condition) { in visit()
1295 nir_push_if(&b, evaluate_rvalue(ir->condition)); in visit()
1357 nir_visitor::evaluate_rvalue(ir_rvalue* ir) in evaluate_rvalue() argument
1359 ir->accept(this); in evaluate_rvalue()
1360 if (ir->as_dereference() || ir->as_constant()) { in evaluate_rvalue()
1368 load_instr->num_components = ir->type->vector_elements; in evaluate_rvalue()
1371 unsigned bit_size = glsl_get_bit_size(ir->type); in evaluate_rvalue()
1372 add_instr(&load_instr->instr, ir->type->vector_elements, bit_size); in evaluate_rvalue()
1393 nir_visitor::visit(ir_expression *ir) in visit() argument
1396 switch (ir->operation) { in visit()
1400 unsigned bit_size = glsl_get_bit_size(ir->type); in visit()
1401 load->num_components = ir->type->vector_elements; in visit()
1402 load->src[0] = nir_src_for_ssa(evaluate_rvalue(ir->operands[0])); in visit()
1403 load->src[1] = nir_src_for_ssa(evaluate_rvalue(ir->operands[1])); in visit()
1404 add_instr(&load->instr, ir->type->vector_elements, bit_size); in visit()
1411 if (ir->type->is_boolean()) in visit()
1420 ir_dereference *deref = ir->operands[0]->as_dereference(); in visit()
1426 swizzle = ir->operands[0]->as_swizzle(); in visit()
1436 switch (ir->operation) { in visit()
1467 intrin->src[0] = nir_src_for_ssa(evaluate_rvalue(ir->operands[1])); in visit()
1489 for (unsigned i = 0; i < ir->num_operands; i++) in visit()
1490 srcs[i] = evaluate_rvalue(ir->operands[i]); in visit()
1493 for (unsigned i = 0; i < ir->num_operands; i++) in visit()
1495 types[i] = ir->operands[i]->type->base_type; in visit()
1501 out_type = ir->type->base_type; in visit()
1505 switch (ir->operation) { in visit()
1680 switch (ir->type->vector_elements) { in visit()
1682 switch (ir->operands[0]->type->vector_elements) { in visit()
1691 switch (ir->operands[0]->type->vector_elements) { in visit()
1700 switch (ir->operands[0]->type->vector_elements) { in visit()
1709 switch (ir->operands[0]->type->vector_elements) { in visit()
1725 load->num_components = ir->type->vector_elements; in visit()
1726 load->src[0] = nir_src_for_ssa(evaluate_rvalue(ir->operands[0])); in visit()
1727 unsigned bit_size = glsl_get_bit_size(ir->type); in visit()
1728 add_instr(&load->instr, ir->type->vector_elements, bit_size); in visit()
1846 switch (ir->operands[0]->type->vector_elements) { in visit()
1855 switch (ir->operands[0]->type->vector_elements) { in visit()
1865 switch (ir->operands[0]->type->vector_elements) { in visit()
1878 switch (ir->operands[0]->type->vector_elements) { in visit()
1887 switch (ir->operands[0]->type->vector_elements) { in visit()
1897 switch (ir->operands[0]->type->vector_elements) { in visit()
1908 switch (ir->operands[0]->type->vector_elements) { in visit()
1939 result = nir_vec(&b, srcs, ir->type->vector_elements); in visit()
1948 nir_visitor::visit(ir_swizzle *ir) in visit() argument
1950 unsigned swizzle[4] = { ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w }; in visit()
1951 result = nir_swizzle(&b, evaluate_rvalue(ir->val), swizzle, in visit()
1952 ir->type->vector_elements, !supports_ints); in visit()
1956 nir_visitor::visit(ir_texture *ir) in visit() argument
1960 switch (ir->op) { in visit()
1968 op = (ir->op == ir_txb) ? nir_texop_txb : nir_texop_txl; in visit()
1979 if (ir->lod_info.lod != NULL) in visit()
1992 if (ir->lod_info.lod != NULL) in visit()
2027 if (ir->projector != NULL) in visit()
2029 if (ir->shadow_comparator != NULL) in visit()
2031 if (ir->offset != NULL) in visit()
2038 (glsl_sampler_dim) ir->sampler->type->sampler_dimensionality; in visit()
2039 instr->is_array = ir->sampler->type->sampler_array; in visit()
2040 instr->is_shadow = ir->sampler->type->sampler_shadow; in visit()
2042 instr->is_new_style_shadow = (ir->type->vector_elements == 1); in visit()
2043 switch (ir->type->base_type) { in visit()
2058 instr->texture = evaluate_deref(&instr->instr, ir->sampler); in visit()
2062 if (ir->coordinate != NULL) { in visit()
2063 instr->coord_components = ir->coordinate->type->vector_elements; in visit()
2065 nir_src_for_ssa(evaluate_rvalue(ir->coordinate)); in visit()
2070 if (ir->projector != NULL) { in visit()
2072 nir_src_for_ssa(evaluate_rvalue(ir->projector)); in visit()
2077 if (ir->shadow_comparator != NULL) { in visit()
2079 nir_src_for_ssa(evaluate_rvalue(ir->shadow_comparator)); in visit()
2084 if (ir->offset != NULL) { in visit()
2086 assert(ir->offset->type->is_vector() || ir->offset->type->is_scalar()); in visit()
2089 nir_src_for_ssa(evaluate_rvalue(ir->offset)); in visit()
2094 switch (ir->op) { in visit()
2097 nir_src_for_ssa(evaluate_rvalue(ir->lod_info.bias)); in visit()
2105 if (ir->lod_info.lod != NULL) { in visit()
2107 nir_src_for_ssa(evaluate_rvalue(ir->lod_info.lod)); in visit()
2115 nir_src_for_ssa(evaluate_rvalue(ir->lod_info.grad.dPdx)); in visit()
2119 nir_src_for_ssa(evaluate_rvalue(ir->lod_info.grad.dPdy)); in visit()
2126 nir_src_for_ssa(evaluate_rvalue(ir->lod_info.sample_index)); in visit()
2132 instr->component = ir->lod_info.component->as_constant()->value.u[0]; in visit()
2141 unsigned bit_size = glsl_get_bit_size(ir->type); in visit()
2146 nir_visitor::visit(ir_constant *ir) in visit() argument
2155 nir_local_variable_create(this->impl, ir->type, "const_temp"); in visit()
2157 var->constant_initializer = constant_copy(ir, var); in visit()
2164 nir_visitor::visit(ir_dereference_variable *ir) in visit() argument
2167 _mesa_hash_table_search(this->var_table, ir->var); in visit()
2177 nir_visitor::visit(ir_dereference_record *ir) in visit() argument
2179 ir->record->accept(this); in visit()
2181 int field_index = ir->field_idx; in visit()
2185 deref->deref.type = ir->type; in visit()
2191 nir_visitor::visit(ir_dereference_array *ir) in visit() argument
2194 deref->deref.type = ir->type; in visit()
2196 ir_constant *const_index = ir->array_index->as_constant(); in visit()
2203 nir_src_for_ssa(evaluate_rvalue(ir->array_index)); in visit()
2206 ir->array->accept(this); in visit()