Mesa (gallium-edgeflags): gallium: don't use edgeflags if the app didn' t supply them
Roland Scheidegger
sroland at kemper.freedesktop.org
Sat Dec 19 21:13:40 UTC 2009
Module: Mesa
Branch: gallium-edgeflags
Commit: 420ff89067515a74c9625a103cadc267d5f64bd4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=420ff89067515a74c9625a103cadc267d5f64bd4
Author: Roland Scheidegger <sroland at vmware.com>
Date: Sat Dec 19 20:25:43 2009 +0100
gallium: don't use edgeflags if the app didn't supply them
---
src/mesa/state_tracker/st_atom_shader.c | 10 ++++++----
src/mesa/state_tracker/st_context.h | 2 ++
src/mesa/state_tracker/st_draw.c | 8 ++++++++
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c
index c2cb72e..46c8cbb 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -112,10 +112,12 @@ find_translated_vp(struct st_context *st,
* edgeflag semantics, and extend the vertex shader to pass through
* the input to the output. We'll need to use similar logic to set
* up the extra vertex_element input for edgeflags.
+ * _NEW_POLYGON, ST_NEW_EDGEFLAGS_DATA
*/
- key.passthrough_edgeflags = (st->ctx->Polygon.FrontMode != GL_FILL ||
- st->ctx->Polygon.BackMode != GL_FILL);
-
+ key.passthrough_edgeflags = (st->vertdata_edgeflags && (
+ st->ctx->Polygon.FrontMode != GL_FILL ||
+ st->ctx->Polygon.BackMode != GL_FILL));
+
/* Do we need to throw away old translations after a change in the
* GL program string?
@@ -228,7 +230,7 @@ const struct st_tracked_state st_update_vp = {
"st_update_vp", /* name */
{ /* dirty */
_NEW_POLYGON, /* mesa */
- ST_NEW_VERTEX_PROGRAM /* st */
+ ST_NEW_VERTEX_PROGRAM | ST_NEW_EDGEFLAGS_DATA /* st */
},
update_vp /* update */
};
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index b760728..831909a 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -55,6 +55,7 @@ struct bitmap_cache;
#define ST_NEW_FRAGMENT_PROGRAM 0x2
#define ST_NEW_VERTEX_PROGRAM 0x4
#define ST_NEW_FRAMEBUFFER 0x8
+#define ST_NEW_EDGEFLAGS_DATA 0x10
struct st_state_flags {
@@ -120,6 +121,7 @@ struct st_context
struct st_state_flags dirty;
GLboolean missing_textures;
+ GLboolean vertdata_edgeflags;
/** Mapping from VERT_RESULT_x to post-transformed vertex slot */
const GLuint *vertex_result_to_slot;
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 6b0007a..2d287ef 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -514,6 +514,7 @@ st_draw_vbo(GLcontext *ctx,
struct pipe_vertex_element velements[PIPE_MAX_ATTRIBS];
unsigned num_vbuffers, num_velements;
GLboolean userSpace;
+ GLboolean vertDataEdgeFlags;
/* Gallium probably doesn't want this in some cases. */
if (!index_bounds_valid)
@@ -522,6 +523,13 @@ st_draw_vbo(GLcontext *ctx,
/* sanity check for pointer arithmetic below */
assert(sizeof(arrays[0]->Ptr[0]) == 1);
+ vertDataEdgeFlags = arrays[VERT_ATTRIB_EDGEFLAG]->BufferObj &&
+ arrays[VERT_ATTRIB_EDGEFLAG]->BufferObj->Name;
+ if (vertDataEdgeFlags != ctx->st->vertdata_edgeflags) {
+ ctx->st->vertdata_edgeflags = vertDataEdgeFlags;
+ ctx->st->dirty.st |= ST_NEW_EDGEFLAGS_DATA;
+ }
+
st_validate_state(ctx->st);
/* must get these after state validation! */
More information about the mesa-commit
mailing list