[Mesa-dev] [PATCH 01/28] nir: Add an info bit for uses_sample_qualifier

Jason Ekstrand jason at jlekstrand.net
Tue May 10 23:16:21 UTC 2016


---
 src/compiler/nir/glsl_to_nir.cpp   | 1 +
 src/compiler/nir/nir.h             | 5 +++++
 src/compiler/nir/nir_gather_info.c | 8 +++++++-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/glsl_to_nir.cpp b/src/compiler/nir/glsl_to_nir.cpp
index e3fa623..4e50d5c 100644
--- a/src/compiler/nir/glsl_to_nir.cpp
+++ b/src/compiler/nir/glsl_to_nir.cpp
@@ -184,6 +184,7 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
          (struct gl_fragment_program *)sh->Program;
 
       shader->info.fs.uses_discard = fp->UsesKill;
+      shader->info.fs.uses_sample_qualifier = fp->IsSample != 0;
       shader->info.fs.early_fragment_tests = sh->EarlyFragmentTests;
       shader->info.fs.depth_layout = fp->FragDepthLayout;
       break;
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 8a616d4..4b70a45 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1743,6 +1743,11 @@ typedef struct nir_shader_info {
          bool uses_discard;
 
          /**
+          * Whether any inputs are declared with the "sample" qualifier.
+          */
+         bool uses_sample_qualifier;
+
+         /**
           * Whether early fragment tests are enabled as defined by
           * ARB_shader_image_load_store.
           */
diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
index d45b1a2..89a6302 100644
--- a/src/compiler/nir/nir_gather_info.c
+++ b/src/compiler/nir/nir_gather_info.c
@@ -125,9 +125,15 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
           shader->stage == MESA_SHADER_FRAGMENT ||
           shader->stage == MESA_SHADER_COMPUTE);
 
+   bool uses_sample_qualifier = false;
    shader->info.inputs_read = 0;
-   foreach_list_typed(nir_variable, var, node, &shader->inputs)
+   foreach_list_typed(nir_variable, var, node, &shader->inputs) {
       shader->info.inputs_read |= get_io_mask(var, shader->stage);
+      uses_sample_qualifier |= var->data.sample;
+   }
+
+   if (shader->stage == MESA_SHADER_FRAGMENT)
+      shader->info.fs.uses_sample_qualifier = uses_sample_qualifier;
 
    /* TODO: Some day we may need to add stream support to NIR */
    shader->info.outputs_written = 0;
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list