iris/program: Don't try to push ubo ranges for compute
authorJordan Justen <jordan.l.justen@intel.com>
Tue, 18 Sep 2018 21:23:58 +0000 (14:23 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:09 +0000 (10:26 -0800)
We only can push constants for compute shaders from one range.

Gallium glsl-to-nir (src/mesa/state_tracker/st_glsl_to_nir.cpp) lowers
all uniform accesses to a ubo.

Unfortunately we also load the subgroup-id as a uniform in the
compiler. Since we use the 1 push range for this subgroup-id, we then
lose the ability to actually push the ubo with all the normal user
uniform values.

In other words, there is lots of room for performance improvement, but
at least retrieving the uniforms as pull-constants is functional for
now.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
src/gallium/drivers/iris/iris_program.c

index a62b2d0fb4242c9be9ed9f4e57d230aa3e99e7eb..4aba8d0bfe34f3c1045ef1122eb67cb1cce1aa8d 100644 (file)
@@ -429,7 +429,8 @@ iris_setup_uniforms(const struct brw_compiler *compiler,
    }
 
    // XXX: vs clip planes?
-   brw_nir_analyze_ubo_ranges(compiler, nir, NULL, prog_data->ubo_ranges);
+   if (nir->info.stage != MESA_SHADER_COMPUTE)
+      brw_nir_analyze_ubo_ranges(compiler, nir, NULL, prog_data->ubo_ranges);
 }
 
 /**