MESA_shader_integer_functions: Allow implicit int->uint conversions

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Ian Romanick 2016-06-21 10:26:34 -07:00
parent 65b0346fdb
commit 90537e1a0e
2 changed files with 10 additions and 6 deletions

View File

@ -244,7 +244,8 @@ get_implicit_conversion_operation(const glsl_type *to, const glsl_type *from,
}
case GLSL_TYPE_UINT:
if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable)
if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable
&& !state->MESA_shader_integer_functions_enable)
return (ir_expression_operation)0;
switch (from->base_type) {
case GLSL_TYPE_INT: return ir_unop_i2u;

View File

@ -1403,11 +1403,14 @@ glsl_type::can_implicitly_convert_to(const glsl_type *desired,
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) &&
/* With GLSL 4.0, ARB_gpu_shader5, or MESA_shader_integer_functions, 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 ||
state->MESA_shader_integer_functions_enable) &&
desired->base_type == GLSL_TYPE_UINT && this->base_type == GLSL_TYPE_INT)
return true;