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

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
Jason Ekstrand
2015-10-08 15:47:09 -07:00
parent 4889c73dd1
commit 688d2e4585
3 changed files with 29 additions and 0 deletions
+10
View File
@@ -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];
+13
View File
@@ -1502,6 +1502,19 @@ typedef struct nir_shader_info {
unsigned invocations;
} 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;
+6
View File
@@ -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);