summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2015-04-07 17:13:45 -0700
committerKenneth Graunke <[email protected]>2015-04-11 11:39:48 -0700
commitb3e286c4575bf6af343c1a03471fd876cdfb5c43 (patch)
tree4934c1751fae5ca735d359eeaf573a749c5b784e
parentf41f07f685e7f585e433b5fd1fadf602e74f0f1e (diff)
nir: Store num_direct_uniforms in the nir_shader.
Storing this here is pretty sketchy - I don't know if any driver other than i965 will want to use it. But this will make it a lot easier to generate NIR code at link time. We'll probably rework it anyway. (Ian suggested making nir_assign_var_locations_scalar_direct_first simply modify the nir_shader's fields, rather than passing pointers to them. If this stays long term, we should do that. But Jason and I suspect we'll be reworking this area again in the near future.) Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/glsl/nir/nir.h3
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_nir.cpp5
2 files changed, 6 insertions, 2 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 653123780ff..2d1d870b1f8 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1431,6 +1431,9 @@ typedef struct nir_shader {
* access plus one
*/
unsigned num_inputs, num_uniforms, num_outputs;
+
+ /** the number of uniforms that are only accessed directly */
+ unsigned num_direct_uniforms;
} nir_shader;
#define nir_foreach_overload(shader, overload) \
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
index 6bb52ebd877..4ee92a8208c 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -120,7 +120,7 @@ fs_visitor::emit_nir_code()
if (shader_prog) {
nir_assign_var_locations_scalar_direct_first(nir, &nir->uniforms,
- &num_direct_uniforms,
+ &nir->num_direct_uniforms,
&nir->num_uniforms);
} else {
/* ARB programs generally create a giant array of "uniform" data, and allow
@@ -128,7 +128,7 @@ fs_visitor::emit_nir_code()
* analysis, it's all or nothing. num_direct_uniforms is only useful when
* we have some direct and some indirect access; it doesn't matter here.
*/
- num_direct_uniforms = 0;
+ nir->num_direct_uniforms = 0;
}
nir_assign_var_locations_scalar(&nir->inputs, &nir->num_inputs);
nir_assign_var_locations_scalar(&nir->outputs, &nir->num_outputs);
@@ -343,6 +343,7 @@ void
fs_visitor::nir_setup_uniforms(nir_shader *shader)
{
uniforms = shader->num_uniforms;
+ num_direct_uniforms = shader->num_direct_uniforms;
/* We split the uniform register file in half. The first half is
* entirely direct uniforms. The second half is indirect.