On Thu, Feb 4, 2016 at 11:12 AM, Neil Roberts <n...@linux.intel.com> wrote: > Previously the framebuffer default sample count was taken directly > from the value given by the application. On the i965 driver on HSW if > the value wasn't one that is supported by the hardware it would hit an > assert when it tried to program the state for it. This patch fixes it > by adding a derived sample count to the state for the default > framebuffer. The driver can then quantize this to one of the valid > values in its UpdateState handler when the _NEW_BUFFERS state changes. > _mesa_geometric_samples is changed to use the new derived value. > > Fixes the piglit test arb_framebuffer_no_attachments-query > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93957 > Cc: Ilia Mirkin <imir...@alum.mit.edu> > --- > src/mesa/drivers/dri/i965/brw_context.c | 19 +++++++++++++++++++ > src/mesa/main/framebuffer.h | 3 ++- > src/mesa/main/mtypes.h | 4 ++++ > 3 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.c > b/src/mesa/drivers/dri/i965/brw_context.c > index 1032e5a..44d2fe4 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.c > +++ b/src/mesa/drivers/dri/i965/brw_context.c > @@ -167,6 +167,19 @@ intel_viewport(struct gl_context *ctx) > } > > static void > +intel_update_framebuffer(struct gl_context *ctx, > + struct gl_framebuffer *fb) > +{ > + struct brw_context *brw = brw_context(ctx); > + > + /* Quantize the derived default number of samples > + */
Not a lot of effort either way, but this only needs to be done if !fb->_HasAttachments right? > + fb->DefaultGeometry._NumSamples = > + intel_quantize_num_samples(brw->intelScreen, > + fb->DefaultGeometry.NumSamples); > +} > + > +static void > intel_update_state(struct gl_context * ctx, GLuint new_state) > { > struct brw_context *brw = brw_context(ctx); > @@ -245,6 +258,12 @@ intel_update_state(struct gl_context * ctx, GLuint > new_state) > } > > _mesa_lock_context_textures(ctx); > + > + if (new_state & _NEW_BUFFERS) { > + intel_update_framebuffer(ctx, ctx->DrawBuffer); > + if (ctx->DrawBuffer != ctx->ReadBuffer) > + intel_update_framebuffer(ctx, ctx->ReadBuffer); > + } > } > > #define flushFront(screen) ((screen)->image.loader ? > (screen)->image.loader->flushFrontBuffer : > (screen)->dri2.loader->flushFrontBuffer) > diff --git a/src/mesa/main/framebuffer.h b/src/mesa/main/framebuffer.h > index ab077ed..fa434d4 100644 > --- a/src/mesa/main/framebuffer.h > +++ b/src/mesa/main/framebuffer.h > @@ -97,7 +97,8 @@ static inline GLuint > _mesa_geometric_samples(const struct gl_framebuffer *buffer) > { > return buffer->_HasAttachments ? > - buffer->Visual.samples : buffer->DefaultGeometry.NumSamples; > + buffer->Visual.samples : > + buffer->DefaultGeometry._NumSamples; > } > > static inline GLuint > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 58064aa..745eeb8 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3223,6 +3223,10 @@ struct gl_framebuffer > struct { > GLuint Width, Height, Layers, NumSamples; > GLboolean FixedSampleLocations; > + /* Derived from NumSamples by the driver so that it can choose a valid > + * value for the hardware. > + */ > + GLuint _NumSamples; > } DefaultGeometry; > > /** \name Drawing bounds (Intersection of buffer size and scissor box) > -- > 2.5.0 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev