• Home
  • Raw
  • Download

Lines Matching full:ir

51 #include "ir.h"
89 bool is_distance_vec8(ir_rvalue *ir);
90 ir_rvalue *lower_distance_vec8(ir_rvalue *ir);
92 void visit_new_assignment(ir_assignment *ir);
138 lower_distance_visitor::visit(ir_variable *ir) in visit() argument
143 if (!ir->name || strcmp(ir->name, in_name) != 0) in visit()
145 assert (ir->type->is_array()); in visit()
147 if (ir->data.mode == ir_var_shader_out) { in visit()
152 } else if (ir->data.mode == ir_var_shader_in) { in visit()
163 *old_var = ir; in visit()
169 *new_var = ir->clone(ralloc_parent(ir), NULL); in visit()
173 if (!ir->type->fields.array->is_array()) { in visit()
177 assert((ir->data.mode == ir_var_shader_in && in visit()
179 (ir->data.mode == ir_var_shader_out && in visit()
184 assert (ir->type->fields.array == glsl_type::float_type); in visit()
194 assert((ir->data.mode == ir_var_shader_in && in visit()
199 assert (ir->type->fields.array->fields.array == glsl_type::float_type); in visit()
205 ir->type->array_size()); in visit()
207 ir->replace_with(*new_var); in visit()
209 ir->remove(); in visit()
291 lower_distance_visitor::is_distance_vec8(ir_rvalue *ir) in is_distance_vec8() argument
299 if (!ir->type->is_array()) in is_distance_vec8()
301 if (ir->type->fields.array != glsl_type::float_type) in is_distance_vec8()
305 if (ir->variable_referenced() == this->old_distance_out_var) in is_distance_vec8()
314 if (ir->variable_referenced() == this->old_distance_in_var) in is_distance_vec8()
322 * If the given ir satisfies is_distance_vec8(), return new ir
331 lower_distance_visitor::lower_distance_vec8(ir_rvalue *ir) in lower_distance_vec8() argument
333 if (!ir->type->is_array()) in lower_distance_vec8()
335 if (ir->type->fields.array != glsl_type::float_type) in lower_distance_vec8()
340 if (ir->variable_referenced() == this->old_distance_out_var) in lower_distance_vec8()
344 if (ir->variable_referenced() == this->old_distance_in_var) in lower_distance_vec8()
350 if (ir->as_dereference_variable()) { in lower_distance_vec8()
351 return new(ralloc_parent(ir)) ir_dereference_variable(*new_var); in lower_distance_vec8()
353 ir_dereference_array *array_ref = ir->as_dereference_array(); in lower_distance_vec8()
357 return new(ralloc_parent(ir)) in lower_distance_vec8()
399 lower_distance_visitor::fix_lhs(ir_assignment *ir) in fix_lhs() argument
401 if (ir->lhs->ir_type == ir_type_expression) { in fix_lhs()
402 void *mem_ctx = ralloc_parent(ir); in fix_lhs()
403 ir_expression *const expr = (ir_expression *) ir->lhs; in fix_lhs()
414 ir->rhs = new(mem_ctx) ir_expression(ir_triop_vector_insert, in fix_lhs()
417 ir->rhs, in fix_lhs()
419 ir->set_lhs(new_lhs); in fix_lhs()
420 ir->write_mask = WRITEMASK_XYZW; in fix_lhs()
437 lower_distance_visitor::visit_leave(ir_assignment *ir) in visit_leave() argument
440 * called on ir->rhs and ir->condition. in visit_leave()
442 ir_rvalue_visitor::visit_leave(ir); in visit_leave()
444 if (this->is_distance_vec8(ir->lhs) || in visit_leave()
445 this->is_distance_vec8(ir->rhs)) { in visit_leave()
456 void *ctx = ralloc_parent(ir); in visit_leave()
457 int array_size = ir->lhs->type->array_size(); in visit_leave()
460 ir->lhs->clone(ctx, NULL), new(ctx) ir_constant(i)); in visit_leave()
462 ir->rhs->clone(ctx, NULL), new(ctx) ir_constant(i)); in visit_leave()
480 ir->remove(); in visit_leave()
493 handle_rvalue((ir_rvalue **)&ir->lhs); in visit_leave()
494 this->fix_lhs(ir); in visit_leave()
496 return rvalue_visit(ir); in visit_leave()
507 lower_distance_visitor::visit_new_assignment(ir_assignment *ir) in visit_new_assignment() argument
510 this->base_ir = ir; in visit_new_assignment()
511 ir->accept(this); in visit_new_assignment()
530 lower_distance_visitor::visit_leave(ir_call *ir) in visit_leave() argument
532 void *ctx = ralloc_parent(ir); in visit_leave()
534 const exec_node *formal_param_node = ir->callee->parameters.get_head_raw(); in visit_leave()
535 const exec_node *actual_param_node = ir->actual_parameters.get_head_raw(); in visit_leave()
587 return rvalue_visit(ir); in visit_leave()
613 lower_distance_visitor_counter::visit(ir_variable *ir) in visit() argument
617 if (!ir->name) in visit()
620 if (ir->data.mode == ir_var_shader_out) { in visit()
623 } else if (ir->data.mode == ir_var_shader_in) { in visit()
629 if (ir->type->is_unsized_array()) in visit()
633 if (!strcmp(ir->name, "gl_ClipDistance")) { in visit()
634 if (!ir->type->fields.array->is_array()) in visit()
635 *clip_size = ir->type->array_size(); in visit()
637 *clip_size = ir->type->fields.array->array_size(); in visit()
642 if (!strcmp(ir->name, "gl_CullDistance")) { in visit()
643 if (!ir->type->fields.array->is_array()) in visit()
644 *cull_size = ir->type->array_size(); in visit()
646 *cull_size = ir->type->fields.array->array_size(); in visit()
665 visit_list_elements(&count, shader->ir); in lower_clip_cull_distance()
674 visit_list_elements(&v, shader->ir); in lower_clip_cull_distance()
677 visit_list_elements(&v2, shader->ir); in lower_clip_cull_distance()