naga-agal: Fix Opcode::Rcp implementation

MathFunction::Inverse doesn't work on vectors.
This commit is contained in:
Aaron Hill 2023-09-30 16:44:45 -04:00
parent 2dcd783261
commit d2f0787c2c
1 changed files with 16 additions and 6 deletions

View File

@ -1309,12 +1309,22 @@ impl<'a> NagaBuilder<'a> {
} }
Opcode::Rcp => { Opcode::Rcp => {
let source = self.emit_source_field_load(source1, true)?; let source = self.emit_source_field_load(source1, true)?;
let rcp = self.evaluate_expr(Expression::Math {
fun: MathFunction::Inverse, let f32_one = self
arg: source, .func
arg1: None, .expressions
arg2: None, .append(Expression::Literal(Literal::F32(1.0)), Span::UNDEFINED);
arg3: None,
let vec_one = self.evaluate_expr(Expression::Splat {
size: naga::VectorSize::Quad,
value: f32_one,
});
// Perform 'vec4(1.0, 1.0, 1.0. 1.0) / src'
let rcp = self.evaluate_expr(Expression::Binary {
op: BinaryOperator::Divide,
left: vec_one,
right: source,
}); });
self.emit_dest_store(dest, rcp)?; self.emit_dest_store(dest, rcp)?;
} }