From: Marek Olšák <marek.ol...@amd.com> --- src/mesa/main/enable.c | 6 ++++-- src/mesa/main/lines.c | 6 ++++-- src/mesa/main/mtypes.h | 3 +++ src/mesa/state_tracker/st_context.c | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 99a4923..0324170 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -441,29 +441,31 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) if (ctx->Light.Enabled == state) return; FLUSH_VERTICES(ctx, _NEW_LIGHT); ctx->Light.Enabled = state; break; case GL_LINE_SMOOTH: if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) goto invalid_enum_error; if (ctx->Line.SmoothFlag == state) return; - FLUSH_VERTICES(ctx, _NEW_LINE); + FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLineState ? 0 : _NEW_LINE); + ctx->NewDriverState |= ctx->DriverFlags.NewLineState; ctx->Line.SmoothFlag = state; break; case GL_LINE_STIPPLE: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; if (ctx->Line.StippleFlag == state) return; - FLUSH_VERTICES(ctx, _NEW_LINE); + FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLineState ? 0 : _NEW_LINE); + ctx->NewDriverState |= ctx->DriverFlags.NewLineState; ctx->Line.StippleFlag = state; break; case GL_INDEX_LOGIC_OP: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; if (ctx->Color.IndexLogicOpEnabled == state) return; FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLogicOp ? 0 : _NEW_COLOR); ctx->NewDriverState |= ctx->DriverFlags.NewLogicOp; ctx->Color.IndexLogicOpEnabled = state; diff --git a/src/mesa/main/lines.c b/src/mesa/main/lines.c index 93b80af..d83a7d8 100644 --- a/src/mesa/main/lines.c +++ b/src/mesa/main/lines.c @@ -65,21 +65,22 @@ _mesa_LineWidth( GLfloat width ) * forward compatible context. */ if (ctx->API == API_OPENGL_CORE && ((ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) != 0) && width > 1.0F) { _mesa_error( ctx, GL_INVALID_VALUE, "glLineWidth" ); return; } - FLUSH_VERTICES(ctx, _NEW_LINE); + FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLineState ? 0 : _NEW_LINE); + ctx->NewDriverState |= ctx->DriverFlags.NewLineState; ctx->Line.Width = width; if (ctx->Driver.LineWidth) ctx->Driver.LineWidth(ctx, width); } /** * Set the line stipple pattern. * @@ -99,21 +100,22 @@ _mesa_LineStipple( GLint factor, GLushort pattern ) if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glLineStipple %d %u\n", factor, pattern); factor = CLAMP( factor, 1, 256 ); if (ctx->Line.StippleFactor == factor && ctx->Line.StipplePattern == pattern) return; - FLUSH_VERTICES(ctx, _NEW_LINE); + FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLineState ? 0 : _NEW_LINE); + ctx->NewDriverState |= ctx->DriverFlags.NewLineState; ctx->Line.StippleFactor = factor; ctx->Line.StipplePattern = pattern; if (ctx->Driver.LineStipple) ctx->Driver.LineStipple( ctx, factor, pattern ); } /** * Initialize the context line state. diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index ff494cd..dfab318 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -4441,20 +4441,23 @@ struct gl_driver_flags /** gl_context::Transform::EyeUserPlane */ uint64_t NewClipPlane; /** gl_context::Transform::ClipPlanesEnabled */ uint64_t NewClipPlaneEnable; /** gl_context::Transform::DepthClamp */ uint64_t NewDepthClamp; + /** gl_context::Line */ + uint64_t NewLineState; + /** gl_context::Polygon */ uint64_t NewPolygonState; /** gl_context::ViewportArray */ uint64_t NewViewport; }; struct gl_uniform_buffer_binding { struct gl_buffer_object *BufferObject; diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index e2a4ffb..864749a 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -204,21 +204,20 @@ st_invalidate_state(struct gl_context * ctx) if (new_state & _NEW_FRAG_CLAMP) { if (st->clamp_frag_color_in_shader) st->dirty |= ST_NEW_FS_STATE; else st->dirty |= ST_NEW_RASTERIZER; } } if (new_state & (_NEW_LIGHT | - _NEW_LINE | _NEW_POINT)) st->dirty |= ST_NEW_RASTERIZER; if (new_state & _NEW_PROJECTION && st_user_clip_planes_enabled(ctx)) st->dirty |= ST_NEW_CLIP_STATE; if (new_state & _NEW_PIXEL) st->dirty |= ST_NEW_PIXEL_TRANSFER; @@ -514,20 +513,21 @@ static void st_init_driver_flags(struct st_context *st) f->NewMultisampleEnable |= ST_NEW_FS_STATE; f->NewSampleShading |= ST_NEW_FS_STATE; } else { f->NewSampleShading |= ST_NEW_RASTERIZER; } f->NewClipControl = ST_NEW_VIEWPORT | ST_NEW_RASTERIZER; f->NewClipPlane = ST_NEW_CLIP_STATE; f->NewClipPlaneEnable = ST_NEW_RASTERIZER; f->NewDepthClamp = ST_NEW_RASTERIZER; + f->NewLineState = ST_NEW_RASTERIZER; f->NewPolygonState = ST_NEW_RASTERIZER; f->NewViewport = ST_NEW_VIEWPORT; } struct st_context *st_create_context(gl_api api, struct pipe_context *pipe, const struct gl_config *visual, struct st_context *share, const struct st_config_options *options) { struct gl_context *ctx; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev