mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 15:10:10 +01:00
i965/vec4: Always use NIR
GLSL IR vs. NIR shader-db results for vec4 programs on i965: total instructions in shared programs: 1499328 -> 1388354 (-7.40%) instructions in affected programs: 1245199 -> 1134225 (-8.91%) helped: 7469 HURT: 2440 GLSL IR vs. NIR shader-db results for vec4 programs on G4x: total instructions in shared programs: 1436799 -> 1325825 (-7.72%) instructions in affected programs: 1205599 -> 1094625 (-9.20%) helped: 7469 HURT: 2440 GLSL IR vs. NIR shader-db results for vec4 programs on Iron Lake: total instructions in shared programs: 1436654 -> 1325682 (-7.72%) instructions in affected programs: 1205503 -> 1094531 (-9.21%) helped: 7468 HURT: 2440 GLSL IR vs. NIR shader-db results for vec4 programs on Sandy Bridge: total instructions in shared programs: 2016249 -> 1787033 (-11.37%) instructions in affected programs: 1850547 -> 1621331 (-12.39%) helped: 14856 HURT: 1481 GLSL IR vs. NIR shader-db results for vec4 programs on Ivy Bridge: total instructions in shared programs: 1848027 -> 1648216 (-10.81%) instructions in affected programs: 1660279 -> 1460468 (-12.03%) helped: 14668 HURT: 1369 GLSL IR vs. NIR shader-db results for vec4 programs on Bay Trail: total instructions in shared programs: 1848027 -> 1648216 (-10.81%) instructions in affected programs: 1660279 -> 1460468 (-12.03%) helped: 14668 HURT: 1369 GLSL IR vs. NIR shader-db results for vec4 programs on Haswell: total instructions in shared programs: 1848027 -> 1648216 (-10.81%) instructions in affected programs: 1660279 -> 1460468 (-12.03%) helped: 14668 HURT: 1369 I also ran our full suite of benchmarks on a Haswell and had the following statistically significant (according to ministat) changes: Test master-glsl master-nir diff bench_OglGeomPoint 461.556 463.006 1.450 bench_OglTerrainFlyInst 184.484 187.574 3.090 bench_OglTerrainPanInst 132.412 136.307 3.895 bench_OglTexFilterAniso 19.653 19.645 -0.008 bench_OglTexFilterTri 58.333 58.009 -0.324 bench_OglVSInstancing 65.049 65.327 0.278 bench_trexoff 69.474 69.694 0.220 bench_valley 40.708 41.125 0.417 v2 (Jason Ekstrand): - Remove more uses of NirOptions as a switch - New shader-db numbers - Added benchmark numbers Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
4e0a8e0a50
commit
b85761d11d
3 changed files with 14 additions and 49 deletions
|
|
@ -142,9 +142,7 @@ brwProgramStringNotify(struct gl_context *ctx,
|
|||
|
||||
brw_add_texrect_params(prog);
|
||||
|
||||
if (ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT].NirOptions) {
|
||||
prog->nir = brw_create_nir(brw, NULL, prog, MESA_SHADER_FRAGMENT, true);
|
||||
}
|
||||
prog->nir = brw_create_nir(brw, NULL, prog, MESA_SHADER_FRAGMENT, true);
|
||||
|
||||
brw_fs_precompile(ctx, NULL, prog);
|
||||
break;
|
||||
|
|
@ -168,10 +166,8 @@ brwProgramStringNotify(struct gl_context *ctx,
|
|||
|
||||
brw_add_texrect_params(prog);
|
||||
|
||||
if (ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions) {
|
||||
prog->nir = brw_create_nir(brw, NULL, prog, MESA_SHADER_VERTEX,
|
||||
brw->intelScreen->compiler->scalar_vs);
|
||||
}
|
||||
prog->nir = brw_create_nir(brw, NULL, prog, MESA_SHADER_VERTEX,
|
||||
brw->intelScreen->compiler->scalar_vs);
|
||||
|
||||
brw_vs_precompile(ctx, NULL, prog);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -142,8 +142,7 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
|
|||
if (devinfo->gen < 7)
|
||||
compiler->glsl_compiler_options[i].EmitNoIndirectSampler = true;
|
||||
|
||||
if (is_scalar || brw_env_var_as_boolean("INTEL_USE_NIR", true))
|
||||
compiler->glsl_compiler_options[i].NirOptions = nir_options;
|
||||
compiler->glsl_compiler_options[i].NirOptions = nir_options;
|
||||
}
|
||||
|
||||
return compiler;
|
||||
|
|
@ -271,8 +270,6 @@ process_glsl_ir(gl_shader_stage stage,
|
|||
brw_lower_texture_gradients(brw, shader->ir);
|
||||
do_vec_index_to_cond_assign(shader->ir);
|
||||
lower_vector_insert(shader->ir, true);
|
||||
if (options->NirOptions == NULL)
|
||||
brw_do_cubemap_normalize(shader->ir);
|
||||
lower_offset_arrays(shader->ir);
|
||||
brw_do_lower_unnormalized_offset(shader->ir);
|
||||
lower_noise(shader->ir);
|
||||
|
|
@ -341,9 +338,6 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
|
|||
|
||||
for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) {
|
||||
struct gl_shader *shader = shProg->_LinkedShaders[stage];
|
||||
const struct gl_shader_compiler_options *options =
|
||||
&ctx->Const.ShaderCompilerOptions[stage];
|
||||
|
||||
if (!shader)
|
||||
continue;
|
||||
|
||||
|
|
@ -391,10 +385,8 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
|
|||
|
||||
brw_add_texrect_params(prog);
|
||||
|
||||
if (options->NirOptions) {
|
||||
prog->nir = brw_create_nir(brw, shProg, prog, (gl_shader_stage) stage,
|
||||
is_scalar_shader_stage(compiler, stage));
|
||||
}
|
||||
prog->nir = brw_create_nir(brw, shProg, prog, (gl_shader_stage) stage,
|
||||
is_scalar_shader_stage(compiler, stage));
|
||||
|
||||
_mesa_reference_program(ctx, &prog, NULL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1786,9 +1786,6 @@ vec4_visitor::emit_shader_time_write(int shader_time_subindex, src_reg value)
|
|||
bool
|
||||
vec4_visitor::run()
|
||||
{
|
||||
bool use_vec4_nir =
|
||||
compiler->glsl_compiler_options[stage].NirOptions != NULL;
|
||||
|
||||
sanity_param_count = prog->Parameters->NumParameters;
|
||||
|
||||
if (shader_time_index >= 0)
|
||||
|
|
@ -1798,19 +1795,10 @@ vec4_visitor::run()
|
|||
|
||||
emit_prolog();
|
||||
|
||||
if (use_vec4_nir) {
|
||||
assert(prog->nir != NULL);
|
||||
emit_nir_code();
|
||||
if (failed)
|
||||
return false;
|
||||
} else if (shader) {
|
||||
/* Generate VS IR for main(). (the visitor only descends into
|
||||
* functions called "main").
|
||||
*/
|
||||
visit_instructions(shader->base.ir);
|
||||
} else {
|
||||
emit_program_code();
|
||||
}
|
||||
assert(prog->nir != NULL);
|
||||
emit_nir_code();
|
||||
if (failed)
|
||||
return false;
|
||||
base_ir = NULL;
|
||||
|
||||
emit_thread_end();
|
||||
|
|
@ -1823,18 +1811,9 @@ vec4_visitor::run()
|
|||
* that we have reladdr computations available for CSE, since we'll
|
||||
* often do repeated subexpressions for those.
|
||||
*/
|
||||
if (shader || use_vec4_nir) {
|
||||
move_grf_array_access_to_scratch();
|
||||
move_uniform_array_access_to_pull_constants();
|
||||
} else {
|
||||
/* The ARB_vertex_program frontend emits pull constant loads directly
|
||||
* rather than using reladdr, so we don't need to walk through all the
|
||||
* instructions looking for things to move. There isn't anything.
|
||||
*
|
||||
* We do still need to split things to vec4 size.
|
||||
*/
|
||||
split_uniform_registers();
|
||||
}
|
||||
move_grf_array_access_to_scratch();
|
||||
move_uniform_array_access_to_pull_constants();
|
||||
|
||||
pack_uniform_registers();
|
||||
move_push_constants_to_pull_constants();
|
||||
split_virtual_grfs();
|
||||
|
|
@ -1974,9 +1953,7 @@ brw_vs_emit(struct brw_context *brw,
|
|||
if (unlikely(INTEL_DEBUG & DEBUG_VS))
|
||||
brw_dump_ir("vertex", prog, &shader->base, &vp->Base);
|
||||
|
||||
if (!vp->Base.nir &&
|
||||
(brw->intelScreen->compiler->scalar_vs ||
|
||||
brw->intelScreen->compiler->glsl_compiler_options[MESA_SHADER_VERTEX].NirOptions != NULL)) {
|
||||
if (!vp->Base.nir) {
|
||||
/* Normally we generate NIR in LinkShader() or
|
||||
* ProgramStringNotify(), but Mesa's fixed-function vertex program
|
||||
* handling doesn't notify the driver at all. Just do it here, at
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue