glsl: redeclare built-in variable with separate shader
according to : https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_separate_shader_objects.gles.txt properly handle the declaration of these interface block varibales Signed-off-by: cheyang <cheyang@bytedance.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8101>
This commit is contained in:
@@ -4409,6 +4409,27 @@ get_variable_being_redeclared(ir_variable **var_ptr, YYLTYPE loc,
|
|||||||
earlier->data.how_declared == ir_var_declared_implicitly) {
|
earlier->data.how_declared == ir_var_declared_implicitly) {
|
||||||
/* No need to do anything, just allow it. Qualifier is stored in state */
|
/* No need to do anything, just allow it. Qualifier is stored in state */
|
||||||
|
|
||||||
|
} else if (state->is_version(0, 300) &&
|
||||||
|
state->has_separate_shader_objects() &&
|
||||||
|
(strcmp(var->name, "gl_Position") == 0 ||
|
||||||
|
strcmp(var->name, "gl_PointSize") == 0)) {
|
||||||
|
|
||||||
|
/* EXT_separate_shader_objects spec says:
|
||||||
|
*
|
||||||
|
* "The following vertex shader outputs may be redeclared
|
||||||
|
* at global scope to specify a built-in output interface,
|
||||||
|
* with or without special qualifiers:
|
||||||
|
*
|
||||||
|
* gl_Position
|
||||||
|
* gl_PointSize
|
||||||
|
*
|
||||||
|
* When compiling shaders using either of the above variables,
|
||||||
|
* both such variables must be redeclared prior to use."
|
||||||
|
*/
|
||||||
|
if (earlier->data.used) {
|
||||||
|
_mesa_glsl_error(&loc, state, "the first redeclaration of "
|
||||||
|
"%s must appear before any use", var->name);
|
||||||
|
}
|
||||||
} else if ((earlier->data.how_declared == ir_var_declared_implicitly &&
|
} else if ((earlier->data.how_declared == ir_var_declared_implicitly &&
|
||||||
state->allow_builtin_variable_redeclaration) ||
|
state->allow_builtin_variable_redeclaration) ||
|
||||||
allow_all_redeclarations) {
|
allow_all_redeclarations) {
|
||||||
|
Reference in New Issue
Block a user