[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 06:20:44 PDT 2015
On Thu, Oct 8, 2015 at 5:22 PM, Jason Ekstrand <jason at jlekstrand.net> 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;
Missing a break statement. Fixed locally.
> + }
> +
> 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
>
More information about the mesa-dev
mailing list