This patch introduces a brw->scalar_gs flag, similar to brw->scalar_vs, which controls whether or not to use SIMD8 geometry shaders. For now, we control it via a new environment variable, INTEL_SCALAR_GS. This provides a convenient way to try it out. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>tags/11.1-branchpoint
@@ -90,6 +90,7 @@ struct brw_compiler { | |||
void (*shader_perf_log)(void *, const char *str, ...) PRINTFLIKE(2, 3); | |||
bool scalar_vs; | |||
bool scalar_gs; | |||
struct gl_shader_compiler_options glsl_compiler_options[MESA_SHADER_STAGES]; | |||
}; | |||
@@ -57,6 +57,7 @@ brw_codegen_gs_prog(struct brw_context *brw, | |||
struct brw_geometry_program *gp, | |||
struct brw_gs_prog_key *key) | |||
{ | |||
struct brw_compiler *compiler = brw->intelScreen->compiler; | |||
struct gl_shader *shader = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]; | |||
struct brw_stage_state *stage_state = &brw->gs.base; | |||
struct brw_gs_prog_data prog_data; | |||
@@ -86,7 +87,7 @@ brw_codegen_gs_prog(struct brw_context *brw, | |||
prog_data.base.base.nr_image_params = gs->NumImages; | |||
brw_nir_setup_glsl_uniforms(gp->program.Base.nir, prog, &gp->program.Base, | |||
&prog_data.base.base, false); | |||
&prog_data.base.base, compiler->scalar_gs); | |||
GLbitfield64 outputs_written = gp->program.Base.OutputsWritten; | |||
@@ -79,6 +79,8 @@ is_scalar_shader_stage(const struct brw_compiler *compiler, int stage) | |||
case MESA_SHADER_FRAGMENT: | |||
case MESA_SHADER_COMPUTE: | |||
return true; | |||
case MESA_SHADER_GEOMETRY: | |||
return compiler->scalar_gs; | |||
case MESA_SHADER_VERTEX: | |||
return compiler->scalar_vs; | |||
default: | |||
@@ -101,6 +103,9 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo) | |||
if (devinfo->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS)) | |||
compiler->scalar_vs = true; | |||
if (devinfo->gen >= 8 && brw_env_var_as_boolean("INTEL_SCALAR_GS", false)) | |||
compiler->scalar_gs = true; | |||
nir_shader_compiler_options *nir_options = | |||
rzalloc(compiler, nir_shader_compiler_options); | |||
nir_options->native_integers = true; |