nir: Plumb the shader stage into glsl_to_nir().
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 6 Mar 2015 09:22:49 +0000 (01:22 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 9 Mar 2015 03:04:01 +0000 (20:04 -0700)
The next commit needs to know the shader stage in glsl_to_nir().
To facilitate that, we pass the gl_shader rather than the raw exec_list
of instructions.  This has both the exec_list and the stage.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/glsl/nir/glsl_to_nir.cpp
src/glsl/nir/glsl_to_nir.h
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index 0d96e0383f7638c6204f59422689b1f79f715431..ddad207232ea7678252f810b2a1ed257ea061581 100644 (file)
@@ -43,7 +43,7 @@ namespace {
 class nir_visitor : public ir_visitor
 {
 public:
-   nir_visitor(nir_shader *shader);
+   nir_visitor(nir_shader *shader, gl_shader_stage stage);
    ~nir_visitor();
 
    virtual void visit(ir_variable *);
@@ -83,6 +83,7 @@ private:
    bool supports_ints;
 
    nir_shader *shader;
+   gl_shader_stage stage;
    nir_function_impl *impl;
    exec_list *cf_node_list;
    nir_instr *result; /* result of the expression tree last visited */
@@ -125,22 +126,23 @@ private:
 }; /* end of anonymous namespace */
 
 nir_shader *
-glsl_to_nir(exec_list *ir, const nir_shader_compiler_options *options)
+glsl_to_nir(struct gl_shader *sh, const nir_shader_compiler_options *options)
 {
    nir_shader *shader = nir_shader_create(NULL, options);
 
-   nir_visitor v1(shader);
+   nir_visitor v1(shader, sh->Stage);
    nir_function_visitor v2(&v1);
-   v2.run(ir);
-   visit_exec_list(ir, &v1);
+   v2.run(sh->ir);
+   visit_exec_list(sh->ir, &v1);
 
    return shader;
 }
 
-nir_visitor::nir_visitor(nir_shader *shader)
+nir_visitor::nir_visitor(nir_shader *shader, gl_shader_stage stage)
 {
    this->supports_ints = shader->options->native_integers;
    this->shader = shader;
+   this->stage = stage;
    this->is_global = true;
    this->var_table = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
                                              _mesa_key_pointer_equal);
index dd627935e1f65fcbb5beeb97409e5d36e5b942e4..3801e8c55c631c18949495dc20918aa6db74b0b2 100644 (file)
@@ -32,7 +32,7 @@
 extern "C" {
 #endif
 
-nir_shader *glsl_to_nir(exec_list *ir,
+nir_shader *glsl_to_nir(struct gl_shader *sh,
                         const nir_shader_compiler_options *options);
 
 #ifdef __cplusplus
index ccb5cea674b5835db74ba874bd98d81fcae518e0..3bb68063331b1fa5eb5027b59708494eebb9b28b 100644 (file)
@@ -87,7 +87,7 @@ fs_visitor::emit_nir_code()
 
    /* first, lower the GLSL IR shader to NIR */
    lower_output_reads(shader->base.ir);
-   nir_shader *nir = glsl_to_nir(shader->base.ir, options);
+   nir_shader *nir = glsl_to_nir(&shader->base, options);
    nir_validate_shader(nir);
 
    nir_lower_global_vars_to_local(nir);