[Mesa-stable] [PATCH V2 1/3] i965: Add an option to ignore sample qualifier

Chris Forbes chrisf at ijw.co.nz
Wed Jan 29 11:26:36 PST 2014


Anuj, Carl,

I don't think the sample qualifier stuff should end up in 10.0. It's
part of ARB_gpu_shader5 and still not actually enabled even in master.
However, ARB_sample_shading is clearly broken in 10.0 at the moment.

Anuj: How much work is it going to be to untangle these patches so
they don't rely on the sample qualifier stuff?

-- Chris

On Thu, Jan 30, 2014 at 8:15 AM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
> Carl,
>
> Sample shading patches ( master commits 3313cc2, a92e5f7, f5cfb4a, dc2f94b)
> which I recently posted on mesa-stable require following patches:
> master commits 51aa15a, 51c5fc8, 5d326fa, 6429cc0, 2625a34, 88dc246
>
> These patches haven't yet landed in to mesa-stable. So, you can ignore my
> patches till above series from Chris Forbes lands in to mesa-stable.
>
> Thanks
> Anuj
>
> On Fri, Jan 17, 2014 at 12:52 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
>> This will be useful in my next patch which depends on a functionality
>> of _mesa_get_min_invocations_per_fragment() to ignore the sample
>> qualifier (prog->IsSample) based on a flag passed to it.
>>
>> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
>> Cc: Chris Forbes <chrisf at ijw.co.nz>
>> Cc: mesa-stable at lists.freedesktop.org
>> ---
>>  src/mesa/drivers/dri/i965/brw_wm.c        | 2 +-
>>  src/mesa/drivers/dri/i965/gen6_wm_state.c | 2 +-
>>  src/mesa/drivers/dri/i965/gen7_wm_state.c | 4 ++--
>>  src/mesa/program/program.c                | 5 +++--
>>  src/mesa/program/program.h                | 3 ++-
>>  5 files changed, 9 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
>> index 6739a91..dee73c0 100644
>> --- a/src/mesa/drivers/dri/i965/brw_wm.c
>> +++ b/src/mesa/drivers/dri/i965/brw_wm.c
>> @@ -504,7 +504,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
>>
>>     /* _NEW_BUFFERS _NEW_MULTISAMPLE */
>>     key->compute_pos_offset =
>> -      _mesa_get_min_invocations_per_fragment(ctx, &fp->program) > 1 &&
>> +      _mesa_get_min_invocations_per_fragment(ctx, &fp->program, false) > 1 &&
>>        fp->program.Base.SystemValuesRead & SYSTEM_BIT_SAMPLE_POS;
>>
>>     key->compute_sample_id =
>> diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
>> index 83a1708..0bb5ef3 100644
>> --- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
>> +++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
>> @@ -161,7 +161,7 @@ upload_wm_state(struct brw_context *brw)
>>      * better performance than 'SIMD8 only' dispatch.
>>      */
>>     int min_inv_per_frag =
>> -      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program);
>> +      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false);
>>     assert(min_inv_per_frag >= 1);
>>
>>     if (brw->wm.prog_data->prog_offset_16) {
>> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c b/src/mesa/drivers/dri/i965/gen7_wm_state.c
>> index b6561bb..8dcefc2 100644
>> --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
>> +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
>> @@ -103,7 +103,7 @@ upload_wm_state(struct brw_context *brw)
>>        else
>>           dw1 |= GEN7_WM_MSRAST_OFF_PIXEL;
>>
>> -      if (_mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program) > 1)
>> +      if (_mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false) > 1)
>>           dw2 |= GEN7_WM_MSDISPMODE_PERSAMPLE;
>>        else
>>           dw2 |= GEN7_WM_MSDISPMODE_PERPIXEL;
>> @@ -236,7 +236,7 @@ upload_ps_state(struct brw_context *brw)
>>      * better performance than 'SIMD8 only' dispatch.
>>      */
>>     int min_inv_per_frag =
>> -      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program);
>> +      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false);
>>     assert(min_inv_per_frag >= 1);
>>
>>     if (brw->wm.prog_data->prog_offset_16) {
>> diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c
>> index 3c19e8c..ea8eb0d 100644
>> --- a/src/mesa/program/program.c
>> +++ b/src/mesa/program/program.c
>> @@ -1023,7 +1023,8 @@ _mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog)
>>   */
>>  GLint
>>  _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
>> -                                       const struct gl_fragment_program *prog)
>> +                                       const struct gl_fragment_program *prog,
>> +                                       bool ignore_sample_qualifier)
>>  {
>>     /* From ARB_sample_shading specification:
>>      * "Using gl_SampleID in a fragment shader causes the entire shader
>> @@ -1041,7 +1042,7 @@ _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
>>         * "Use of the "sample" qualifier on a fragment shader input
>>         *  forces per-sample shading"
>>         */
>> -      if (prog->IsSample)
>> +      if (prog->IsSample && !ignore_sample_qualifier)
>>           return MAX2(ctx->DrawBuffer->Visual.samples, 1);
>>
>>        if (prog->Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID |
>> diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h
>> index 0e350cd..c47ac1c 100644
>> --- a/src/mesa/program/program.h
>> +++ b/src/mesa/program/program.h
>> @@ -189,7 +189,8 @@ _mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog);
>>
>>  extern GLint
>>  _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
>> -                                       const struct gl_fragment_program *prog);
>> +                                       const struct gl_fragment_program *prog,
>> +                                       bool ignore_sample_qualifier);
>>
>>  static inline GLuint
>>  _mesa_program_enum_to_shader_stage(GLenum v)
>> --
>> 1.8.3.1
>>


More information about the mesa-stable mailing list