mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[msl-out] copy array elements one by one
This commit is contained in:
committed by
Dzmitry Malyshau
parent
cf3a6da3ce
commit
af4d989f55
@@ -907,12 +907,41 @@ impl<W: Write> Writer<W> {
|
|||||||
writeln!(self.out, "{}{}::discard_fragment();", level, NAMESPACE)?;
|
writeln!(self.out, "{}{}::discard_fragment();", level, NAMESPACE)?;
|
||||||
}
|
}
|
||||||
crate::Statement::Store { pointer, value } => {
|
crate::Statement::Store { pointer, value } => {
|
||||||
|
// we can't assign fixed-size arrays
|
||||||
|
let pointer_info = &context.expression.info[pointer];
|
||||||
|
let array_size =
|
||||||
|
match *pointer_info.ty.inner_with(&context.expression.module.types) {
|
||||||
|
crate::TypeInner::Pointer { base, .. } => {
|
||||||
|
match context.expression.module.types[base].inner {
|
||||||
|
crate::TypeInner::Array {
|
||||||
|
size: crate::ArraySize::Constant(ch),
|
||||||
|
..
|
||||||
|
} => Some(ch),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
match array_size {
|
||||||
|
Some(const_handle) => {
|
||||||
|
let size = context.expression.module.constants[const_handle]
|
||||||
|
.to_array_length()
|
||||||
|
.unwrap();
|
||||||
|
write!(self.out, "{}for(int _i=0; _i<{}; ++_i) ", level, size)?;
|
||||||
|
self.put_expression(pointer, &context.expression, true)?;
|
||||||
|
write!(self.out, "[_i] = ")?;
|
||||||
|
self.put_expression(value, &context.expression, true)?;
|
||||||
|
writeln!(self.out, "[_i];")?;
|
||||||
|
}
|
||||||
|
None => {
|
||||||
write!(self.out, "{}", level)?;
|
write!(self.out, "{}", level)?;
|
||||||
self.put_expression(pointer, &context.expression, true)?;
|
self.put_expression(pointer, &context.expression, true)?;
|
||||||
write!(self.out, " = ")?;
|
write!(self.out, " = ")?;
|
||||||
self.put_expression(value, &context.expression, true)?;
|
self.put_expression(value, &context.expression, true)?;
|
||||||
writeln!(self.out, ";")?;
|
writeln!(self.out, ";")?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
crate::Statement::ImageStore {
|
crate::Statement::ImageStore {
|
||||||
image,
|
image,
|
||||||
coordinate,
|
coordinate,
|
||||||
|
|||||||
Reference in New Issue
Block a user