glsl: Allow int -> uint implicit conversions on function parameters
V2: Fix crashes during linking, where the parse state is NULL. In this case, all required checks have already been done, so we assume the extension is enabled. Signed-off-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
f17428a276
commit
6ae787584d
|
@ -688,10 +688,23 @@ glsl_type::can_implicitly_convert_to(const glsl_type *desired,
|
|||
if (this->matrix_columns > 1 || desired->matrix_columns > 1)
|
||||
return false;
|
||||
|
||||
/* Vector size must match. */
|
||||
if (this->vector_elements != desired->vector_elements)
|
||||
return false;
|
||||
|
||||
/* int and uint can be converted to float. */
|
||||
return desired->is_float()
|
||||
&& this->is_integer()
|
||||
&& this->vector_elements == desired->vector_elements;
|
||||
if (desired->is_float() && this->is_integer())
|
||||
return true;
|
||||
|
||||
/* With GLSL 4.0 / ARB_gpu_shader5, int can be converted to uint.
|
||||
* Note that state may be NULL here, when resolving function calls in the
|
||||
* linker. By this time, all the state-dependent checks have already
|
||||
* happened though, so allow anything that's allowed in any shader version. */
|
||||
if ((!state || state->is_version(400, 0) || state->ARB_gpu_shader5_enable) &&
|
||||
desired->base_type == GLSL_TYPE_UINT && this->base_type == GLSL_TYPE_INT)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned
|
||||
|
|
Loading…
Reference in New Issue