i965/vs: Rework the logic for generating NIR from ARB vertex programs

Whether or not to use NIR is now equivalent to brw->scalar_vs.  We can
simplify the logic and make it far less confusing.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand 2015-05-20 12:03:33 -07:00
parent 78644ffc4d
commit b95ec49e57
1 changed files with 11 additions and 12 deletions

View File

@ -1868,8 +1868,6 @@ brw_vs_emit(struct brw_context *brw,
bool start_busy = false; bool start_busy = false;
double start_time = 0; double start_time = 0;
const unsigned *assembly = NULL; const unsigned *assembly = NULL;
bool use_nir =
brw->ctx.Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions != NULL;
if (unlikely(brw->perf_debug)) { if (unlikely(brw->perf_debug)) {
start_busy = (brw->batch.last_bo && start_busy = (brw->batch.last_bo &&
@ -1884,17 +1882,18 @@ brw_vs_emit(struct brw_context *brw,
if (unlikely(INTEL_DEBUG & DEBUG_VS)) if (unlikely(INTEL_DEBUG & DEBUG_VS))
brw_dump_ir("vertex", prog, &shader->base, &c->vp->program.Base); brw_dump_ir("vertex", prog, &shader->base, &c->vp->program.Base);
if (use_nir && !c->vp->program.Base.nir) { if (brw->scalar_vs) {
/* Normally we generate NIR in LinkShader() or ProgramStringNotify(), but if (!c->vp->program.Base.nir) {
* Mesa's fixed-function vertex program handling doesn't notify the driver /* Normally we generate NIR in LinkShader() or
* at all. Just do it here, at the last minute, even though it's lame. * ProgramStringNotify(), but Mesa's fixed-function vertex program
*/ * handling doesn't notify the driver at all. Just do it here, at
assert(c->vp->program.Base.Id == 0 && prog == NULL); * the last minute, even though it's lame.
c->vp->program.Base.nir = */
brw_create_nir(brw, NULL, &c->vp->program.Base, MESA_SHADER_VERTEX); assert(c->vp->program.Base.Id == 0 && prog == NULL);
} c->vp->program.Base.nir =
brw_create_nir(brw, NULL, &c->vp->program.Base, MESA_SHADER_VERTEX);
}
if (brw->scalar_vs && (prog || use_nir)) {
fs_visitor v(brw, mem_ctx, MESA_SHADER_VERTEX, &c->key, fs_visitor v(brw, mem_ctx, MESA_SHADER_VERTEX, &c->key,
&prog_data->base.base, prog, &c->vp->program.Base, 8); &prog_data->base.base, prog, &c->vp->program.Base, 8);
if (!v.run_vs()) { if (!v.run_vs()) {