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

Anuj Phogat anuj.phogat at gmail.com
Wed Jan 29 16:22:05 PST 2014


On Wed, Jan 29, 2014 at 11:26 AM, Chris Forbes <chrisf at ijw.co.nz> wrote:
> 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, It's not much work. I will untangle and send them to mesa-stable.
But '[PATCH V2 1/3] i965: Add an option to ignore sample qualifier'
(master commit 3313cc2) and few other changes related to sample
qualifier will have to go in stable branch along with ARB_gpu_shader5.
I'll put a reminder to myself.

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