[Mesa-dev] [PATCH 4/4] main: Use a derived value for the default sample count
Ilia Mirkin
imirkin at alum.mit.edu
Thu Feb 4 16:17:48 UTC 2016
On Thu, Feb 4, 2016 at 11:12 AM, Neil Roberts <neil at 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 <imirkin at 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
>
More information about the mesa-dev
mailing list