i965/vec4: Use the replicated fdot instruction in NIR
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
This commit is contained in:
@@ -96,6 +96,14 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
|
||||
*/
|
||||
nir_options->lower_ffma = true;
|
||||
nir_options->lower_sub = true;
|
||||
/* In the vec4 backend, our dpN instruction replicates its result to all
|
||||
* the components of a vec4. We would like NIR to give us replicated fdot
|
||||
* instructions because it can optimize better for us.
|
||||
*
|
||||
* For the FS backend, it should be lowered away by the scalarizing pass so
|
||||
* we should never see fdot anyway.
|
||||
*/
|
||||
nir_options->fdot_replicates = true;
|
||||
|
||||
/* We want the GLSL compiler to emit code that uses condition codes */
|
||||
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
|
||||
@@ -1254,17 +1254,17 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||
break;
|
||||
|
||||
case nir_op_fdot2:
|
||||
case nir_op_fdot_replicated2:
|
||||
inst = emit(BRW_OPCODE_DP2, dst, op[0], op[1]);
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
case nir_op_fdot3:
|
||||
case nir_op_fdot_replicated3:
|
||||
inst = emit(BRW_OPCODE_DP3, dst, op[0], op[1]);
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
case nir_op_fdot4:
|
||||
case nir_op_fdot_replicated4:
|
||||
inst = emit(BRW_OPCODE_DP4, dst, op[0], op[1]);
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user