Lines Matching +full:overloaded +full:- +full:virtual
1 /* -*- c++ -*- */
56 * In addition, it is possible to use a switch-statement based on \c
97 * there's a virtual destructor present. Because we almost
101 virtual ~ir_instruction() in ~ir_instruction()
109 virtual void accept(ir_visitor *) = 0;
110 virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
111 virtual ir_instruction *clone(void *mem_ctx,
197 virtual bool equals(const ir_instruction *ir,
221 virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const;
223 virtual void accept(ir_visitor *v) in accept()
225 v->visit(this); in accept()
228 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
230 virtual ir_constant *constant_expression_value(void *mem_ctx,
235 virtual bool is_lvalue(const struct _mesa_glsl_parse_state * = NULL) const
241 * Get the variable that is ultimately referenced by an r-value
243 virtual ir_variable *variable_referenced() const in variable_referenced()
250 * If an r-value is a reference to a whole variable, get that variable
253 * Pointer to a variable that is completely dereferenced by the r-value. If
254 * the r-value is not a dereference or the dereference does not access the
258 virtual ir_variable *whole_variable_referenced() in whole_variable_referenced()
264 * Determine if an r-value has the value zero
267 * \c ir_constant class over-rides this function to return \c true \b only
273 virtual bool is_zero() const;
276 * Determine if an r-value has the value one
279 * \c ir_constant class over-rides this function to return \c true \b only
285 virtual bool is_one() const;
288 * Determine if an r-value has the value negative one
291 * \c ir_constant class over-rides this function to return \c true \b only
297 virtual bool is_negative_one() const;
300 * Determine if an r-value is an unsigned integer constant which can be
305 virtual bool is_uint16_constant() const { return false; } in is_uint16_constant()
333 ir_var_system_value, /**< Ex: front-face, instance-id, etc. */
354 * Variable was explicitly declared (or re-declared) in an unnamed
360 * Variable is an implicitly declared built-in that has not been explicitly
361 * re-declared by the shader.
393 * Description of built-in state associated with a uniform
422 virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const;
424 virtual void accept(ir_visitor *v) in accept()
426 v->visit(this); in accept()
429 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
438 return (this->data.mode == ir_var_uniform || in is_in_buffer_block()
439 this->data.mode == ir_var_shader_storage) && in is_in_buffer_block()
440 this->interface_type != NULL; in is_in_buffer_block()
448 return this->data.mode == ir_var_shader_storage && in is_in_shader_storage_block()
449 this->interface_type != NULL; in is_in_shader_storage_block()
473 return this->type->without_array() == this->interface_type; in is_interface_instance()
481 if (!this->type->contains_sampler() && !this->type->contains_image()) in contains_bindless()
484 return this->data.bindless || this->data.mode != ir_var_uniform; in contains_bindless()
488 * Set this->interface_type on a newly created variable.
492 assert(this->interface_type == NULL); in init_interface_type()
493 this->interface_type = type; in init_interface_type()
494 if (this->is_interface_instance()) { in init_interface_type()
495 this->u.max_ifc_array_access = in init_interface_type()
496 ralloc_array(this, int, type->length); in init_interface_type()
497 for (unsigned i = 0; i < type->length; i++) { in init_interface_type()
498 this->u.max_ifc_array_access[i] = -1; in init_interface_type()
504 * Change this->interface_type on a variable that previously had a
510 if (this->u.max_ifc_array_access != NULL) { in change_interface_type()
514 assert(this->interface_type->length == type->length); in change_interface_type()
516 this->interface_type = type; in change_interface_type()
520 * Change this->interface_type on a variable that previously had a
522 * compilation to handle redeclaration of the built-in gl_PerVertex
527 if (this->u.max_ifc_array_access != NULL) { in reinit_interface_type()
529 /* Redeclaring gl_PerVertex is only allowed if none of the built-ins in reinit_interface_type()
534 for (unsigned i = 0; i < this->interface_type->length; i++) in reinit_interface_type()
535 assert(this->u.max_ifc_array_access[i] == -1); in reinit_interface_type()
537 ralloc_free(this->u.max_ifc_array_access); in reinit_interface_type()
538 this->u.max_ifc_array_access = NULL; in reinit_interface_type()
540 this->interface_type = NULL; in reinit_interface_type()
546 return this->interface_type; in get_interface_type()
551 return this->interface_type->get_interface_packing(); in get_interface_type_packing()
561 assert(this->data._num_state_slots == 0); in get_max_ifc_array_access()
562 return this->u.max_ifc_array_access; in get_max_ifc_array_access()
567 assert(!this->is_interface_instance() in get_num_state_slots()
568 || this->data._num_state_slots == 0); in get_num_state_slots()
569 return this->data._num_state_slots; in get_num_state_slots()
574 assert(!this->is_interface_instance() in set_num_state_slots()
576 this->data._num_state_slots = n; in set_num_state_slots()
581 return this->is_interface_instance() ? NULL : this->u.state_slots; in get_state_slots()
586 return this->is_interface_instance() ? NULL : this->u.state_slots; in get_state_slots()
591 assert(!this->is_interface_instance()); in allocate_state_slots()
593 this->u.state_slots = ralloc_array(this, ir_state_slot, n); in allocate_state_slots()
594 this->data._num_state_slots = 0; in allocate_state_slots()
596 if (this->u.state_slots != NULL) in allocate_state_slots()
597 this->data._num_state_slots = n; in allocate_state_slots()
599 return this->u.state_slots; in allocate_state_slots()
604 return this->data.interpolation == INTERP_MODE_FLAT || in is_interpolation_flat()
605 this->type->contains_integer() || in is_interpolation_flat()
606 this->type->contains_double(); in is_interpolation_flat()
611 return this->name != ir_variable::tmp_name && in is_name_ralloced()
612 this->name != this->name_storage; in is_name_ralloced()
617 return this->data.fb_fetch_output && in is_fb_fetch_color_output()
618 this->data.location != FRAG_RESULT_DEPTH && in is_fb_fetch_color_output()
619 this->data.location != FRAG_RESULT_STENCIL; in is_fb_fetch_color_output()
647 * the name is ralloc'd. shader-db mining showed that 70% of variables
649 * 20 bytes on 64-bit (28 bytes with DEBUG), and we can also skip malloc.
657 * Is the variable read-only?
700 * non-ast_to_hir.cpp (GLSL parsing) paths.
706 * the stages of a multi-stage separate program can be safely removed
759 * This is used by the linker to cross-validiate initializers of global
799 * If non-zero, then this variable may be packed along with other variables
813 * Non-zero if this variable was created by lowering a named interface
819 * Non-zero if the variable must be a shader input. This is useful for
878 * Non-zero if this variable is considered bindless as defined by
884 * Non-zero if this variable is considered bound as defined by
890 * Non-zero if the variable shall not be implicitly converted during
913 * This could be stored in as few as 7-bits, if necessary. If it is made
932 * - Vertex shader input: one of the values from \c gl_vert_attrib.
933 * - Vertex shader output: one of the values from \c gl_varying_slot.
934 * - Geometry shader input: one of the values from \c gl_varying_slot.
935 * - Geometry shader output: one of the values from \c gl_varying_slot.
936 * - Fragment shader input: one of the values from \c gl_varying_slot.
937 * - Fragment shader output: one of the values from \c gl_frag_result.
938 * - Uniforms: Per-stage uniform slot number for default uniform block.
939 * - Uniforms: Index within the uniform block definition for UBO members.
940 * - Non-UBO Uniforms: explicit location until linking then reused to
942 * - Other: This field is not currently used.
945 * slot has not been assigned, the value will be -1.
950 * for glsl->tgsi/mesa IR we need to store the index into the
951 * parameters for uniforms, initially the code overloaded location
961 * stream of the i-th component.
973 * Not used for non-array variables. -1 is never accessed.
1026 * Built-in state that backs this uniform
1061 * This variable is \b not thread-safe. It is global, \b not
1062 * per-context. It begins life false. A context can, at some point, make
1070 * A function that returns whether a built-in function is available in the
1076 ir_intrinsic_generic_ ## op - ir_intrinsic_generic_load + ir_intrinsic_ ## t ## _ ## load
1079 ir_intrinsic_id(int(i) - int(ir_intrinsic_generic_load) + int(ir_intrinsic_ ## t ## _ ## load))
1188 virtual ir_function_signature *clone(void *mem_ctx,
1193 virtual void accept(ir_visitor *v) in accept()
1195 v->visit(this); in accept()
1198 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1203 * Returns NULL for non-built-ins.
1228 return this->_function; in function()
1270 /** Whether or not this function signature is a built-in. */
1285 /** Whether or not a built-in is available for this shader. */
1293 * A function pointer to a predicate that answers whether a built-in
1294 * function is available in the current shader. NULL if not a built-in.
1315 * and the value in *result if result is non-NULL.
1325 * Header for tracking multiple overloaded functions with the same name.
1333 virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const;
1335 virtual void accept(ir_visitor *v) in accept()
1337 v->visit(this); in accept()
1340 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1344 sig->_function = this; in add_signature()
1345 this->signatures.push_tail(sig); in add_signature()
1377 /** Whether or not this function has a signature that isn't a built-in. */
1381 * List of ir_function_signature for each overloaded function with this name.
1405 return this->_function->name; in function_name()
1411 * IR instruction representing high-level if-statements
1420 virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const;
1422 virtual void accept(ir_visitor *v) in accept()
1424 v->visit(this); in accept()
1427 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1438 * IR instruction representing a high-level loop structure.
1444 virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
1446 virtual void accept(ir_visitor *v) in accept()
1448 v->visit(this); in accept()
1451 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1471 virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const;
1473 virtual ir_constant *constant_expression_value(void *mem_ctx,
1476 virtual void accept(ir_visitor *v) in accept()
1478 v->visit(this); in accept()
1481 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1487 * returned. Otherwise \c NULL is returned. Examples of whole-variable
1490 * - Assigning to a scalar
1491 * - Assigning to all components of a vector
1492 * - Whole array (or matrix) assignment
1493 * - Whole structure assignment
1503 * Left-hand side of the assignment.
1518 * For non-vector types in the LHS, this field will be zero. For vector
1522 * A partially-set write mask means that each enabled channel gets
1559 virtual bool equals(const ir_instruction *ir,
1562 virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const;
1565 * Attempt to constant-fold the expression
1574 virtual ir_constant *constant_expression_value(void *mem_ctx,
1598 * Do a reverse-lookup to translate the given string into an operator.
1602 virtual void accept(ir_visitor *v) in accept()
1604 v->visit(this); in accept()
1607 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1609 virtual ir_variable *variable_referenced() const;
1617 num_operands = this->type->vector_elements; in init_num_operands()
1630 * HIR instruction representing a high-level function call, containing a list
1640 assert(callee->return_type != NULL); in ir_call()
1641 actual_parameters->move_nodes_to(& this->actual_parameters); in ir_call()
1650 assert(callee->return_type != NULL); in ir_call()
1651 actual_parameters->move_nodes_to(& this->actual_parameters); in ir_call()
1654 virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const;
1656 virtual ir_constant *constant_expression_value(void *mem_ctx,
1659 virtual void accept(ir_visitor *v) in accept()
1661 v->visit(this); in accept()
1664 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1671 return callee->function_name(); in callee_name()
1695 * ARB_shader_subroutine support -
1705 * \name Jump-like IR instructions.
1730 virtual ir_return *clone(void *mem_ctx, struct hash_table *) const;
1737 virtual void accept(ir_visitor *v) in accept()
1739 v->visit(this); in accept()
1742 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1752 * different from the \c break within a switch-statement.
1766 this->mode = mode; in ir_loop_jump()
1769 virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const;
1771 virtual void accept(ir_visitor *v) in accept()
1773 v->visit(this); in accept()
1776 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1800 this->condition = NULL; in ir_discard()
1806 this->condition = cond; in ir_discard()
1809 virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const;
1811 virtual void accept(ir_visitor *v) in accept()
1813 v->visit(this); in accept()
1816 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1834 virtual ir_demote *clone(void *mem_ctx, struct hash_table *ht) const;
1836 virtual void accept(ir_visitor *v) in accept()
1838 v->visit(this); in accept()
1841 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1849 ir_tex, /**< Regular texture look-up */
1850 ir_txb, /**< Texture look-up with LOD bias */
1851 ir_txl, /**< Texture look-up with explicit LOD */
1852 ir_txd, /**< Texture look-up with partial derivatives */
1901 virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const;
1903 virtual ir_constant *constant_expression_value(void *mem_ctx,
1906 virtual void accept(ir_visitor *v) in accept()
1908 v->visit(this); in accept()
1911 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1913 virtual bool equals(const ir_instruction *ir,
1925 * Do a reverse-lookup to translate a string into an ir_texture_opcode.
1947 * Coordinate used for comparison on shadow look-ups.
1990 * L-value swizzles cannot contain duplicate components.
2005 virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const;
2007 virtual ir_constant *constant_expression_value(void *mem_ctx,
2015 virtual void accept(ir_visitor *v) in accept()
2017 v->visit(this); in accept()
2020 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2022 virtual bool equals(const ir_instruction *ir,
2027 return val->is_lvalue(state) && !mask.has_duplicates; in is_lvalue()
2031 * Get the variable that is ultimately referenced by an r-value
2033 virtual ir_variable *variable_referenced() const;
2050 virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0;
2055 * Get the variable that is ultimately referenced by an r-value
2057 virtual ir_variable *variable_referenced() const = 0;
2063 virtual int precision() const = 0;
2077 virtual ir_dereference_variable *clone(void *mem_ctx,
2080 virtual ir_constant *constant_expression_value(void *mem_ctx,
2083 virtual bool equals(const ir_instruction *ir,
2087 * Get the variable that is ultimately referenced by an r-value
2089 virtual ir_variable *variable_referenced() const in variable_referenced()
2091 return this->var; in variable_referenced()
2094 virtual int precision() const in precision()
2096 return this->var->data.precision; in precision()
2099 virtual ir_variable *whole_variable_referenced() in whole_variable_referenced()
2103 * else, the complete dereference chain is not a whole-variable in whole_variable_referenced()
2107 return this->var; in whole_variable_referenced()
2110 virtual void accept(ir_visitor *v) in accept()
2112 v->visit(this); in accept()
2115 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2130 virtual ir_dereference_array *clone(void *mem_ctx,
2133 virtual ir_constant *constant_expression_value(void *mem_ctx,
2136 virtual bool equals(const ir_instruction *ir,
2140 * Get the variable that is ultimately referenced by an r-value
2142 virtual ir_variable *variable_referenced() const in variable_referenced()
2144 return this->array->variable_referenced(); in variable_referenced()
2147 virtual int precision() const in precision()
2149 ir_dereference *deref = this->array->as_dereference(); in precision()
2154 return deref->precision(); in precision()
2157 virtual void accept(ir_visitor *v) in accept()
2159 v->visit(this); in accept()
2162 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2178 virtual ir_dereference_record *clone(void *mem_ctx,
2181 virtual ir_constant *constant_expression_value(void *mem_ctx,
2185 * Get the variable that is ultimately referenced by an r-value
2187 virtual ir_variable *variable_referenced() const in variable_referenced()
2189 return this->record->variable_referenced(); in variable_referenced()
2192 virtual int precision() const in precision()
2194 glsl_struct_field *field = record->type->fields.structure + field_idx; in precision()
2196 return field->precision; in precision()
2199 virtual void accept(ir_visitor *v) in accept()
2201 v->visit(this); in accept()
2204 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2264 virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const;
2266 virtual ir_constant *constant_expression_value(void *mem_ctx,
2269 virtual void accept(ir_visitor *v) in accept()
2271 v->visit(this); in accept()
2274 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2276 virtual bool equals(const ir_instruction *ir,
2317 * following an assign-like mask.
2341 virtual bool is_value(float f, int i) const;
2342 virtual bool is_zero() const;
2343 virtual bool is_one() const;
2344 virtual bool is_negative_one() const;
2347 * Return true for constants that could be stored as 16-bit unsigned values.
2350 * long as the value is non-negative and fits in 16-bits.
2352 virtual bool is_uint16_constant() const;
2385 virtual void accept(ir_visitor *v) in accept()
2387 v->visit(this); in accept()
2390 virtual ir_emit_vertex *clone(void *mem_ctx, struct hash_table *ht) const in clone()
2392 return new(mem_ctx) ir_emit_vertex(this->stream->clone(mem_ctx, ht)); in clone()
2395 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2399 return stream->as_constant()->value.i[0]; in stream_id()
2418 virtual void accept(ir_visitor *v) in accept()
2420 v->visit(this); in accept()
2423 virtual ir_end_primitive *clone(void *mem_ctx, struct hash_table *ht) const in clone()
2425 return new(mem_ctx) ir_end_primitive(this->stream->clone(mem_ctx, ht)); in clone()
2428 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2432 return stream->as_constant()->value.i[0]; in stream_id()
2448 virtual void accept(ir_visitor *v) in accept()
2450 v->visit(this); in accept()
2453 virtual ir_barrier *clone(void *mem_ctx, struct hash_table *) const in clone()
2458 virtual ir_visitor_status accept(ir_hierarchical_visitor *);
2528 * Built-in / reserved GL variables names start with "gl_"