diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index f4bc7aa16bb..835e842a848 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -1273,18 +1273,6 @@ ntq_emit_alu(struct vc4_compile *c, nir_alu_instr *instr) result = qir_V8MULD(c, src[0], src[1]); break; - case nir_op_fddx: - case nir_op_fddx_coarse: - case nir_op_fddx_fine: - result = ntq_fddx(c, src[0]); - break; - - case nir_op_fddy: - case nir_op_fddy_coarse: - case nir_op_fddy_fine: - result = ntq_fddy(c, src[0]); - break; - case nir_op_uadd_carry: qir_SF(c, qir_ADD(c, src[0], src[1])); result = ntq_emit_cond_to_int(c, QPU_COND_CS); @@ -1858,6 +1846,20 @@ ntq_emit_intrinsic(struct vc4_compile *c, nir_intrinsic_instr *instr) break; } + case nir_intrinsic_ddx: + case nir_intrinsic_ddx_coarse: + case nir_intrinsic_ddx_fine: + ntq_store_def(c, &instr->def, 0, + ntq_fddx(c, ntq_get_src(c, instr->src[0], 0))); + break; + + case nir_intrinsic_ddy: + case nir_intrinsic_ddy_coarse: + case nir_intrinsic_ddy_fine: + ntq_store_def(c, &instr->def, 0, + ntq_fddy(c, ntq_get_src(c, instr->src[0], 0))); + break; + default: fprintf(stderr, "Unknown intrinsic: "); nir_print_instr(&instr->instr, stderr); @@ -2179,6 +2181,8 @@ static const nir_shader_compiler_options nir_options = { .lower_mul_high = true, .max_unroll_iterations = 32, .force_indirect_unrolling = (nir_var_shader_in | nir_var_shader_out | nir_var_function_temp), + .has_ddx_intrinsics = true, + .scalarize_ddx = true, }; const void *