[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