X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl_types.cpp;h=73e3abd329d74b528860ff57ebad4896d5193f8b;hb=f546b41f6ac9b4394b931d9e0ac4e30fc3f2c40f;hp=e9b58dde43a7b8f43131d5090d349b364e346ee5;hpb=b919100d6101c0bd7e15a187968af9a36b49e6de;p=mesa.git diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index e9b58dde43a..73e3abd329d 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -674,6 +674,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return error_type; else return samplerExternalOES_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } case GLSL_TYPE_INT: if (shadow) @@ -701,6 +703,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return (array ? isampler2DMSArray_type : isampler2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } case GLSL_TYPE_UINT: if (shadow) @@ -728,6 +732,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return (array ? usampler2DMSArray_type : usampler2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } default: return error_type; @@ -740,6 +746,8 @@ const glsl_type * glsl_type::get_image_instance(enum glsl_sampler_dim dim, bool array, glsl_base_type type) { + if (dim == GLSL_SAMPLER_DIM_SUBPASS) + return subpassInput_type; switch (type) { case GLSL_TYPE_FLOAT: switch (dim) { @@ -764,6 +772,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? image2DMSArray_type : image2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } case GLSL_TYPE_INT: @@ -789,6 +798,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? iimage2DMSArray_type : iimage2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } case GLSL_TYPE_UINT: @@ -814,6 +824,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? uimage2DMSArray_type : uimage2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } default: @@ -1384,11 +1395,11 @@ glsl_type::can_implicitly_convert_to(const glsl_type *desired, if (this == desired) return true; - /* ESSL does not allow implicit conversions. If there is no state, we're - * doing intra-stage function linking where these checks have already been - * done. + /* GLSL 1.10 and ESSL do not allow implicit conversions. If there is no + * state, we're doing intra-stage function linking where these checks have + * already been done. */ - if (state && state->es_shader) + if (state && (state->es_shader || !state->is_version(120, 0))) return false; /* There is no conversion among matrix types. */ @@ -1403,11 +1414,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; @@ -1972,6 +1986,7 @@ glsl_type::coordinate_components() const case GLSL_SAMPLER_DIM_RECT: case GLSL_SAMPLER_DIM_MS: case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: size = 2; break; case GLSL_SAMPLER_DIM_3D: