[Mesa-dev] [PATCH 06/17] nir/info: Add a few bits of info for fragment shaders

Jason Ekstrand jason at jlekstrand.net
Fri Oct 9 05:58:41 PDT 2015


On Fri, Oct 9, 2015 at 12:15 AM, Pohjolainen, Topi
<topi.pohjolainen at intel.com> wrote:
> On Thu, Oct 08, 2015 at 05:22:38PM -0700, Jason Ekstrand wrote:
>> ---
>>  src/glsl/nir/glsl_to_nir.cpp   |  9 +++++++++
>>  src/glsl/nir/nir.h             | 13 +++++++++++++
>>  src/mesa/program/prog_to_nir.c |  6 ++++++
>>  3 files changed, 28 insertions(+)
>>
>> diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
>> index e4aa709..ddacb4e 100644
>> --- a/src/glsl/nir/glsl_to_nir.cpp
>> +++ b/src/glsl/nir/glsl_to_nir.cpp
>> @@ -173,6 +173,15 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
>>        shader->info.gs.invocations = sh->Geom.Invocations;
>>        break;
>>
>> +   case MESA_SHADER_FRAGMENT: {
>> +      struct gl_fragment_program *fp =
>> +         (struct gl_fragment_program *)sh->Program;
>> +
>> +      shader->info.fs.uses_discard = fp->UsesKill;
>> +      shader->info.fs.early_fragment_tests = sh->EarlyFragmentTests;
>> +      shader->info.fs.depth_layout = fp->FragDepthLayout;
>
> This series replaces in patch 15 the expression:
>
> fp->Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH)
>
> with this, right? If that is the case, it would be nice to say something in
> one of the commits (or perhaps even use a separate patch changing the logic
> itself).

Not quite.  I believe that's replaced with

shader->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH)

It is used in patch 15 but it's used by the updated compute_depth_mode function.

--Jason

>> +   }
>> +
>>     case MESA_SHADER_COMPUTE: {
>>        struct gl_compute_program *cp = (struct gl_compute_program *)sh->Program;
>>        shader->info.cs.local_size[0] = cp->LocalSize[0];
>> diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
>> index 2ce958a..14f5535 100644
>> --- a/src/glsl/nir/nir.h
>> +++ b/src/glsl/nir/nir.h
>> @@ -1503,6 +1503,19 @@ typedef struct nir_shader_info {
>>        } gs;
>>
>>        struct {
>> +         bool uses_discard;
>> +
>> +         /**
>> +          * Whether early fragment tests are enabled as defined by
>> +          * ARB_shader_image_load_store.
>> +          */
>> +         bool early_fragment_tests;
>> +
>> +         /** gl_FragDepth layout for ARB_conservative_depth. */
>> +         enum gl_frag_depth_layout depth_layout;
>> +      } fs;
>> +
>> +      struct {
>>           unsigned local_size[3];
>>        } cs;
>>     };
>> diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c
>> index fc00534..3d91b3b 100644
>> --- a/src/mesa/program/prog_to_nir.c
>> +++ b/src/mesa/program/prog_to_nir.c
>> @@ -1135,6 +1135,12 @@ prog_to_nir(const struct gl_program *prog,
>>     s->info.uses_clip_distance_out = false;
>>     s->info.separate_shader = false;
>>
>> +   if (stage == MESA_SHADER_FRAGMENT) {
>> +      struct gl_fragment_program *fp = (struct gl_fragment_program *)prog;
>> +
>> +      s->info.fs.uses_discard = fp->UsesKill;
>> +   }
>> +
>>  fail:
>>     if (c->error) {
>>        ralloc_free(s);
>> --
>> 2.5.0.400.gff86faf
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list