nir: Add native_integers to nir_shader_compiler_options.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 6 Mar 2015 09:17:22 +0000 (01:17 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 9 Mar 2015 03:03:57 +0000 (20:03 -0700)
glsl_to_nir, tgsi_to_nir, and prog_to_nir all want to know whether the
driver supports native integers.  Presumably other passes may as well.

Adding this to nir_shader_compiler_options is an easy way to provide
that information, as it's accessible via nir_shader::options.

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/glsl/nir/nir.h
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index 7e40ef485a1a732cbdde0fc5b4bd7b3274fb8b46..0d96e0383f7638c6204f59422689b1f79f715431 100644 (file)
@@ -43,7 +43,7 @@ namespace {
 class nir_visitor : public ir_visitor
 {
 public:
-   nir_visitor(nir_shader *shader, bool supports_ints);
+   nir_visitor(nir_shader *shader);
    ~nir_visitor();
 
    virtual void visit(ir_variable *);
@@ -125,12 +125,11 @@ private:
 }; /* end of anonymous namespace */
 
 nir_shader *
-glsl_to_nir(exec_list *ir, bool native_integers,
-            const nir_shader_compiler_options *options)
+glsl_to_nir(exec_list *ir, const nir_shader_compiler_options *options)
 {
    nir_shader *shader = nir_shader_create(NULL, options);
 
-   nir_visitor v1(shader, native_integers);
+   nir_visitor v1(shader);
    nir_function_visitor v2(&v1);
    v2.run(ir);
    visit_exec_list(ir, &v1);
@@ -138,9 +137,9 @@ glsl_to_nir(exec_list *ir, bool native_integers,
    return shader;
 }
 
-nir_visitor::nir_visitor(nir_shader *shader, bool supports_ints)
+nir_visitor::nir_visitor(nir_shader *shader)
 {
-   this->supports_ints = supports_ints;
+   this->supports_ints = shader->options->native_integers;
    this->shader = shader;
    this->is_global = true;
    this->var_table = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
index 730094552ce61899ca8f1ae5ff6816f1e1324d55..dd627935e1f65fcbb5beeb97409e5d36e5b942e4 100644 (file)
@@ -32,7 +32,7 @@
 extern "C" {
 #endif
 
-nir_shader *glsl_to_nir(exec_list *ir, bool native_integers,
+nir_shader *glsl_to_nir(exec_list *ir,
                         const nir_shader_compiler_options *options);
 
 #ifdef __cplusplus
index b935354ad551cb79da7822c16664e0d053ed6553..669a26ed24d67cb329557bac3631a2cf7194c290 100644 (file)
@@ -1370,6 +1370,12 @@ typedef struct nir_shader_compiler_options {
    bool lower_fsqrt;
    /** lowers fneg and ineg to fsub and isub. */
    bool lower_negate;
+
+   /**
+    * Does the driver support real 32-bit integers?  (Otherwise, integers
+    * are simulated by floats.)
+    */
+   bool native_integers;
 } nir_shader_compiler_options;
 
 typedef struct nir_shader {
index 8141b45f73561553cb52102a81c98755dfe382f3..0881e489fe2f295edf8dbdc763c38f844b026088 100644 (file)
@@ -551,7 +551,9 @@ brw_initialize_context_constants(struct brw_context *brw)
       ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 128;
    }
 
-   static const nir_shader_compiler_options nir_options = {};
+   static const nir_shader_compiler_options nir_options = {
+      .native_integers = true,
+   };
 
    /* We want the GLSL compiler to emit code that uses condition codes */
    for (int i = 0; i < MESA_SHADER_STAGES; i++) {
index e24bf92eef5dd381e2feb19fe597c3deef858b5d..ccb5cea674b5835db74ba874bd98d81fcae518e0 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, true, options);
+   nir_shader *nir = glsl_to_nir(shader->base.ir, options);
    nir_validate_shader(nir);
 
    nir_lower_global_vars_to_local(nir);