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

Pohjolainen, Topi topi.pohjolainen at intel.com
Fri Oct 9 00:15:02 PDT 2015


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

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