mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[spv-in] derivative ops
This commit is contained in:
committed by
Dzmitry Malyshau
parent
f06583ca7d
commit
057fa336a8
@@ -580,6 +580,31 @@ impl<I: Iterator<Item = u32>> Parser<I> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn parse_expr_derivative(
|
||||
&mut self,
|
||||
expressions: &mut Arena<crate::Expression>,
|
||||
axis: crate::DerivativeAxis,
|
||||
) -> Result<(), Error> {
|
||||
let result_type_id = self.next()?;
|
||||
let result_id = self.next()?;
|
||||
let arg_id = self.next()?;
|
||||
|
||||
let arg_lexp = self.lookup_expression.lookup(arg_id)?;
|
||||
|
||||
let expr = crate::Expression::Derivative {
|
||||
axis,
|
||||
expr: arg_lexp.handle,
|
||||
};
|
||||
self.lookup_expression.insert(
|
||||
result_id,
|
||||
LookupExpression {
|
||||
handle: expressions.append(expr),
|
||||
type_id: result_type_id,
|
||||
},
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn insert_composite(
|
||||
&self,
|
||||
root_expr: Handle<crate::Expression>,
|
||||
@@ -1654,6 +1679,15 @@ impl<I: Iterator<Item = u32>> Parser<I> {
|
||||
continue_block_id,
|
||||
});
|
||||
}
|
||||
Op::DPdx | Op::DPdxFine | Op::DPdxCoarse => {
|
||||
self.parse_expr_derivative(expressions, crate::DerivativeAxis::X)?;
|
||||
}
|
||||
Op::DPdy | Op::DPdyFine | Op::DPdyCoarse => {
|
||||
self.parse_expr_derivative(expressions, crate::DerivativeAxis::Y)?;
|
||||
}
|
||||
Op::Fwidth | Op::FwidthFine | Op::FwidthCoarse => {
|
||||
self.parse_expr_derivative(expressions, crate::DerivativeAxis::Width)?;
|
||||
}
|
||||
_ => return Err(Error::UnsupportedInstruction(self.state, inst.op)),
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user