nir: Implement ir_unop_get_buffer_size
This is how backends provide the buffer size required to compute the size of unsized arrays in the previous patch Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
@@ -1322,6 +1322,16 @@ nir_visitor::visit(ir_expression *ir)
|
|||||||
unreachable("not reached");
|
unreachable("not reached");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ir_unop_get_buffer_size: {
|
||||||
|
nir_intrinsic_instr *load = nir_intrinsic_instr_create(
|
||||||
|
this->shader,
|
||||||
|
nir_intrinsic_get_buffer_size);
|
||||||
|
load->num_components = ir->type->vector_elements;
|
||||||
|
load->src[0] = evaluate_rvalue(ir->operands[0]);
|
||||||
|
add_instr(&load->instr, ir->type->vector_elements);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
case ir_binop_add:
|
case ir_binop_add:
|
||||||
case ir_binop_sub:
|
case ir_binop_sub:
|
||||||
case ir_binop_mul:
|
case ir_binop_mul:
|
||||||
|
@@ -61,6 +61,13 @@ INTRINSIC(interp_var_at_sample, 1, ARR(1), true, 0, 1, 0,
|
|||||||
INTRINSIC(interp_var_at_offset, 1, ARR(2), true, 0, 1, 0,
|
INTRINSIC(interp_var_at_offset, 1, ARR(2), true, 0, 1, 0,
|
||||||
NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
|
NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ask the driver for the size of a given buffer. It takes the buffer index
|
||||||
|
* as source.
|
||||||
|
*/
|
||||||
|
INTRINSIC(get_buffer_size, 1, ARR(1), true, 1, 0, 0,
|
||||||
|
NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* a barrier is an intrinsic with no inputs/outputs but which can't be moved
|
* a barrier is an intrinsic with no inputs/outputs but which can't be moved
|
||||||
* around/optimized in general
|
* around/optimized in general
|
||||||
|
Reference in New Issue
Block a user