i965/vec4: Enable NIR-vec4 pass on ARB_vertex_programs

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Antia Puentes 2015-07-08 12:44:15 +02:00 committed by Jason Ekstrand
parent 287b006a67
commit 90825e3ca9

View file

@ -1732,18 +1732,16 @@ vec4_visitor::run(gl_clip_plane *clip_planes)
emit_prolog();
if (shader) {
if (use_vec4_nir) {
assert(prog->nir != NULL);
emit_nir_code();
if (failed)
return false;
} else {
/* Generate VS IR for main(). (the visitor only descends into
* functions called "main").
*/
visit_instructions(shader->base.ir);
}
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();
}
@ -1921,18 +1919,21 @@ brw_vs_emit(struct brw_context *brw,
if (unlikely(INTEL_DEBUG & DEBUG_VS))
brw_dump_ir("vertex", prog, &shader->base, &vp->Base);
if (brw->intelScreen->compiler->scalar_vs) {
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
* the last minute, even though it's lame.
*/
assert(vp->Base.Id == 0 && prog == NULL);
vp->Base.nir =
brw_create_nir(brw, NULL, &vp->Base, MESA_SHADER_VERTEX, true);
}
if (!vp->Base.nir &&
(brw->intelScreen->compiler->scalar_vs ||
brw->intelScreen->compiler->glsl_compiler_options[MESA_SHADER_VERTEX].NirOptions != NULL)) {
/* 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
* the last minute, even though it's lame.
*/
assert(vp->Base.Id == 0 && prog == NULL);
vp->Base.nir =
brw_create_nir(brw, NULL, &vp->Base, MESA_SHADER_VERTEX,
brw->intelScreen->compiler->scalar_vs);
}
if (brw->intelScreen->compiler->scalar_vs) {
prog_data->base.dispatch_mode = DISPATCH_MODE_SIMD8;
fs_visitor v(brw->intelScreen->compiler, brw,