Commit 022e9ddd authored by Neil Roberts's avatar Neil Roberts Committed by Alejandro Piñeiro

mesa/glspirv: Validate that there is a VS when there is a TCS, TES or GS

The shader combination tests are copied from link_shaders().

For example, it allows the following tests (when run on SPIR-V mode) to
pass:
   spec/arb_tessellation_shader/linker/no-vs
   spec/arb_tessellation_shader/linker/tcs-no-vs
   spec/arb_tessellation_shader/linker/tes-no-vs
   spec/glsl-1.50/linker/gs-without-vs
Reviewed-by: Caio Marcelo de Oliveira Filho's avatarCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
parent e4210b93
......@@ -178,6 +178,31 @@ _mesa_spirv_link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
if (last_vert_stage)
prog->last_vert_prog = prog->_LinkedShaders[last_vert_stage - 1]->Program;
/* Some shaders have to be linked with some other shaders present. */
if (!prog->SeparateShader) {
static const struct {
gl_shader_stage a, b;
} stage_pairs[] = {
{ MESA_SHADER_GEOMETRY, MESA_SHADER_VERTEX },
{ MESA_SHADER_TESS_EVAL, MESA_SHADER_VERTEX },
{ MESA_SHADER_TESS_CTRL, MESA_SHADER_VERTEX },
{ MESA_SHADER_TESS_CTRL, MESA_SHADER_TESS_EVAL },
};
for (unsigned i = 0; i < ARRAY_SIZE(stage_pairs); i++) {
gl_shader_stage a = stage_pairs[i].a;
gl_shader_stage b = stage_pairs[i].b;
if ((prog->data->linked_stages & ((1 << a) | (1 << b))) == (1 << a)) {
ralloc_asprintf_append(&prog->data->InfoLog,
"%s shader must be linked with %s shader\n",
_mesa_shader_stage_to_string(a),
_mesa_shader_stage_to_string(b));
prog->data->LinkStatus = LINKING_FAILURE;
return;
}
}
}
}
nir_shader *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment