[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 19:23:29 UTC 2016


On Thu, Feb 4, 2016 at 11:17 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> 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?

BTW, whether you choose to condition it on _HasAttachments or not, the
whole series is

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

>
>> +   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