[Mesa-dev] [PATCH] mesa/es: Validate blend function enums in Mesa code rather than the ES wrapper

Ian Romanick idr at freedesktop.org
Fri Aug 24 20:20:06 PDT 2012


From: Ian Romanick <ian.d.romanick at intel.com>

v2: Add proper core-profile filtering.

v3: Allow GL_SRC_ALPHA_SATURATE as a destination factor in GLES3.  Based
on review feedback from Eric Anholt.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/mesa/main/APIspec.xml |  111 ---------------------------------------------
 src/mesa/main/blend.c     |   15 +++++--
 2 files changed, 11 insertions(+), 115 deletions(-)

diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index 44dcd21..34e41b4 100644
--- a/src/mesa/main/APIspec.xml
+++ b/src/mesa/main/APIspec.xml
@@ -631,43 +631,6 @@
 		<param name="sfactor" type="GLenum"/>
 		<param name="dfactor" type="GLenum"/>
 	</proto>
-
-	<desc name="sfactor">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-		<value name="GL_SRC_ALPHA_SATURATE"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
-
-	<desc name="dfactor">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
 </template>
 
 <template name="LogicOp">
@@ -1600,80 +1563,6 @@
 		<param name="srcAlpha" type="GLenum"/>
 		<param name="dstAlpha" type="GLenum"/>
 	</proto>
-
-	<desc name="srcRGB">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-		<value name="GL_SRC_ALPHA_SATURATE"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
-
-	<desc name="dstRGB">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
-
-	<desc name="srcAlpha">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-		<value name="GL_SRC_ALPHA_SATURATE"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
-
-	<desc name="dstAlpha">
-		<value name="GL_ZERO"/>
-		<value name="GL_ONE"/>
-		<value name="GL_SRC_COLOR"/>
-		<value name="GL_ONE_MINUS_SRC_COLOR"/>
-		<value name="GL_SRC_ALPHA"/>
-		<value name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<value name="GL_DST_ALPHA"/>
-		<value name="GL_ONE_MINUS_DST_ALPHA"/>
-		<value name="GL_DST_COLOR"/>
-		<value name="GL_ONE_MINUS_DST_COLOR"/>
-
-		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/>
-		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/>
-		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/>
-	</desc>
 </template>
 
 <template name="PointParameter">
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index 5bc40a0..de871a9 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -58,16 +58,18 @@ legal_src_factor(const struct gl_context *ctx, GLenum factor)
    case GL_DST_ALPHA:
    case GL_ONE_MINUS_DST_ALPHA:
    case GL_SRC_ALPHA_SATURATE:
+      return GL_TRUE;
    case GL_CONSTANT_COLOR:
    case GL_ONE_MINUS_CONSTANT_COLOR:
    case GL_CONSTANT_ALPHA:
    case GL_ONE_MINUS_CONSTANT_ALPHA:
-      return GL_TRUE;
+      return _mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2;
    case GL_SRC1_COLOR:
    case GL_SRC1_ALPHA:
    case GL_ONE_MINUS_SRC1_COLOR:
    case GL_ONE_MINUS_SRC1_ALPHA:
-      return ctx->Extensions.ARB_blend_func_extended;
+      return _mesa_is_desktop_gl(ctx)
+         && ctx->Extensions.ARB_blend_func_extended;
    default:
       return GL_FALSE;
    }
@@ -93,17 +95,22 @@ legal_dst_factor(const struct gl_context *ctx, GLenum factor)
    case GL_ONE_MINUS_SRC_ALPHA:
    case GL_DST_ALPHA:
    case GL_ONE_MINUS_DST_ALPHA:
+      return GL_TRUE;
    case GL_CONSTANT_COLOR:
    case GL_ONE_MINUS_CONSTANT_COLOR:
    case GL_CONSTANT_ALPHA:
    case GL_ONE_MINUS_CONSTANT_ALPHA:
-      return GL_TRUE;
+      return _mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2;
    case GL_SRC_ALPHA_SATURATE:
+      return (_mesa_is_desktop_gl(ctx)
+              && ctx->Extensions.ARB_blend_func_extended)
+         || _mesa_is_gles3(ctx);
    case GL_SRC1_COLOR:
    case GL_SRC1_ALPHA:
    case GL_ONE_MINUS_SRC1_COLOR:
    case GL_ONE_MINUS_SRC1_ALPHA:
-      return ctx->Extensions.ARB_blend_func_extended;
+      return _mesa_is_desktop_gl(ctx)
+         && ctx->Extensions.ARB_blend_func_extended;
    default:
       return GL_FALSE;
    }
-- 
1.7.6.5



More information about the mesa-dev mailing list