mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
glsl: support 64bit integer loop iterators
this was crashing due to the assumption that non-32bit integer values must be floats Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7316>
This commit is contained in:
parent
234ba13f10
commit
d76f51d6fd
1 changed files with 9 additions and 3 deletions
|
|
@ -107,7 +107,7 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (!iter->type->is_integer_32()) {
|
||||
if (!iter->type->is_integer_32() && !iter->type->is_integer_64()) {
|
||||
const ir_expression_operation op = iter->type->is_double()
|
||||
? ir_unop_d2i : ir_unop_f2i;
|
||||
ir_rvalue *cast =
|
||||
|
|
@ -116,7 +116,7 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
|
|||
iter = cast->constant_expression_value(mem_ctx);
|
||||
}
|
||||
|
||||
int iter_value = iter->get_int_component(0);
|
||||
int64_t iter_value = iter->get_int64_component(0);
|
||||
|
||||
/* Code after this block works under assumption that iterator will be
|
||||
* incremented or decremented until it hits the limit,
|
||||
|
|
@ -159,17 +159,23 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
|
|||
/* Increment may be of type int, uint or float. */
|
||||
switch (increment->type->base_type) {
|
||||
case GLSL_TYPE_INT:
|
||||
iter = new(mem_ctx) ir_constant(iter_value + bias[i]);
|
||||
iter = new(mem_ctx) ir_constant(int32_t(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_INT16:
|
||||
iter = new(mem_ctx) ir_constant(uint16_t(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_INT64:
|
||||
iter = new(mem_ctx) ir_constant(int64_t(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_UINT:
|
||||
iter = new(mem_ctx) ir_constant(unsigned(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_UINT16:
|
||||
iter = new(mem_ctx) ir_constant(uint16_t(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_UINT64:
|
||||
iter = new(mem_ctx) ir_constant(uint64_t(iter_value + bias[i]));
|
||||
break;
|
||||
case GLSL_TYPE_FLOAT:
|
||||
iter = new(mem_ctx) ir_constant(float(iter_value + bias[i]));
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue