mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 17:48:10 +02:00
glsl: Apply the link error conditions to GL_ARB_fragment_coord_conventions
Link error conditions added in previous patch are equally applicable
to GL_ARB_fragment_coord_conventions implementation. Extension's spec
says:
"If gl_FragCoord is redeclared in any fragment shader in a program,
it must be redeclared in all the fragment shaders in that program
that have a static use of gl_FragCoord. All redeclarations of
gl_FragCoord in all fragment shaders in a single program must have
the same set of qualifiers."
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
(cherry picked from commit 9bcb0a8532 with some
manual backporting)
This commit is contained in:
parent
2cd8ce4c67
commit
ff117336b7
3 changed files with 14 additions and 1 deletions
|
|
@ -1372,6 +1372,8 @@ set_shader_inout_layout(struct gl_shader *shader,
|
|||
shader->uses_gl_fragcoord = state->fs_uses_gl_fragcoord;
|
||||
shader->pixel_center_integer = state->fs_pixel_center_integer;
|
||||
shader->origin_upper_left = state->fs_origin_upper_left;
|
||||
shader->ARB_fragment_coord_conventions_enable =
|
||||
state->ARB_fragment_coord_conventions_enable;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1210,7 +1210,8 @@ link_fs_input_layout_qualifiers(struct gl_shader_program *prog,
|
|||
linked_shader->origin_upper_left = false;
|
||||
linked_shader->pixel_center_integer = false;
|
||||
|
||||
if (linked_shader->Stage != MESA_SHADER_FRAGMENT || prog->Version < 150)
|
||||
if (linked_shader->Stage != MESA_SHADER_FRAGMENT ||
|
||||
(prog->Version < 150 && !prog->ARB_fragment_coord_conventions_enable))
|
||||
return;
|
||||
|
||||
for (unsigned i = 0; i < num_shaders; i++) {
|
||||
|
|
@ -2127,6 +2128,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||
ralloc_free(prog->AtomicBuffers);
|
||||
prog->AtomicBuffers = NULL;
|
||||
prog->NumAtomicBuffers = 0;
|
||||
prog->ARB_fragment_coord_conventions_enable = false;
|
||||
|
||||
/* Separate the shaders into groups based on their type.
|
||||
*/
|
||||
|
|
@ -2153,6 +2155,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||
goto done;
|
||||
}
|
||||
|
||||
prog->ARB_fragment_coord_conventions_enable |=
|
||||
prog->Shaders[i]->ARB_fragment_coord_conventions_enable;
|
||||
|
||||
gl_shader_stage shader_type = prog->Shaders[i]->Stage;
|
||||
shader_list[shader_type][num_shaders[shader_type]] = prog->Shaders[i];
|
||||
num_shaders[shader_type]++;
|
||||
|
|
|
|||
|
|
@ -2397,6 +2397,7 @@ struct gl_shader
|
|||
bool uses_builtin_functions;
|
||||
bool uses_gl_fragcoord;
|
||||
bool redeclares_gl_fragcoord;
|
||||
bool ARB_fragment_coord_conventions_enable;
|
||||
|
||||
/**
|
||||
* Fragment shader state from GLSL 1.50 layout qualifiers.
|
||||
|
|
@ -2697,6 +2698,11 @@ struct gl_shader_program
|
|||
* \c NULL.
|
||||
*/
|
||||
struct gl_shader *_LinkedShaders[MESA_SHADER_STAGES];
|
||||
|
||||
/* True if any of the fragment shaders attached to this program use:
|
||||
* #extension ARB_fragment_coord_conventions: enable
|
||||
*/
|
||||
GLboolean ARB_fragment_coord_conventions_enable;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue