mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
glsl: simplify required stages for linking rules
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
20823992b4
commit
55fa3c44bc
1 changed files with 41 additions and 43 deletions
|
|
@ -4182,50 +4182,48 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||||
|
|
||||||
/* Some shaders have to be linked with some other shaders present.
|
/* Some shaders have to be linked with some other shaders present.
|
||||||
*/
|
*/
|
||||||
if (num_shaders[MESA_SHADER_GEOMETRY] > 0 &&
|
if (!prog->SeparateShader) {
|
||||||
num_shaders[MESA_SHADER_VERTEX] == 0 &&
|
if (num_shaders[MESA_SHADER_GEOMETRY] > 0 &&
|
||||||
!prog->SeparateShader) {
|
num_shaders[MESA_SHADER_VERTEX] == 0) {
|
||||||
linker_error(prog, "Geometry shader must be linked with "
|
linker_error(prog, "Geometry shader must be linked with "
|
||||||
"vertex shader\n");
|
"vertex shader\n");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (num_shaders[MESA_SHADER_TESS_EVAL] > 0 &&
|
if (num_shaders[MESA_SHADER_TESS_EVAL] > 0 &&
|
||||||
num_shaders[MESA_SHADER_VERTEX] == 0 &&
|
num_shaders[MESA_SHADER_VERTEX] == 0) {
|
||||||
!prog->SeparateShader) {
|
linker_error(prog, "Tessellation evaluation shader must be linked "
|
||||||
linker_error(prog, "Tessellation evaluation shader must be linked with "
|
"with vertex shader\n");
|
||||||
"vertex shader\n");
|
goto done;
|
||||||
goto done;
|
}
|
||||||
}
|
if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 &&
|
||||||
if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 &&
|
num_shaders[MESA_SHADER_VERTEX] == 0) {
|
||||||
num_shaders[MESA_SHADER_VERTEX] == 0 &&
|
linker_error(prog, "Tessellation control shader must be linked with "
|
||||||
!prog->SeparateShader) {
|
"vertex shader\n");
|
||||||
linker_error(prog, "Tessellation control shader must be linked with "
|
goto done;
|
||||||
"vertex shader\n");
|
}
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The spec is self-contradictory here. It allows linking without a tess
|
/* The spec is self-contradictory here. It allows linking without a tess
|
||||||
* eval shader, but that can only be used with transform feedback and
|
* eval shader, but that can only be used with transform feedback and
|
||||||
* rasterization disabled. However, transform feedback isn't allowed
|
* rasterization disabled. However, transform feedback isn't allowed
|
||||||
* with GL_PATCHES, so it can't be used.
|
* with GL_PATCHES, so it can't be used.
|
||||||
*
|
*
|
||||||
* More investigation showed that the idea of transform feedback after
|
* More investigation showed that the idea of transform feedback after
|
||||||
* a tess control shader was dropped, because some hw vendors couldn't
|
* a tess control shader was dropped, because some hw vendors couldn't
|
||||||
* support tessellation without a tess eval shader, but the linker section
|
* support tessellation without a tess eval shader, but the linker
|
||||||
* wasn't updated to reflect that.
|
* section wasn't updated to reflect that.
|
||||||
*
|
*
|
||||||
* All specifications (ARB_tessellation_shader, GL 4.0-4.5) have this
|
* All specifications (ARB_tessellation_shader, GL 4.0-4.5) have this
|
||||||
* spec bug.
|
* spec bug.
|
||||||
*
|
*
|
||||||
* Do what's reasonable and always require a tess eval shader if a tess
|
* Do what's reasonable and always require a tess eval shader if a tess
|
||||||
* control shader is present.
|
* control shader is present.
|
||||||
*/
|
*/
|
||||||
if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 &&
|
if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 &&
|
||||||
num_shaders[MESA_SHADER_TESS_EVAL] == 0 &&
|
num_shaders[MESA_SHADER_TESS_EVAL] == 0) {
|
||||||
!prog->SeparateShader) {
|
linker_error(prog, "Tessellation control shader must be linked with "
|
||||||
linker_error(prog, "Tessellation control shader must be linked with "
|
"tessellation evaluation shader\n");
|
||||||
"tessellation evaluation shader\n");
|
goto done;
|
||||||
goto done;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute shaders have additional restrictions. */
|
/* Compute shaders have additional restrictions. */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue