mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
mesa: take tessellation into account when validating GS input primitive mode
I've reported the bug in the Khronos bugzilla. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
8e758c3a74
commit
5852b5d2fa
1 changed files with 20 additions and 2 deletions
|
|
@ -174,11 +174,29 @@ _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
|
|||
* TRIANGLES_ADJACENCY_ARB and <mode> is not
|
||||
* TRIANGLES_ADJACENCY_ARB or TRIANGLE_STRIP_ADJACENCY_ARB.
|
||||
*
|
||||
* The GL spec doesn't mention any interaction with tessellation, which
|
||||
* is clearly a spec bug. The same rule should apply, but instead of
|
||||
* the draw primitive mode, the tessellation evaluation shader primitive
|
||||
* mode should be used for the checking.
|
||||
*/
|
||||
if (ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]) {
|
||||
const GLenum geom_mode =
|
||||
ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]->Geom.InputType;
|
||||
switch (mode) {
|
||||
struct gl_shader_program *tes =
|
||||
ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL];
|
||||
GLenum mode_before_gs = mode;
|
||||
|
||||
if (tes) {
|
||||
if (tes->TessEval.PointMode)
|
||||
mode_before_gs = GL_POINTS;
|
||||
else if (tes->TessEval.PrimitiveMode == GL_ISOLINES)
|
||||
mode_before_gs = GL_LINES;
|
||||
else
|
||||
/* the GL_QUADS mode generates triangles too */
|
||||
mode_before_gs = GL_TRIANGLES;
|
||||
}
|
||||
|
||||
switch (mode_before_gs) {
|
||||
case GL_POINTS:
|
||||
valid_enum = (geom_mode == GL_POINTS);
|
||||
break;
|
||||
|
|
@ -213,7 +231,7 @@ _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
|
|||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(mode=%s vs geometry shader input %s)",
|
||||
name,
|
||||
_mesa_lookup_prim_by_nr(mode),
|
||||
_mesa_lookup_prim_by_nr(mode_before_gs),
|
||||
_mesa_lookup_prim_by_nr(geom_mode));
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue