[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