Mesa (master): nir/info: Add a few bits of info for fragment shaders

Jason Ekstrand jekstrand at kemper.freedesktop.org
Mon Oct 19 17:18:41 UTC 2015


Module: Mesa
Branch: master
Commit: 688d2e45855299dcf474791f29d65040ce5cb2dc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=688d2e45855299dcf474791f29d65040ce5cb2dc

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Thu Oct  8 15:47:09 2015 -0700

nir/info: Add a few bits of info for fragment shaders

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

---

 src/glsl/nir/glsl_to_nir.cpp   |   10 ++++++++++
 src/glsl/nir/nir.h             |   13 +++++++++++++
 src/mesa/program/prog_to_nir.c |    6 ++++++
 3 files changed, 29 insertions(+)

diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
index d230ad4..76e1382 100644
--- a/src/glsl/nir/glsl_to_nir.cpp
+++ b/src/glsl/nir/glsl_to_nir.cpp
@@ -173,6 +173,16 @@ 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;
+      break;
+   }
+
    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 32259e7..2ab48fb 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 da61a2b..539e3c0 100644
--- a/src/mesa/program/prog_to_nir.c
+++ b/src/mesa/program/prog_to_nir.c
@@ -1129,6 +1129,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);




More information about the mesa-commit mailing list