[wgsl-in] Implement module-level scoping.

Fixes #1745: Support out-of-order module scope declarations in WGSL
Fixes #1044: Forbid local variable shadowing in WGSL
Fixes #2076: [wgsl-in] no error for duplicated type definition
Fixes #2071: Global item does not support 'const'
Fixes #2105: [wgsl-in] Type aliases for a vecN<T> doesn't work when constructing vec from a single argument
Fixes #1775: Referencing a function without a return type yields an unknown identifier error.
Fixes #2089: Error span reported on the declaration of a variable instead of its use
Fixes #1996: [wgsl-in] Confusing error: "expected unsigned/signed integer literal, found '1'"

Separate parsing from lowering by generating an AST, which desugars as
much as possible down to something like Naga IR. The AST is then used
to resolve identifiers while lowering to Naga IR.

Co-authored-by: Teodor Tanasoaia <28601907+teoxoy@users.noreply.github.com>
Co-authored-by: Jim Blandy <jimb@red-bean.com>
This commit is contained in:
SparkyPotato 2023-01-12 09:26:28 -08:00 committed by Jim Blandy
parent 7effd12596
commit 6035b07b78
104 changed files with 9624 additions and 7808 deletions

View File

@ -1850,7 +1850,7 @@ impl<W: Write> Writer<W> {
} => {
let name = &self.names[&NameKey::Constant(handle)];
// First write only constant name
write!(self.out, "let {}: ", name)?;
write!(self.out, "const {}: ", name)?;
// Next write constant type and value
match *value {
crate::ScalarValue::Sint(value) => {
@ -1874,7 +1874,7 @@ impl<W: Write> Writer<W> {
crate::ConstantInner::Composite { ty, ref components } => {
let name = &self.names[&NameKey::Constant(handle)];
// First write only constant name
write!(self.out, "let {}: ", name)?;
write!(self.out, "const {}: ", name)?;
// Next write constant type
self.write_type(module, ty)?;

View File

@ -796,7 +796,7 @@ fn expressions() {
# version 450
void main() {
uint index = 0;
--index;
++index;
}

View File

@ -300,20 +300,7 @@ impl Parser {
meta: Span,
) -> Result<Handle<Type>> {
self.typifier_grow(ctx, expr, meta)?;
let resolution = &ctx.typifier[expr];
Ok(match *resolution {
// If the resolution is already a handle return early
crate::proc::TypeResolution::Handle(ty) => ty,
// If it's a value we need to clone it
crate::proc::TypeResolution::Value(_) => match resolution.clone() {
// This is unreachable
crate::proc::TypeResolution::Handle(ty) => ty,
// Add the value to the type arena and return the handle
crate::proc::TypeResolution::Value(inner) => {
self.module.types.insert(Type { name: None, inner }, meta)
}
},
})
Ok(ctx.typifier.register_type(expr, &mut self.module.types))
}
/// Invalidates the cached type resolution for `expr` forcing a recomputation

View File

@ -64,7 +64,35 @@ impl super::ConstantInner {
}
}
/// Helper processor that derives the types of all expressions.
/// A table of types for an `Arena<Expression>`.
///
/// A front end can use a `Typifier` to get types for an arena's expressions
/// while it is still contributing expressions to it. At any point, you can call
/// [`typifier.grow(expr, arena, ctx)`], where `expr` is a `Handle<Expression>`
/// referring to something in `arena`, and the `Typifier` will resolve the types
/// of all the expressions up to and including `expr`. Then you can write
/// `typifier[handle]` to get the type of any handle at or before `expr`.
///
/// Note that `Typifier` does *not* build an `Arena<Type>` as a part of its
/// usual operation. Ideally, a module's type arena should only contain types
/// actually needed by `Handle<Type>`s elsewhere in the module — functions,
/// variables, [`Compose`] expressions, other types, and so on — so we don't
/// want every little thing that occurs as the type of some intermediate
/// expression to show up there.
///
/// Instead, `Typifier` accumulates a [`TypeResolution`] for each expression,
/// which refers to the `Arena<Type>` in the [`ResolveContext`] passed to `grow`
/// as needed. [`TypeResolution`] is a lightweight representation for
/// intermediate types like this; see its documentation for details.
///
/// If you do need to register a `Typifier`'s conclusion in an `Arena<Type>`
/// (say, for a [`LocalVariable`] whose type you've inferred), you can use
/// [`register_type`] to do so.
///
/// [`typifier.grow(expr, arena)`]: Typifier::grow
/// [`register_type`]: Typifier::register_type
/// [`Compose`]: crate::Expression::Compose
/// [`LocalVariable`]: crate::LocalVariable
#[derive(Debug, Default)]
pub struct Typifier {
resolutions: Vec<TypeResolution>,
@ -89,6 +117,34 @@ impl Typifier {
self.resolutions[expr_handle.index()].inner_with(types)
}
/// Add an expression's type to an `Arena<Type>`.
///
/// Add the type of `expr_handle` to `types`, and return a `Handle<Type>`
/// referring to it.
///
/// # Note
///
/// If you just need a [`TypeInner`] for `expr_handle`'s type, consider
/// using `typifier[expression].inner_with(types)` instead. Calling
/// [`TypeResolution::inner_with`] often lets us avoid adding anything to
/// the arena, which can significantly reduce the number of types that end
/// up in the final module.
///
/// [`TypeInner`]: crate::TypeInner
pub fn register_type(
&self,
expr_handle: Handle<crate::Expression>,
types: &mut UniqueArena<crate::Type>,
) -> Handle<crate::Type> {
match self[expr_handle].clone() {
TypeResolution::Handle(handle) => handle,
TypeResolution::Value(inner) => {
types.insert(crate::Type { name: None, inner }, crate::Span::UNDEFINED)
}
}
}
/// Grow this typifier until it contains a type for `expr_handle`.
pub fn grow(
&mut self,
expr_handle: Handle<crate::Expression>,
@ -106,10 +162,13 @@ impl Typifier {
Ok(())
}
/// Invalidates the cached type resolution for `expr_handle` forcing a recomputation
/// Recompute the type resolution for `expr_handle`.
///
/// If the type of the expression hasn't yet been calculated a
/// [`grow`](Self::grow) is performed instead
/// If the type of `expr_handle` hasn't yet been calculated, call
/// [`grow`](Self::grow) to ensure it is covered.
///
/// In either case, when this returns, `self[expr_handle]` should be an
/// updated type resolution for `expr_handle`.
pub fn invalidate(
&mut self,
expr_handle: Handle<crate::Expression>,

476
src/front/wgsl/ast.rs Normal file
View File

@ -0,0 +1,476 @@
use super::Number;
use crate::{Arena, FastHashSet, Handle, Span};
use std::hash::Hash;
#[derive(Debug, Default)]
pub struct TranslationUnit<'a> {
pub decls: Arena<GlobalDecl<'a>>,
/// The common expressions arena for the entire translation unit.
///
/// All functions, global initializers, array lengths, etc. store their
/// expressions here. We apportion these out to individual Naga
/// [`Function`]s' expression arenas at lowering time. Keeping them all in a
/// single arena simplifies handling of things like array lengths (which are
/// effectively global and thus don't clearly belong to any function) and
/// initializers (which can appear in both function-local and module-scope
/// contexts).
///
/// [`Function`]: crate::Function
pub expressions: Arena<Expression<'a>>,
/// Non-user-defined types, like `vec4<f32>` or `array<i32, 10>`.
///
/// These are referred to by `Handle<ast::Type<'a>>` values.
/// User-defined types are referred to by name until lowering.
pub types: Arena<Type<'a>>,
}
#[derive(Debug, Clone, Copy)]
pub struct Ident<'a> {
pub name: &'a str,
pub span: Span,
}
#[derive(Debug)]
pub enum IdentExpr<'a> {
Unresolved(&'a str),
Local(Handle<Local>),
}
/// A reference to a module-scope definition or predeclared object.
///
/// Each [`GlobalDecl`] holds a set of these values, to be resolved to
/// specific definitions later. To support de-duplication, `Eq` and
/// `Hash` on a `Dependency` value consider only the name, not the
/// source location at which the reference occurs.
#[derive(Debug)]
pub struct Dependency<'a> {
/// The name referred to.
pub ident: &'a str,
/// The location at which the reference to that name occurs.
pub usage: Span,
}
impl Hash for Dependency<'_> {
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
self.ident.hash(state);
}
}
impl PartialEq for Dependency<'_> {
fn eq(&self, other: &Self) -> bool {
self.ident == other.ident
}
}
impl Eq for Dependency<'_> {}
/// A module-scope declaration.
#[derive(Debug)]
pub struct GlobalDecl<'a> {
pub kind: GlobalDeclKind<'a>,
/// Names of all module-scope or predeclared objects this
/// declaration uses.
pub dependencies: FastHashSet<Dependency<'a>>,
}
#[derive(Debug)]
pub enum GlobalDeclKind<'a> {
Fn(Function<'a>),
Var(GlobalVariable<'a>),
Const(Const<'a>),
Struct(Struct<'a>),
Type(TypeAlias<'a>),
}
#[derive(Debug)]
pub struct FunctionArgument<'a> {
pub name: Ident<'a>,
pub ty: Handle<Type<'a>>,
pub binding: Option<crate::Binding>,
pub handle: Handle<Local>,
}
#[derive(Debug)]
pub struct FunctionResult<'a> {
pub ty: Handle<Type<'a>>,
pub binding: Option<crate::Binding>,
}
#[derive(Debug)]
pub struct EntryPoint {
pub stage: crate::ShaderStage,
pub early_depth_test: Option<crate::EarlyDepthTest>,
pub workgroup_size: [u32; 3],
}
#[derive(Debug)]
pub struct Function<'a> {
pub entry_point: Option<EntryPoint>,
pub name: Ident<'a>,
pub arguments: Vec<FunctionArgument<'a>>,
pub result: Option<FunctionResult<'a>>,
/// Local variable and function argument arena.
///
/// Note that the `Local` here is actually a zero-sized type. The AST keeps
/// all the detailed information about locals - names, types, etc. - in
/// [`LocalDecl`] statements. For arguments, that information is kept in
/// [`arguments`]. This `Arena`'s only role is to assign a unique `Handle`
/// to each of them, and track their definitions' spans for use in
/// diagnostics.
///
/// In the AST, when an [`Ident`] expression refers to a local variable or
/// argument, its [`IdentExpr`] holds the referent's `Handle<Local>` in this
/// arena.
///
/// During lowering, [`LocalDecl`] statements add entries to a per-function
/// table that maps `Handle<Local>` values to their Naga representations,
/// accessed via [`StatementContext::local_table`] and
/// [`ExpressionContext::local_table`]. This table is then consulted when
/// lowering subsequent [`Ident`] expressions.
///
/// [`LocalDecl`]: StatementKind::LocalDecl
/// [`arguments`]: Function::arguments
/// [`Ident`]: Expression::Ident
/// [`StatementContext::local_table`]: super::StatementContext::local_table
/// [`ExpressionContext::local_table`]: super::ExpressionContext::local_table
pub locals: Arena<Local>,
pub body: Block<'a>,
}
#[derive(Debug)]
pub struct GlobalVariable<'a> {
pub name: Ident<'a>,
pub space: crate::AddressSpace,
pub binding: Option<crate::ResourceBinding>,
pub ty: Handle<Type<'a>>,
pub init: Option<Handle<Expression<'a>>>,
}
#[derive(Debug)]
pub struct StructMember<'a> {
pub name: Ident<'a>,
pub ty: Handle<Type<'a>>,
pub binding: Option<crate::Binding>,
pub align: Option<(u32, Span)>,
pub size: Option<(u32, Span)>,
}
#[derive(Debug)]
pub struct Struct<'a> {
pub name: Ident<'a>,
pub members: Vec<StructMember<'a>>,
}
#[derive(Debug)]
pub struct TypeAlias<'a> {
pub name: Ident<'a>,
pub ty: Handle<Type<'a>>,
}
#[derive(Debug)]
pub struct Const<'a> {
pub name: Ident<'a>,
pub ty: Option<Handle<Type<'a>>>,
pub init: Handle<Expression<'a>>,
}
/// The size of an [`Array`] or [`BindingArray`].
///
/// [`Array`]: Type::Array
/// [`BindingArray`]: Type::BindingArray
#[derive(Debug, Copy, Clone)]
pub enum ArraySize<'a> {
/// The length as a constant expression.
Constant(Handle<Expression<'a>>),
Dynamic,
}
#[derive(Debug)]
pub enum Type<'a> {
Scalar {
kind: crate::ScalarKind,
width: crate::Bytes,
},
Vector {
size: crate::VectorSize,
kind: crate::ScalarKind,
width: crate::Bytes,
},
Matrix {
columns: crate::VectorSize,
rows: crate::VectorSize,
width: crate::Bytes,
},
Atomic {
kind: crate::ScalarKind,
width: crate::Bytes,
},
Pointer {
base: Handle<Type<'a>>,
space: crate::AddressSpace,
},
Array {
base: Handle<Type<'a>>,
size: ArraySize<'a>,
},
Image {
dim: crate::ImageDimension,
arrayed: bool,
class: crate::ImageClass,
},
Sampler {
comparison: bool,
},
BindingArray {
base: Handle<Type<'a>>,
size: ArraySize<'a>,
},
/// A user-defined type, like a struct or a type alias.
User(Ident<'a>),
}
#[derive(Debug, Default)]
pub struct Block<'a> {
pub stmts: Vec<Statement<'a>>,
}
#[derive(Debug)]
pub struct Statement<'a> {
pub kind: StatementKind<'a>,
pub span: Span,
}
#[derive(Debug)]
pub enum StatementKind<'a> {
LocalDecl(LocalDecl<'a>),
Block(Block<'a>),
If {
condition: Handle<Expression<'a>>,
accept: Block<'a>,
reject: Block<'a>,
},
Switch {
selector: Handle<Expression<'a>>,
cases: Vec<SwitchCase<'a>>,
},
Loop {
body: Block<'a>,
continuing: Block<'a>,
break_if: Option<Handle<Expression<'a>>>,
},
Break,
Continue,
Return {
value: Option<Handle<Expression<'a>>>,
},
Kill,
Call {
function: Ident<'a>,
arguments: Vec<Handle<Expression<'a>>>,
},
Assign {
target: Handle<Expression<'a>>,
op: Option<crate::BinaryOperator>,
value: Handle<Expression<'a>>,
},
Increment(Handle<Expression<'a>>),
Decrement(Handle<Expression<'a>>),
Ignore(Handle<Expression<'a>>),
}
#[derive(Debug)]
pub enum SwitchValue {
I32(i32),
U32(u32),
Default,
}
#[derive(Debug)]
pub struct SwitchCase<'a> {
pub value: SwitchValue,
pub value_span: Span,
pub body: Block<'a>,
pub fall_through: bool,
}
/// A type at the head of a [`Construct`] expression.
///
/// WGSL has two types of [`type constructor expressions`]:
///
/// - Those that fully specify the type being constructed, like
/// `vec3<f32>(x,y,z)`, which obviously constructs a `vec3<f32>`.
///
/// - Those that leave the component type of the composite being constructed
/// implicit, to be inferred from the argument types, like `vec3(x,y,z)`,
/// which constructs a `vec3<T>` where `T` is the type of `x`, `y`, and `z`.
///
/// This enum represents the head type of both cases. The `PartialFoo` variants
/// represent the second case, where the component type is implicit.
///
/// This does not cover structs or types referred to by type aliases. See the
/// documentation for [`Construct`] and [`Call`] expressions for details.
///
/// [`Construct`]: Expression::Construct
/// [`type constructor expressions`]: https://gpuweb.github.io/gpuweb/wgsl/#type-constructor-expr
/// [`Call`]: Expression::Call
#[derive(Debug)]
pub enum ConstructorType<'a> {
/// A scalar type or conversion: `f32(1)`.
Scalar {
kind: crate::ScalarKind,
width: crate::Bytes,
},
/// A vector construction whose component type is inferred from the
/// argument: `vec3(1.0)`.
PartialVector { size: crate::VectorSize },
/// A vector construction whose component type is written out:
/// `vec3<f32>(1.0)`.
Vector {
size: crate::VectorSize,
kind: crate::ScalarKind,
width: crate::Bytes,
},
/// A matrix construction whose component type is inferred from the
/// argument: `mat2x2(1,2,3,4)`.
PartialMatrix {
columns: crate::VectorSize,
rows: crate::VectorSize,
},
/// A matrix construction whose component type is written out:
/// `mat2x2<f32>(1,2,3,4)`.
Matrix {
columns: crate::VectorSize,
rows: crate::VectorSize,
width: crate::Bytes,
},
/// An array whose component type and size are inferred from the arguments:
/// `array(3,4,5)`.
PartialArray,
/// An array whose component type and size are written out:
/// `array<u32, 4>(3,4,5)`.
Array {
base: Handle<Type<'a>>,
size: ArraySize<'a>,
},
/// Constructing a value of a known Naga IR type.
///
/// This variant is produced only during lowering, when we have Naga types
/// available, never during parsing.
Type(Handle<crate::Type>),
}
#[derive(Debug, Copy, Clone)]
pub enum Literal {
Bool(bool),
Number(Number),
}
#[derive(Debug)]
pub enum Expression<'a> {
Literal(Literal),
Ident(IdentExpr<'a>),
/// A type constructor expression.
///
/// This is only used for expressions like `KEYWORD(EXPR...)` and
/// `KEYWORD<PARAM>(EXPR...)`, where `KEYWORD` is a [type-defining keyword] like
/// `vec3`. These keywords cannot be shadowed by user definitions, so we can
/// tell that such an expression is a construction immediately.
///
/// For ordinary identifiers, we can't tell whether an expression like
/// `IDENTIFIER(EXPR, ...)` is a construction expression or a function call
/// until we know `IDENTIFIER`'s definition, so we represent those as
/// [`Call`] expressions.
///
/// [type-defining keyword]: https://gpuweb.github.io/gpuweb/wgsl/#type-defining-keywords
/// [`Call`]: Expression::Call
Construct {
ty: ConstructorType<'a>,
ty_span: Span,
components: Vec<Handle<Expression<'a>>>,
},
Unary {
op: crate::UnaryOperator,
expr: Handle<Expression<'a>>,
},
AddrOf(Handle<Expression<'a>>),
Deref(Handle<Expression<'a>>),
Binary {
op: crate::BinaryOperator,
left: Handle<Expression<'a>>,
right: Handle<Expression<'a>>,
},
/// A function call or type constructor expression.
///
/// We can't tell whether an expression like `IDENTIFIER(EXPR, ...)` is a
/// construction expression or a function call until we know `IDENTIFIER`'s
/// definition, so we represent everything of that form as one of these
/// expressions until lowering. At that point, [`Lowerer::call`] has
/// everything's definition in hand, and can decide whether to emit a Naga
/// [`Constant`], [`As`], [`Splat`], or [`Compose`] expression.
///
/// [`Lowerer::call`]: super::Lowerer::call
/// [`Constant`]: crate::Expression::Constant
/// [`As`]: crate::Expression::As
/// [`Splat`]: crate::Expression::Splat
/// [`Compose`]: crate::Expression::Compose
Call {
function: Ident<'a>,
arguments: Vec<Handle<Expression<'a>>>,
},
Index {
base: Handle<Expression<'a>>,
index: Handle<Expression<'a>>,
},
Member {
base: Handle<Expression<'a>>,
field: Ident<'a>,
},
Bitcast {
expr: Handle<Expression<'a>>,
to: Handle<Type<'a>>,
ty_span: Span,
},
}
#[derive(Debug)]
pub struct LocalVariable<'a> {
pub name: Ident<'a>,
pub ty: Option<Handle<Type<'a>>>,
pub init: Option<Handle<Expression<'a>>>,
pub handle: Handle<Local>,
}
#[derive(Debug)]
pub struct Let<'a> {
pub name: Ident<'a>,
pub ty: Option<Handle<Type<'a>>>,
pub init: Handle<Expression<'a>>,
pub handle: Handle<Local>,
}
#[derive(Debug)]
pub enum LocalDecl<'a> {
Var(LocalVariable<'a>),
Let(Let<'a>),
}
#[derive(Debug)]
/// A placeholder for a local variable declaration.
///
/// See [`Function::locals`] for more information.
pub struct Local;

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
use super::{Error, Span};
use super::Error;
use crate::Span;
pub fn map_address_space(word: &str, span: Span) -> Result<crate::AddressSpace, Error<'_>> {
match word {

192
src/front/wgsl/index.rs Normal file
View File

@ -0,0 +1,192 @@
use super::{ast, Error};
use crate::{FastHashMap, Handle, Span};
/// A `GlobalDecl` list in which each definition occurs before all its uses.
pub struct Index<'a> {
dependency_order: Vec<Handle<ast::GlobalDecl<'a>>>,
}
impl<'a> Index<'a> {
/// Generate an `Index` for the given translation unit.
///
/// Perform a topological sort on `tu`'s global declarations, placing
/// referents before the definitions that refer to them.
///
/// Return an error if the graph of references between declarations contains
/// any cycles.
pub fn generate(tu: &ast::TranslationUnit<'a>) -> Result<Self, Error<'a>> {
// Produce a map from global definitions' names to their `Handle<GlobalDecl>`s.
// While doing so, reject conflicting definitions.
let mut globals = FastHashMap::with_capacity_and_hasher(tu.decls.len(), Default::default());
for (handle, decl) in tu.decls.iter() {
let ident = decl_ident(decl);
let name = ident.name;
if let Some(old) = globals.insert(name, handle) {
return Err(Error::Redefinition {
previous: decl_ident(&tu.decls[old]).span,
current: ident.span,
});
}
}
let len = tu.decls.len();
let solver = DependencySolver {
globals: &globals,
module: tu,
visited: vec![false; len],
temp_visited: vec![false; len],
path: Vec::new(),
out: Vec::with_capacity(len),
};
let dependency_order = solver.solve()?;
Ok(Self { dependency_order })
}
/// Iterate over `GlobalDecl`s, visiting each definition before all its uses.
///
/// Produce handles for all of the `GlobalDecl`s of the `TranslationUnit`
/// passed to `Index::generate`, ordered so that a given declaration is
/// produced before any other declaration that uses it.
pub fn visit_ordered(&self) -> impl Iterator<Item = Handle<ast::GlobalDecl<'a>>> + '_ {
self.dependency_order.iter().copied()
}
}
/// An edge from a reference to its referent in the current depth-first
/// traversal.
///
/// This is like `ast::Dependency`, except that we've determined which
/// `GlobalDecl` it refers to.
struct ResolvedDependency<'a> {
/// The referent of some identifier used in the current declaration.
decl: Handle<ast::GlobalDecl<'a>>,
/// Where that use occurs within the current declaration.
usage: Span,
}
/// Local state for ordering a `TranslationUnit`'s module-scope declarations.
///
/// Values of this type are used temporarily by `Index::generate`
/// to perform a depth-first sort on the declarations.
/// Technically, what we want is a topological sort, but a depth-first sort
/// has one key benefit - it's much more efficient in storing
/// the path of each node for error generation.
struct DependencySolver<'source, 'temp> {
/// A map from module-scope definitions' names to their handles.
globals: &'temp FastHashMap<&'source str, Handle<ast::GlobalDecl<'source>>>,
/// The translation unit whose declarations we're ordering.
module: &'temp ast::TranslationUnit<'source>,
/// For each handle, whether we have pushed it onto `out` yet.
visited: Vec<bool>,
/// For each handle, whether it is an predecessor in the current depth-first
/// traversal. This is used to detect cycles in the reference graph.
temp_visited: Vec<bool>,
/// The current path in our depth-first traversal. Used for generating
/// error messages for non-trivial reference cycles.
path: Vec<ResolvedDependency<'source>>,
/// The list of declaration handles, with declarations before uses.
out: Vec<Handle<ast::GlobalDecl<'source>>>,
}
impl<'a> DependencySolver<'a, '_> {
/// Produce the sorted list of declaration handles, and check for cycles.
fn solve(mut self) -> Result<Vec<Handle<ast::GlobalDecl<'a>>>, Error<'a>> {
for (id, _) in self.module.decls.iter() {
if self.visited[id.index()] {
continue;
}
self.dfs(id)?;
}
Ok(self.out)
}
/// Ensure that all declarations used by `id` have been added to the
/// ordering, and then append `id` itself.
fn dfs(&mut self, id: Handle<ast::GlobalDecl<'a>>) -> Result<(), Error<'a>> {
let decl = &self.module.decls[id];
let id_usize = id.index();
self.temp_visited[id_usize] = true;
for dep in decl.dependencies.iter() {
if let Some(&dep_id) = self.globals.get(dep.ident) {
self.path.push(ResolvedDependency {
decl: dep_id,
usage: dep.usage,
});
let dep_id_usize = dep_id.index();
if self.temp_visited[dep_id_usize] {
// Found a cycle.
return if dep_id == id {
// A declaration refers to itself directly.
Err(Error::RecursiveDeclaration {
ident: decl_ident(decl).span,
usage: dep.usage,
})
} else {
// A declaration refers to itself indirectly, through
// one or more other definitions. Report the entire path
// of references.
let start_at = self
.path
.iter()
.rev()
.enumerate()
.find_map(|(i, dep)| (dep.decl == dep_id).then_some(i))
.unwrap_or(0);
Err(Error::CyclicDeclaration {
ident: decl_ident(&self.module.decls[dep_id]).span,
path: self.path[start_at..]
.iter()
.map(|curr_dep| {
let curr_id = curr_dep.decl;
let curr_decl = &self.module.decls[curr_id];
(decl_ident(curr_decl).span, curr_dep.usage)
})
.collect(),
})
};
} else if !self.visited[dep_id_usize] {
self.dfs(dep_id)?;
}
// Remove this edge from the current path.
self.path.pop();
}
// Ignore unresolved identifiers; they may be predeclared objects.
}
// Remove this node from the current path.
self.temp_visited[id_usize] = false;
// Now everything this declaration uses has been visited, and is already
// present in `out`. That means we we can append this one to the
// ordering, and mark it as visited.
self.out.push(id);
self.visited[id_usize] = true;
Ok(())
}
}
const fn decl_ident<'a>(decl: &ast::GlobalDecl<'a>) -> ast::Ident<'a> {
match decl.kind {
ast::GlobalDeclKind::Fn(ref f) => f.name,
ast::GlobalDeclKind::Var(ref v) => v.name,
ast::GlobalDeclKind::Const(ref c) => c.name,
ast::GlobalDeclKind::Struct(ref s) => s.name,
ast::GlobalDeclKind::Type(ref t) => t.name,
}
}

View File

@ -1,10 +1,26 @@
use super::{conv, number::consume_number, Error, ExpectedToken, Span, Token, TokenSpan};
use super::{conv, number::consume_number, Error, ExpectedToken, Token, TokenSpan};
use crate::Span;
fn consume_any(input: &str, what: impl Fn(char) -> bool) -> (&str, &str) {
let pos = input.find(|c| !what(c)).unwrap_or(input.len());
input.split_at(pos)
}
/// Return the token at the start of `input`.
///
/// If `generic` is `false`, then the bit shift operators `>>` or `<<`
/// are valid lookahead tokens for the current parser state (see [§3.1
/// Parsing] in the WGSL specification). In other words:
///
/// - If `generic` is `true`, then we are expecting an angle bracket
/// around a generic type parameter, like the `<` and `>` in
/// `vec3<f32>`, so interpret `<` and `>` as `Token::Paren` tokens,
/// even if they're part of `<<` or `>>` sequences.
///
/// - Otherwise, interpret `<<` and `>>` as shift operators:
/// `Token::LogicalOperation` tokens.
///
/// [§3.1 Parsing]: https://gpuweb.github.io/gpuweb/wgsl/#parsing
fn consume_token(input: &str, generic: bool) -> (Token<'_>, &str) {
let mut chars = input.chars();
let cur = match chars.next() {
@ -176,10 +192,6 @@ impl<'a> Lexer<'a> {
}
}
pub(super) const fn _leftover_span(&self) -> Span {
self.source.len() - self.input.len()..self.source.len()
}
/// Calls the function with a lexer and returns the result of the function as well as the span for everything the function parsed
///
/// # Examples
@ -196,7 +208,7 @@ impl<'a> Lexer<'a> {
let start = self.current_byte_offset();
let res = inner(self)?;
let end = self.current_byte_offset();
Ok((res, start..end))
Ok((res, Span::from(start..end)))
}
pub(super) fn start_byte_offset(&mut self) -> usize {
@ -211,10 +223,6 @@ impl<'a> Lexer<'a> {
}
}
pub(super) const fn end_byte_offset(&self) -> usize {
self.last_end_offset
}
fn peek_token_and_rest(&mut self) -> (TokenSpan<'a>, &'a str) {
let mut cloned = self.clone();
let token = cloned.next();
@ -226,49 +234,53 @@ impl<'a> Lexer<'a> {
self.source.len() - self.input.len()
}
pub(super) const fn span_from(&self, offset: usize) -> Span {
offset..self.end_byte_offset()
pub(super) fn span_from(&self, offset: usize) -> Span {
Span::from(offset..self.last_end_offset)
}
/// Return the next non-whitespace token from `self`.
///
/// Assume we are a parse state where bit shift operators may
/// occur, but not angle brackets.
#[must_use]
pub(super) fn next(&mut self) -> TokenSpan<'a> {
self.next_impl(false)
}
/// Return the next non-whitespace token from `self`.
///
/// Assume we are in a parse state where angle brackets may occur,
/// but not bit shift operators.
#[must_use]
pub(super) fn next_generic(&mut self) -> TokenSpan<'a> {
self.next_impl(true)
}
/// Return the next non-whitespace token from `self`, with a span.
///
/// See [`consume_token`] for the meaning of `generic`.
fn next_impl(&mut self, generic: bool) -> TokenSpan<'a> {
let mut start_byte_offset = self.current_byte_offset();
loop {
let (token, rest) = consume_token(self.input, false);
let (token, rest) = consume_token(self.input, generic);
self.input = rest;
match token {
Token::Trivia => start_byte_offset = self.current_byte_offset(),
_ => {
self.last_end_offset = self.current_byte_offset();
return (token, start_byte_offset..self.last_end_offset);
return (token, self.span_from(start_byte_offset));
}
}
}
}
#[must_use]
pub(super) fn next_generic(&mut self) -> TokenSpan<'a> {
let mut start_byte_offset = self.current_byte_offset();
loop {
let (token, rest) = consume_token(self.input, true);
self.input = rest;
match token {
Token::Trivia => start_byte_offset = self.current_byte_offset(),
_ => return (token, start_byte_offset..self.current_byte_offset()),
}
}
}
#[must_use]
pub(super) fn peek(&mut self) -> TokenSpan<'a> {
let (token, _) = self.peek_token_and_rest();
token
}
pub(super) fn expect_span(
&mut self,
expected: Token<'a>,
) -> Result<std::ops::Range<usize>, Error<'a>> {
pub(super) fn expect_span(&mut self, expected: Token<'a>) -> Result<Span, Error<'a>> {
let next = self.next();
if next.0 == expected {
Ok(next.1)
@ -318,8 +330,16 @@ impl<'a> Lexer<'a> {
}
}
pub(super) fn next_ident(&mut self) -> Result<&'a str, Error<'a>> {
self.next_ident_with_span().map(|(word, _)| word)
pub(super) fn next_ident(&mut self) -> Result<super::ast::Ident<'a>, Error<'a>> {
let ident = self
.next_ident_with_span()
.map(|(name, span)| super::ast::Ident { name, span })?;
if crate::keywords::wgsl::RESERVED.contains(&ident.name) {
return Err(Error::ReservedKeyword(ident.span));
}
Ok(ident)
}
/// Parses a generic scalar type, for example `<f32>`.
@ -346,7 +366,7 @@ impl<'a> Lexer<'a> {
self.expect_generic_paren('<')?;
let pair = match self.next() {
(Token::Word(word), span) => conv::get_scalar_type(word)
.map(|(a, b)| (a, b, span.clone()))
.map(|(a, b)| (a, b, span))
.ok_or(Error::UnknownScalarType(span)),
(_, span) => Err(Error::UnknownScalarType(span)),
}?;

File diff suppressed because it is too large Load Diff

View File

@ -16,8 +16,8 @@ fn parse_comment() {
#[test]
fn parse_types() {
parse_str("let a : i32 = 2;").unwrap();
assert!(parse_str("let a : x32 = 2;").is_err());
parse_str("const a : i32 = 2;").unwrap();
assert!(parse_str("const a : x32 = 2;").is_err());
parse_str("var t: texture_2d<f32>;").unwrap();
parse_str("var t: texture_cube_array<i32>;").unwrap();
parse_str("var t: texture_multisampled_2d<u32>;").unwrap();
@ -48,7 +48,7 @@ fn parse_type_inference() {
fn parse_type_cast() {
parse_str(
"
let a : i32 = 2;
const a : i32 = 2;
fn main() {
var x: f32 = f32(a);
x = f32(i32(a + 1) / 2);

View File

@ -18,6 +18,14 @@ impl Span {
Span { start, end }
}
/// Returns a new `Span` starting at `self` and ending at `other`
pub const fn until(&self, other: &Self) -> Self {
Span {
start: self.start,
end: other.end,
}
}
/// Modifies `self` to contain the smallest `Span` possible that
/// contains both `self` and `other`
pub fn subsume(&mut self, other: Self) {
@ -85,6 +93,15 @@ impl From<Range<usize>> for Span {
}
}
impl std::ops::Index<Span> for str {
type Output = str;
#[inline]
fn index(&self, span: Span) -> &str {
&self[span.start as usize..span.end as usize]
}
}
/// A human-readable representation for a span, tailored for text source.
///
/// Corresponds to the positional members of [`GPUCompilationMessage`][gcm] from

View File

@ -129,9 +129,9 @@ fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
let foo_value = read_from_private(&foo);
// test array indexing
var c = array<i32, 5>(a, i32(b), 3, 4, 5);
c[vi + 1u] = 42;
let value = c[vi];
var c2 = array<i32, 5>(a, i32(b), 3, 4, 5);
c2[vi + 1u] = 42;
let value = c2[vi];
_ = test_arr_as_arg(array<array<f32, 10>, 5>());

View File

@ -1,4 +1,4 @@
let SIZE: u32 = 128u;
const SIZE: u32 = 128u;
@group(0) @binding(0)
var<storage,read_write> arr_i32: array<atomic<i32>, SIZE>;

View File

@ -3,11 +3,11 @@ fn main() {
var i2 = vec2<i32>(0);
var i3 = vec3<i32>(0);
var i4 = vec4<i32>(0);
var u2 = vec2<u32>(0u);
var u3 = vec3<u32>(0u);
var u4 = vec4<u32>(0u);
var f2 = vec2<f32>(0.0);
var f3 = vec3<f32>(0.0);
var f4 = vec4<f32>(0.0);
@ -15,11 +15,11 @@ fn main() {
u2 = bitcast<vec2<u32>>(i2);
u3 = bitcast<vec3<u32>>(i3);
u4 = bitcast<vec4<u32>>(i4);
i2 = bitcast<vec2<i32>>(u2);
i3 = bitcast<vec3<i32>>(u3);
i4 = bitcast<vec4<i32>>(u4);
f2 = bitcast<vec2<f32>>(i2);
f3 = bitcast<vec3<f32>>(i3);
f4 = bitcast<vec4<f32>>(i4);

View File

@ -1,4 +1,4 @@
let NUM_PARTICLES: u32 = 1500u;
const NUM_PARTICLES: u32 = 1500u;
struct Particle {
pos : vec2<f32>,

View File

@ -1,17 +1,17 @@
// Global variable & constant declarations
let Foo: bool = true;
const Foo: bool = true;
var<workgroup> wg : array<f32, 10u>;
var<workgroup> at: atomic<u32>;
struct Foo {
struct FooStruct {
v3: vec3<f32>,
// test packed vec3
v1: f32,
}
@group(0) @binding(1)
var<storage, read_write> alignment: Foo;
var<storage, read_write> alignment: FooStruct;
@group(0) @binding(2)
var<storage> dummy: array<vec2<f32>>;

View File

@ -0,0 +1,26 @@
fn call() {
statement();
let x: S = returns();
let vf = f32(Value);
let s = textureSample(Texture, Sampler, Vec2(vf));
}
fn statement() {}
fn returns() -> S {
return S(Value);
}
struct S {
x: i32,
}
const Value: i32 = 1;
@group(0) @binding(0)
var Texture: texture_2d<f32>;
@group(0) @binding(1)
var Sampler: sampler;
type Vec2 = vec2<f32>;

View File

@ -1,8 +1,8 @@
//TODO: support splatting constructors for globals?
let v_f32_one = vec4<f32>(1.0, 1.0, 1.0, 1.0);
let v_f32_zero = vec4<f32>(0.0, 0.0, 0.0, 0.0);
let v_f32_half = vec4<f32>(0.5, 0.5, 0.5, 0.5);
let v_i32_one = vec4<i32>(1, 1, 1, 1);
const v_f32_one = vec4<f32>(1.0, 1.0, 1.0, 1.0);
const v_f32_zero = vec4<f32>(0.0, 0.0, 0.0, 0.0);
const v_f32_half = vec4<f32>(0.5, 0.5, 0.5, 0.5);
const v_i32_one = vec4<i32>(1, 1, 1, 1);
fn builtins() -> vec4<f32> {
// select()

View File

@ -1,5 +1,5 @@
// vertex
let c_scale: f32 = 1.2;
const c_scale: f32 = 1.2;
struct VertexOutput {
@location(0) uv : vec2<f32>,
@ -31,7 +31,7 @@ fn frag_main(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {
}
// We need to make sure that backends are successfully handling multiple entry points for the same shader stage.
// We need to make sure that backends are successfully handling multiple entry points for the same shader stage.
@fragment
fn fs_extra() -> @location(0) vec4<f32> {
return vec4<f32>(0.0, 0.5, 0.0, 0.5);

View File

@ -77,8 +77,8 @@ fn fetch_shadow(light_id: u32, homogeneous_coords: vec4<f32>) -> f32 {
return textureSampleCompareLevel(t_shadow, sampler_shadow, light_local, i32(light_id), homogeneous_coords.z * proj_correction);
}
let c_ambient: vec3<f32> = vec3<f32>(0.05, 0.05, 0.05);
let c_max_lights: u32 = 10u;
const c_ambient: vec3<f32> = vec3<f32>(0.05, 0.05, 0.05);
const c_max_lights: u32 = 10u;
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {

13
tests/in/type-alias.wgsl Normal file
View File

@ -0,0 +1,13 @@
type FVec3 = vec3<f32>;
type IVec3 = vec3<i32>;
type Mat2 = mat2x2<f32>;
fn main() {
let a = FVec3(0.0, 0.0, 0.0);
let c = FVec3(0.0);
let b = FVec3(vec2<f32>(0.0), 0.0);
let d = FVec3(vec2<f32>(0.0), 0.0);
let e = IVec3(d);
let f = Mat2(1.0, 2.0, 3.0, 4.0);
}

View File

@ -8,7 +8,7 @@
bits: 7,
),
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
@ -28,31 +28,13 @@
bits: 0,
),
),
ref_count: 0,
assignable_global: Some(1),
ty: Value(Pointer(
base: 3,
space: Storage(
access: (
bits: 3,
),
),
)),
),
(
uniformity: (
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
),
ref_count: 1,
assignable_global: None,
ty: Handle(1),
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -71,7 +53,7 @@
bits: 0,
),
),
ref_count: 0,
ref_count: 1,
assignable_global: None,
ty: Value(Scalar(
kind: Uint,
@ -80,12 +62,12 @@
),
(
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
),
ref_count: 3,
ref_count: 4,
assignable_global: None,
ty: Value(Pointer(
base: 1,
@ -94,7 +76,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -119,7 +101,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -133,7 +115,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -158,7 +140,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -183,7 +165,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -197,7 +179,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -222,7 +204,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -247,7 +229,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -258,7 +240,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -283,7 +265,7 @@
),
(
uniformity: (
non_uniform_result: Some(3),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -294,7 +276,7 @@
),
(
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
@ -319,7 +301,7 @@
),
(
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
@ -330,7 +312,7 @@
),
(
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
@ -352,7 +334,7 @@
bits: 7,
),
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),
@ -373,6 +355,17 @@
),
),
ref_count: 2,
assignable_global: None,
ty: Handle(4),
),
(
uniformity: (
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
),
ref_count: 1,
assignable_global: Some(1),
ty: Value(Pointer(
base: 3,
@ -390,17 +383,6 @@
bits: 0,
),
),
ref_count: 2,
assignable_global: None,
ty: Handle(4),
),
(
uniformity: (
non_uniform_result: Some(1),
requirements: (
bits: 0,
),
),
ref_count: 1,
assignable_global: Some(1),
ty: Value(Pointer(
@ -414,7 +396,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(1),
requirements: (
bits: 0,
),
@ -428,7 +410,7 @@
),
(
uniformity: (
non_uniform_result: Some(1),
non_uniform_result: Some(2),
requirements: (
bits: 0,
),
@ -446,7 +428,25 @@
),
(
uniformity: (
non_uniform_result: Some(1),
non_uniform_result: Some(6),
requirements: (
bits: 0,
),
),
ref_count: 1,
assignable_global: Some(1),
ty: Value(Pointer(
base: 3,
space: Storage(
access: (
bits: 3,
),
),
)),
),
(
uniformity: (
non_uniform_result: Some(6),
requirements: (
bits: 0,
),
@ -464,7 +464,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(1),
requirements: (
bits: 0,
),
@ -478,7 +478,7 @@
),
(
uniformity: (
non_uniform_result: Some(1),
non_uniform_result: Some(6),
requirements: (
bits: 0,
),
@ -496,7 +496,7 @@
),
(
uniformity: (
non_uniform_result: Some(1),
non_uniform_result: Some(6),
requirements: (
bits: 0,
),
@ -507,7 +507,7 @@
),
(
uniformity: (
non_uniform_result: Some(5),
non_uniform_result: Some(4),
requirements: (
bits: 0,
),

View File

@ -7,18 +7,18 @@ digraph Module {
subgraph cluster_ep0 {
label="Vertex/'vert_main'"
node [ style=filled ]
ep0_e0 [ fillcolor="#ffffb3" label="[1] Constant" ]
ep0_e1 [ color="#8dd3c7" label="[2] Argument[0]" ]
ep0_e2 [ color="#8dd3c7" label="[3] Argument[1]" ]
ep0_e0 [ color="#8dd3c7" label="[1] Argument[0]" ]
ep0_e1 [ color="#8dd3c7" label="[2] Argument[1]" ]
ep0_e2 [ fillcolor="#ffffb3" label="[3] Constant" ]
ep0_e3 [ color="#fdb462" label="[4] Multiply" ]
ep0_e1 -> ep0_e3 [ label="right" ]
ep0_e0 -> ep0_e3 [ label="left" ]
ep0_e0 -> ep0_e3 [ label="right" ]
ep0_e2 -> ep0_e3 [ label="left" ]
ep0_e4 [ fillcolor="#ffffb3" label="[5] Constant" ]
ep0_e5 [ fillcolor="#ffffb3" label="[6] Constant" ]
ep0_e6 [ color="#bebada" label="[7] Compose" ]
{ ep0_e3 ep0_e4 ep0_e5 } -> ep0_e6
ep0_e7 [ color="#bebada" label="[8] Compose" ]
{ ep0_e2 ep0_e6 } -> ep0_e7
{ ep0_e1 ep0_e6 } -> ep0_e7
ep0_s0 [ shape=square label="Root" ]
ep0_s1 [ shape=square label="Emit" ]
ep0_s2 [ shape=square label="Emit" ]
@ -34,27 +34,26 @@ digraph Module {
subgraph cluster_ep1 {
label="Fragment/'frag_main'"
node [ style=filled ]
ep1_e0 [ fillcolor="#ffffb3" label="[1] Constant" ]
ep1_e0 [ color="#8dd3c7" label="[1] Argument[0]" ]
ep1_e1 [ color="#ffffb3" label="[2] Global" ]
g1 -> ep1_e1 [fillcolor=gray]
g0 -> ep1_e1 [fillcolor=gray]
ep1_e2 [ color="#ffffb3" label="[3] Global" ]
g0 -> ep1_e2 [fillcolor=gray]
ep1_e3 [ color="#8dd3c7" label="[4] Argument[0]" ]
ep1_e4 [ color="#80b1d3" label="[5] ImageSample" ]
ep1_e1 -> ep1_e4 [ label="sampler" ]
ep1_e2 -> ep1_e4 [ label="image" ]
ep1_e3 -> ep1_e4 [ label="coordinate" ]
ep1_e5 [ color="#8dd3c7" label="[6] AccessIndex[3]" ]
ep1_e4 -> ep1_e5 [ label="base" ]
ep1_e6 [ fillcolor="#ffffb3" label="[7] Constant" ]
ep1_e7 [ color="#fdb462" label="[8] Equal" ]
ep1_e6 -> ep1_e7 [ label="right" ]
ep1_e5 -> ep1_e7 [ label="left" ]
ep1_e8 [ color="#8dd3c7" label="[9] AccessIndex[3]" ]
ep1_e4 -> ep1_e8 [ label="base" ]
ep1_e9 [ color="#fdb462" label="[10] Multiply" ]
ep1_e4 -> ep1_e9 [ label="right" ]
ep1_e8 -> ep1_e9 [ label="left" ]
g1 -> ep1_e2 [fillcolor=gray]
ep1_e3 [ color="#80b1d3" label="[4] ImageSample" ]
ep1_e2 -> ep1_e3 [ label="sampler" ]
ep1_e1 -> ep1_e3 [ label="image" ]
ep1_e0 -> ep1_e3 [ label="coordinate" ]
ep1_e4 [ color="#8dd3c7" label="[5] AccessIndex[3]" ]
ep1_e3 -> ep1_e4 [ label="base" ]
ep1_e5 [ fillcolor="#ffffb3" label="[6] Constant" ]
ep1_e6 [ color="#fdb462" label="[7] Equal" ]
ep1_e5 -> ep1_e6 [ label="right" ]
ep1_e4 -> ep1_e6 [ label="left" ]
ep1_e7 [ color="#8dd3c7" label="[8] AccessIndex[3]" ]
ep1_e3 -> ep1_e7 [ label="base" ]
ep1_e8 [ color="#fdb462" label="[9] Multiply" ]
ep1_e3 -> ep1_e8 [ label="right" ]
ep1_e7 -> ep1_e8 [ label="left" ]
ep1_s0 [ shape=square label="Root" ]
ep1_s1 [ shape=square label="Emit" ]
ep1_s2 [ shape=square label="Emit" ]
@ -77,34 +76,29 @@ digraph Module {
ep1_s7 -> ep1_s8 [ arrowhead=tee label="" ]
ep1_s8 -> ep1_s9 [ arrowhead=tee label="" ]
ep1_s9 -> ep1_s10 [ arrowhead=tee label="" ]
ep1_e7 -> ep1_s4 [ label="condition" ]
ep1_e9 -> ep1_s10 [ label="value" ]
ep1_s1 -> ep1_e4 [ style=dotted ]
ep1_s2 -> ep1_e5 [ style=dotted ]
ep1_s3 -> ep1_e7 [ style=dotted ]
ep1_e6 -> ep1_s4 [ label="condition" ]
ep1_e8 -> ep1_s10 [ label="value" ]
ep1_s1 -> ep1_e3 [ style=dotted ]
ep1_s2 -> ep1_e4 [ style=dotted ]
ep1_s3 -> ep1_e6 [ style=dotted ]
ep1_s9 -> ep1_e7 [ style=dotted ]
ep1_s9 -> ep1_e8 [ style=dotted ]
ep1_s9 -> ep1_e9 [ style=dotted ]
}
subgraph cluster_ep2 {
label="Fragment/'fs_extra'"
node [ style=filled ]
ep2_e0 [ fillcolor="#ffffb3" label="[1] Constant" ]
ep2_e1 [ color="#ffffb3" label="[2] Global" ]
g1 -> ep2_e1 [fillcolor=gray]
ep2_e2 [ color="#ffffb3" label="[3] Global" ]
g0 -> ep2_e2 [fillcolor=gray]
ep2_e1 [ fillcolor="#ffffb3" label="[2] Constant" ]
ep2_e2 [ fillcolor="#ffffb3" label="[3] Constant" ]
ep2_e3 [ fillcolor="#ffffb3" label="[4] Constant" ]
ep2_e4 [ fillcolor="#ffffb3" label="[5] Constant" ]
ep2_e5 [ fillcolor="#ffffb3" label="[6] Constant" ]
ep2_e6 [ fillcolor="#ffffb3" label="[7] Constant" ]
ep2_e7 [ fillcolor="#bebada" label="[8] Compose" ]
{ ep2_e3 ep2_e4 ep2_e5 ep2_e6 } -> ep2_e7
ep2_e4 [ fillcolor="#bebada" label="[5] Compose" ]
{ ep2_e0 ep2_e1 ep2_e2 ep2_e3 } -> ep2_e4
ep2_s0 [ shape=square label="Root" ]
ep2_s1 [ shape=square label="Emit" ]
ep2_s2 [ shape=square label="Return" ]
ep2_s0 -> ep2_s1 [ arrowhead=tee label="" ]
ep2_s1 -> ep2_s2 [ arrowhead=tee label="" ]
ep2_e7 -> ep2_s2 [ label="value" ]
ep2_s1 -> ep2_e7 [ style=dotted ]
ep2_e4 -> ep2_s2 [ label="value" ]
ep2_s1 -> ep2_e4 [ style=dotted ]
}
}

View File

@ -23,8 +23,8 @@ shared uint val;
float read_from_private(inout float foo_1) {
float _e6 = foo_1;
return _e6;
float _e1 = foo_1;
return _e1;
}
float test_arr_as_arg(float a[5][10]) {

View File

@ -29,8 +29,8 @@ layout(std430) buffer Bar_block_0Compute {
float read_from_private(inout float foo_1) {
float _e6 = foo_1;
return _e6;
float _e1 = foo_1;
return _e1;
}
float test_arr_as_arg(float a[5][10]) {
@ -45,22 +45,22 @@ void assign_through_ptr_fn(inout uint p) {
void main() {
int tmp = 0;
int value = _group_0_binding_0_cs.atom;
int _e10 = atomicAdd(_group_0_binding_0_cs.atom, 5);
tmp = _e10;
int _e13 = atomicAdd(_group_0_binding_0_cs.atom, -5);
tmp = _e13;
int _e16 = atomicAnd(_group_0_binding_0_cs.atom, 5);
tmp = _e16;
int _e7 = atomicAdd(_group_0_binding_0_cs.atom, 5);
tmp = _e7;
int _e11 = atomicAdd(_group_0_binding_0_cs.atom, -5);
tmp = _e11;
int _e15 = atomicAnd(_group_0_binding_0_cs.atom, 5);
tmp = _e15;
int _e19 = atomicOr(_group_0_binding_0_cs.atom, 5);
tmp = _e19;
int _e22 = atomicXor(_group_0_binding_0_cs.atom, 5);
tmp = _e22;
int _e25 = atomicMin(_group_0_binding_0_cs.atom, 5);
tmp = _e25;
int _e28 = atomicMax(_group_0_binding_0_cs.atom, 5);
tmp = _e28;
int _e31 = atomicExchange(_group_0_binding_0_cs.atom, 5);
int _e23 = atomicXor(_group_0_binding_0_cs.atom, 5);
tmp = _e23;
int _e27 = atomicMin(_group_0_binding_0_cs.atom, 5);
tmp = _e27;
int _e31 = atomicMax(_group_0_binding_0_cs.atom, 5);
tmp = _e31;
int _e35 = atomicExchange(_group_0_binding_0_cs.atom, 5);
tmp = _e35;
_group_0_binding_0_cs.atom = value;
return;
}

View File

@ -30,8 +30,8 @@ layout(std430) buffer type_11_block_1Fragment { ivec2 _group_0_binding_2_fs; };
layout(location = 0) out vec4 _fs2p_location0;
float read_from_private(inout float foo_1) {
float _e6 = foo_1;
return _e6;
float _e1 = foo_1;
return _e1;
}
float test_arr_as_arg(float a[5][10]) {

View File

@ -33,80 +33,82 @@ uniform MatCx2InArray_block_3Vertex { MatCx2InArray _group_0_binding_3_vs; };
void test_matrix_within_struct_accesses() {
int idx = 1;
int idx = 0;
Baz t = Baz(mat3x2(0.0));
int _e6 = idx;
idx = (_e6 - 1);
idx = 1;
int _e2 = idx;
idx = (_e2 - 1);
mat3x2 unnamed = _group_0_binding_1_vs.m;
vec2 unnamed_1 = _group_0_binding_1_vs.m[0];
int _e16 = idx;
vec2 unnamed_2 = _group_0_binding_1_vs.m[_e16];
int _e15 = idx;
vec2 unnamed_2 = _group_0_binding_1_vs.m[_e15];
float unnamed_3 = _group_0_binding_1_vs.m[0][1];
int _e28 = idx;
float unnamed_4 = _group_0_binding_1_vs.m[0][_e28];
int _e32 = idx;
float unnamed_5 = _group_0_binding_1_vs.m[_e32][1];
int _e38 = idx;
int _e40 = idx;
float unnamed_6 = _group_0_binding_1_vs.m[_e38][_e40];
int _e29 = idx;
float unnamed_4 = _group_0_binding_1_vs.m[0][_e29];
int _e34 = idx;
float unnamed_5 = _group_0_binding_1_vs.m[_e34][1];
int _e41 = idx;
int _e43 = idx;
float unnamed_6 = _group_0_binding_1_vs.m[_e41][_e43];
t = Baz(mat3x2(vec2(1.0), vec2(2.0), vec2(3.0)));
int _e52 = idx;
idx = (_e52 + 1);
int _e55 = idx;
idx = (_e55 + 1);
t.m = mat3x2(vec2(6.0), vec2(5.0), vec2(4.0));
t.m[0] = vec2(9.0);
int _e69 = idx;
t.m[_e69] = vec2(90.0);
int _e72 = idx;
t.m[_e72] = vec2(90.0);
t.m[0][1] = 10.0;
int _e82 = idx;
t.m[0][_e82] = 20.0;
int _e86 = idx;
t.m[_e86][1] = 30.0;
int _e92 = idx;
int _e94 = idx;
t.m[_e92][_e94] = 40.0;
int _e85 = idx;
t.m[0][_e85] = 20.0;
int _e89 = idx;
t.m[_e89][1] = 30.0;
int _e95 = idx;
int _e97 = idx;
t.m[_e95][_e97] = 40.0;
return;
}
void test_matrix_within_array_within_struct_accesses() {
int idx_1 = 1;
int idx_1 = 0;
MatCx2InArray t_1 = MatCx2InArray(mat4x2[2](mat4x2(0.0), mat4x2(0.0)));
int _e7 = idx_1;
idx_1 = (_e7 - 1);
idx_1 = 1;
int _e2 = idx_1;
idx_1 = (_e2 - 1);
mat4x2 unnamed_7[2] = _group_0_binding_3_vs.am;
mat4x2 unnamed_8 = _group_0_binding_3_vs.am[0];
vec2 unnamed_9 = _group_0_binding_3_vs.am[0][0];
int _e25 = idx_1;
vec2 unnamed_10 = _group_0_binding_3_vs.am[0][_e25];
int _e24 = idx_1;
vec2 unnamed_10 = _group_0_binding_3_vs.am[0][_e24];
float unnamed_11 = _group_0_binding_3_vs.am[0][0][1];
int _e41 = idx_1;
float unnamed_12 = _group_0_binding_3_vs.am[0][0][_e41];
int _e47 = idx_1;
float unnamed_13 = _group_0_binding_3_vs.am[0][_e47][1];
int _e55 = idx_1;
int _e57 = idx_1;
float unnamed_14 = _group_0_binding_3_vs.am[0][_e55][_e57];
int _e42 = idx_1;
float unnamed_12 = _group_0_binding_3_vs.am[0][0][_e42];
int _e49 = idx_1;
float unnamed_13 = _group_0_binding_3_vs.am[0][_e49][1];
int _e58 = idx_1;
int _e60 = idx_1;
float unnamed_14 = _group_0_binding_3_vs.am[0][_e58][_e60];
t_1 = MatCx2InArray(mat4x2[2](mat4x2(vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0)), mat4x2(vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0))));
int _e63 = idx_1;
idx_1 = (_e63 + 1);
int _e66 = idx_1;
idx_1 = (_e66 + 1);
t_1.am = mat4x2[2](mat4x2(vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0)), mat4x2(vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, 0.0)));
t_1.am[0] = mat4x2(vec2(8.0), vec2(7.0), vec2(6.0), vec2(5.0));
t_1.am[0][0] = vec2(9.0);
int _e90 = idx_1;
t_1.am[0][_e90] = vec2(90.0);
int _e93 = idx_1;
t_1.am[0][_e93] = vec2(90.0);
t_1.am[0][0][1] = 10.0;
int _e107 = idx_1;
t_1.am[0][0][_e107] = 20.0;
int _e113 = idx_1;
t_1.am[0][_e113][1] = 30.0;
int _e121 = idx_1;
int _e123 = idx_1;
t_1.am[0][_e121][_e123] = 40.0;
int _e110 = idx_1;
t_1.am[0][0][_e110] = 20.0;
int _e116 = idx_1;
t_1.am[0][_e116][1] = 30.0;
int _e124 = idx_1;
int _e126 = idx_1;
t_1.am[0][_e124][_e126] = 40.0;
return;
}
float read_from_private(inout float foo_1) {
float _e6 = foo_1;
return _e6;
float _e1 = foo_1;
return _e1;
}
float test_arr_as_arg(float a[5][10]) {
@ -121,7 +123,8 @@ void assign_through_ptr_fn(inout uint p) {
void main() {
uint vi = uint(gl_VertexID);
float foo = 0.0;
int c[5] = int[5](0, 0, 0, 0, 0);
int c2_[5] = int[5](0, 0, 0, 0, 0);
foo = 0.0;
float baz_1 = foo;
foo = 1.0;
test_matrix_within_struct_accesses();
@ -130,12 +133,12 @@ void main() {
uvec2 arr[2] = _group_0_binding_0_vs.arr;
float b = _group_0_binding_0_vs._matrix[3][0];
int a_1 = _group_0_binding_0_vs.data[(uint(_group_0_binding_0_vs.data.length()) - 2u)].value;
ivec2 c_1 = _group_0_binding_2_vs;
float _e32 = read_from_private(foo);
c = int[5](a_1, int(b), 3, 4, 5);
c[(vi + 1u)] = 42;
int value = c[vi];
float _e46 = test_arr_as_arg(float[5][10](float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
ivec2 c = _group_0_binding_2_vs;
float _e34 = read_from_private(foo);
c2_ = int[5](a_1, int(b), 3, 4, 5);
c2_[(vi + 1u)] = 42;
int value = c2_[vi];
float _e48 = test_arr_as_arg(float[5][10](float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
gl_Position = vec4((_matrix * vec4(ivec4(value))), 2.0);
gl_Position.yz = vec2(-gl_Position.y, gl_Position.z * 2.0 - gl_Position.w);
return;

View File

@ -17,9 +17,11 @@ void main() {
uvec4 u4_ = uvec4(0u);
vec2 f2_ = vec2(0.0);
vec4 f4_ = vec4(0.0);
i = 0;
i2_ = ivec2(0);
i3_ = ivec3(0);
i4_ = ivec4(0);
u = 0u;
u2_ = uvec2(0u);
u3_ = uvec3(0u);
u4_ = uvec4(0u);

View File

@ -45,112 +45,115 @@ void main() {
if ((index >= 1500u)) {
return;
}
vec2 _e10 = _group_0_binding_1_cs.particles[index].pos;
vPos = _e10;
vec2 _e15 = _group_0_binding_1_cs.particles[index].vel;
vVel = _e15;
vec2 _e8 = _group_0_binding_1_cs.particles[index].pos;
vPos = _e8;
vec2 _e14 = _group_0_binding_1_cs.particles[index].vel;
vVel = _e14;
cMass = vec2(0.0, 0.0);
cVel = vec2(0.0, 0.0);
colVel = vec2(0.0, 0.0);
cMassCount = 0;
cVelCount = 0;
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _e86 = i;
i = (_e86 + 1u);
uint _e91 = i;
i = (_e91 + 1u);
}
loop_init = false;
uint _e37 = i;
if ((_e37 >= 1500u)) {
uint _e36 = i;
if ((_e36 >= 1500u)) {
break;
}
uint _e39 = i;
if ((_e39 == index)) {
continue;
}
uint _e42 = i;
vec2 _e45 = _group_0_binding_1_cs.particles[_e42].pos;
pos = _e45;
uint _e47 = i;
vec2 _e50 = _group_0_binding_1_cs.particles[_e47].vel;
vel = _e50;
vec2 _e51 = pos;
vec2 _e52 = vPos;
float _e55 = _group_0_binding_0_cs.rule1Distance;
if ((distance(_e51, _e52) < _e55)) {
vec2 _e57 = cMass;
vec2 _e58 = pos;
cMass = (_e57 + _e58);
int _e60 = cMassCount;
cMassCount = (_e60 + 1);
uint _e43 = i;
vec2 _e46 = _group_0_binding_1_cs.particles[_e43].pos;
pos = _e46;
uint _e49 = i;
vec2 _e52 = _group_0_binding_1_cs.particles[_e49].vel;
vel = _e52;
vec2 _e53 = pos;
vec2 _e54 = vPos;
float _e58 = _group_0_binding_0_cs.rule1Distance;
if ((distance(_e53, _e54) < _e58)) {
vec2 _e60 = cMass;
vec2 _e61 = pos;
cMass = (_e60 + _e61);
int _e63 = cMassCount;
cMassCount = (_e63 + 1);
}
vec2 _e63 = pos;
vec2 _e64 = vPos;
float _e67 = _group_0_binding_0_cs.rule2Distance;
if ((distance(_e63, _e64) < _e67)) {
vec2 _e69 = colVel;
vec2 _e70 = pos;
vec2 _e71 = vPos;
colVel = (_e69 - (_e70 - _e71));
vec2 _e66 = pos;
vec2 _e67 = vPos;
float _e71 = _group_0_binding_0_cs.rule2Distance;
if ((distance(_e66, _e67) < _e71)) {
vec2 _e73 = colVel;
vec2 _e74 = pos;
vec2 _e75 = vPos;
colVel = (_e73 - (_e74 - _e75));
}
vec2 _e74 = pos;
vec2 _e75 = vPos;
float _e78 = _group_0_binding_0_cs.rule3Distance;
if ((distance(_e74, _e75) < _e78)) {
vec2 _e80 = cVel;
vec2 _e81 = vel;
cVel = (_e80 + _e81);
int _e83 = cVelCount;
cVelCount = (_e83 + 1);
vec2 _e78 = pos;
vec2 _e79 = vPos;
float _e83 = _group_0_binding_0_cs.rule3Distance;
if ((distance(_e78, _e79) < _e83)) {
vec2 _e85 = cVel;
vec2 _e86 = vel;
cVel = (_e85 + _e86);
int _e88 = cVelCount;
cVelCount = (_e88 + 1);
}
}
int _e89 = cMassCount;
if ((_e89 > 0)) {
vec2 _e92 = cMass;
int _e93 = cMassCount;
vec2 _e97 = vPos;
cMass = ((_e92 / vec2(float(_e93))) - _e97);
int _e94 = cMassCount;
if ((_e94 > 0)) {
vec2 _e97 = cMass;
int _e98 = cMassCount;
vec2 _e102 = vPos;
cMass = ((_e97 / vec2(float(_e98))) - _e102);
}
int _e99 = cVelCount;
if ((_e99 > 0)) {
vec2 _e102 = cVel;
int _e103 = cVelCount;
cVel = (_e102 / vec2(float(_e103)));
int _e104 = cVelCount;
if ((_e104 > 0)) {
vec2 _e107 = cVel;
int _e108 = cVelCount;
cVel = (_e107 / vec2(float(_e108)));
}
vec2 _e107 = vVel;
vec2 _e108 = cMass;
float _e110 = _group_0_binding_0_cs.rule1Scale;
vec2 _e113 = colVel;
float _e115 = _group_0_binding_0_cs.rule2Scale;
vec2 _e118 = cVel;
float _e120 = _group_0_binding_0_cs.rule3Scale;
vVel = (((_e107 + (_e108 * _e110)) + (_e113 * _e115)) + (_e118 * _e120));
vec2 _e123 = vVel;
vec2 _e125 = vVel;
vVel = (normalize(_e123) * clamp(length(_e125), 0.0, 0.10000000149011612));
vec2 _e131 = vPos;
vec2 _e132 = vVel;
float _e134 = _group_0_binding_0_cs.deltaT;
vPos = (_e131 + (_e132 * _e134));
float _e138 = vPos.x;
if ((_e138 < -1.0)) {
vec2 _e112 = vVel;
vec2 _e113 = cMass;
float _e116 = _group_0_binding_0_cs.rule1Scale;
vec2 _e119 = colVel;
float _e122 = _group_0_binding_0_cs.rule2Scale;
vec2 _e125 = cVel;
float _e128 = _group_0_binding_0_cs.rule3Scale;
vVel = (((_e112 + (_e113 * _e116)) + (_e119 * _e122)) + (_e125 * _e128));
vec2 _e131 = vVel;
vec2 _e133 = vVel;
vVel = (normalize(_e131) * clamp(length(_e133), 0.0, 0.10000000149011612));
vec2 _e139 = vPos;
vec2 _e140 = vVel;
float _e143 = _group_0_binding_0_cs.deltaT;
vPos = (_e139 + (_e140 * _e143));
float _e147 = vPos.x;
if ((_e147 < -1.0)) {
vPos.x = 1.0;
}
float _e144 = vPos.x;
if ((_e144 > 1.0)) {
float _e153 = vPos.x;
if ((_e153 > 1.0)) {
vPos.x = -1.0;
}
float _e150 = vPos.y;
if ((_e150 < -1.0)) {
float _e159 = vPos.y;
if ((_e159 < -1.0)) {
vPos.y = 1.0;
}
float _e156 = vPos.y;
if ((_e156 > 1.0)) {
float _e165 = vPos.y;
if ((_e165 > 1.0)) {
vPos.y = -1.0;
}
vec2 _e164 = vPos;
_group_0_binding_2_cs.particles[index].pos = _e164;
vec2 _e168 = vVel;
_group_0_binding_2_cs.particles[index].vel = _e168;
vec2 _e174 = vPos;
_group_0_binding_2_cs.particles[index].pos = _e174;
vec2 _e179 = vVel;
_group_0_binding_2_cs.particles[index].vel = _e179;
return;
}

View File

@ -27,27 +27,27 @@ vec4 test_textureLoad_1d(int coords, int level) {
}
vec4 test_textureLoad_2d(ivec2 coords_1, int level_1) {
int _e4_clamped_lod = clamp(level_1, 0, textureQueryLevels(_group_0_binding_1_fs) - 1);
vec4 _e4 = texelFetch(_group_0_binding_1_fs, clamp(coords_1, ivec2(0), textureSize(_group_0_binding_1_fs, _e4_clamped_lod) - ivec2(1)), _e4_clamped_lod);
return _e4;
int _e3_clamped_lod = clamp(level_1, 0, textureQueryLevels(_group_0_binding_1_fs) - 1);
vec4 _e3 = texelFetch(_group_0_binding_1_fs, clamp(coords_1, ivec2(0), textureSize(_group_0_binding_1_fs, _e3_clamped_lod) - ivec2(1)), _e3_clamped_lod);
return _e3;
}
vec4 test_textureLoad_2d_array(ivec2 coords_2, int index, int level_2) {
int _e6_clamped_lod = clamp(level_2, 0, textureQueryLevels(_group_0_binding_2_fs) - 1);
vec4 _e6 = texelFetch(_group_0_binding_2_fs, clamp(ivec3(coords_2, index), ivec3(0), textureSize(_group_0_binding_2_fs, _e6_clamped_lod) - ivec3(1)), _e6_clamped_lod);
return _e6;
int _e4_clamped_lod = clamp(level_2, 0, textureQueryLevels(_group_0_binding_2_fs) - 1);
vec4 _e4 = texelFetch(_group_0_binding_2_fs, clamp(ivec3(coords_2, index), ivec3(0), textureSize(_group_0_binding_2_fs, _e4_clamped_lod) - ivec3(1)), _e4_clamped_lod);
return _e4;
}
vec4 test_textureLoad_3d(ivec3 coords_3, int level_3) {
int _e6_clamped_lod = clamp(level_3, 0, textureQueryLevels(_group_0_binding_3_fs) - 1);
vec4 _e6 = texelFetch(_group_0_binding_3_fs, clamp(coords_3, ivec3(0), textureSize(_group_0_binding_3_fs, _e6_clamped_lod) - ivec3(1)), _e6_clamped_lod);
return _e6;
int _e3_clamped_lod = clamp(level_3, 0, textureQueryLevels(_group_0_binding_3_fs) - 1);
vec4 _e3 = texelFetch(_group_0_binding_3_fs, clamp(coords_3, ivec3(0), textureSize(_group_0_binding_3_fs, _e3_clamped_lod) - ivec3(1)), _e3_clamped_lod);
return _e3;
}
vec4 test_textureLoad_multisampled_2d(ivec2 coords_4, int _sample) {
vec4 _e7 = texelFetch(_group_0_binding_4_fs, clamp(coords_4, ivec2(0), textureSize(_group_0_binding_4_fs) - ivec2(1)), clamp(_sample, 0, textureSamples(_group_0_binding_4_fs) - 1)
vec4 _e3 = texelFetch(_group_0_binding_4_fs, clamp(coords_4, ivec2(0), textureSize(_group_0_binding_4_fs) - ivec2(1)), clamp(_sample, 0, textureSamples(_group_0_binding_4_fs) - 1)
);
return _e7;
return _e3;
}
void test_textureStore_1d(int coords_8, vec4 value) {
@ -71,11 +71,11 @@ void test_textureStore_3d(ivec3 coords_11, vec4 value_3) {
}
void main() {
vec4 _e14 = test_textureLoad_1d(0, 0);
vec4 _e17 = test_textureLoad_2d(ivec2(0, 0), 0);
vec4 _e21 = test_textureLoad_2d_array(ivec2(0, 0), 0, 0);
vec4 _e24 = test_textureLoad_3d(ivec3(0, 0, 0), 0);
vec4 _e27 = test_textureLoad_multisampled_2d(ivec2(0, 0), 0);
vec4 _e2 = test_textureLoad_1d(0, 0);
vec4 _e5 = test_textureLoad_2d(ivec2(0, 0), 0);
vec4 _e9 = test_textureLoad_2d_array(ivec2(0, 0), 0, 0);
vec4 _e12 = test_textureLoad_3d(ivec3(0, 0, 0), 0);
vec4 _e15 = test_textureLoad_multisampled_2d(ivec2(0, 0), 0);
test_textureStore_1d(0, vec4(0.0, 0.0, 0.0, 0.0));
test_textureStore_2d(ivec2(0, 0), vec4(0.0, 0.0, 0.0, 0.0));
test_textureStore_2d_array(ivec2(0, 0), 0, vec4(0.0, 0.0, 0.0, 0.0));

View File

@ -26,23 +26,23 @@ vec4 test_textureLoad_1d(int coords, int level) {
}
vec4 test_textureLoad_2d(ivec2 coords_1, int level_1) {
vec4 _e4 = (level_1 < textureQueryLevels(_group_0_binding_1_fs) && all(lessThan(coords_1, textureSize(_group_0_binding_1_fs, level_1))) ? texelFetch(_group_0_binding_1_fs, coords_1, level_1) : vec4(0.0));
return _e4;
vec4 _e3 = (level_1 < textureQueryLevels(_group_0_binding_1_fs) && all(lessThan(coords_1, textureSize(_group_0_binding_1_fs, level_1))) ? texelFetch(_group_0_binding_1_fs, coords_1, level_1) : vec4(0.0));
return _e3;
}
vec4 test_textureLoad_2d_array(ivec2 coords_2, int index, int level_2) {
vec4 _e6 = (level_2 < textureQueryLevels(_group_0_binding_2_fs) && all(lessThan(ivec3(coords_2, index), textureSize(_group_0_binding_2_fs, level_2))) ? texelFetch(_group_0_binding_2_fs, ivec3(coords_2, index), level_2) : vec4(0.0));
return _e6;
vec4 _e4 = (level_2 < textureQueryLevels(_group_0_binding_2_fs) && all(lessThan(ivec3(coords_2, index), textureSize(_group_0_binding_2_fs, level_2))) ? texelFetch(_group_0_binding_2_fs, ivec3(coords_2, index), level_2) : vec4(0.0));
return _e4;
}
vec4 test_textureLoad_3d(ivec3 coords_3, int level_3) {
vec4 _e6 = (level_3 < textureQueryLevels(_group_0_binding_3_fs) && all(lessThan(coords_3, textureSize(_group_0_binding_3_fs, level_3))) ? texelFetch(_group_0_binding_3_fs, coords_3, level_3) : vec4(0.0));
return _e6;
vec4 _e3 = (level_3 < textureQueryLevels(_group_0_binding_3_fs) && all(lessThan(coords_3, textureSize(_group_0_binding_3_fs, level_3))) ? texelFetch(_group_0_binding_3_fs, coords_3, level_3) : vec4(0.0));
return _e3;
}
vec4 test_textureLoad_multisampled_2d(ivec2 coords_4, int _sample) {
vec4 _e7 = (_sample < textureSamples(_group_0_binding_4_fs) && all(lessThan(coords_4, textureSize(_group_0_binding_4_fs))) ? texelFetch(_group_0_binding_4_fs, coords_4, _sample) : vec4(0.0));
return _e7;
vec4 _e3 = (_sample < textureSamples(_group_0_binding_4_fs) && all(lessThan(coords_4, textureSize(_group_0_binding_4_fs))) ? texelFetch(_group_0_binding_4_fs, coords_4, _sample) : vec4(0.0));
return _e3;
}
void test_textureStore_1d(int coords_8, vec4 value) {
@ -66,11 +66,11 @@ void test_textureStore_3d(ivec3 coords_11, vec4 value_3) {
}
void main() {
vec4 _e14 = test_textureLoad_1d(0, 0);
vec4 _e17 = test_textureLoad_2d(ivec2(0, 0), 0);
vec4 _e21 = test_textureLoad_2d_array(ivec2(0, 0), 0, 0);
vec4 _e24 = test_textureLoad_3d(ivec3(0, 0, 0), 0);
vec4 _e27 = test_textureLoad_multisampled_2d(ivec2(0, 0), 0);
vec4 _e2 = test_textureLoad_1d(0, 0);
vec4 _e5 = test_textureLoad_2d(ivec2(0, 0), 0);
vec4 _e9 = test_textureLoad_2d_array(ivec2(0, 0), 0, 0);
vec4 _e12 = test_textureLoad_3d(ivec3(0, 0, 0), 0);
vec4 _e15 = test_textureLoad_multisampled_2d(ivec2(0, 0), 0);
test_textureStore_1d(0, vec4(0.0, 0.0, 0.0, 0.0));
test_textureStore_2d(ivec2(0, 0), vec4(0.0, 0.0, 0.0, 0.0));
test_textureStore_2d_array(ivec2(0, 0), 0, vec4(0.0, 0.0, 0.0, 0.0));

View File

@ -5,7 +5,7 @@ precision highp int;
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
struct Foo {
struct FooStruct {
vec3 v3_;
float v1_;
};
@ -13,7 +13,7 @@ shared float wg[10];
shared uint at_1;
layout(std430) buffer Foo_block_0Compute { Foo _group_0_binding_1_cs; };
layout(std430) buffer FooStruct_block_0Compute { FooStruct _group_0_binding_1_cs; };
layout(std430) readonly buffer type_6_block_1Compute { vec2 _group_0_binding_2_cs[]; };
@ -33,13 +33,14 @@ void test_msl_packed_vec3_as_arg(vec3 arg) {
}
void test_msl_packed_vec3_() {
int idx = 1;
int idx = 0;
_group_0_binding_1_cs.v3_ = vec3(1.0);
idx = 1;
_group_0_binding_1_cs.v3_.x = 1.0;
_group_0_binding_1_cs.v3_.x = 2.0;
int _e23 = idx;
_group_0_binding_1_cs.v3_[_e23] = 3.0;
Foo data = _group_0_binding_1_cs;
int _e17 = idx;
_group_0_binding_1_cs.v3_[_e17] = 3.0;
FooStruct data = _group_0_binding_1_cs;
vec3 unnamed = data.v3_;
vec2 unnamed_1 = data.v3_.zx;
test_msl_packed_vec3_as_arg(data.v3_);
@ -50,26 +51,28 @@ void test_msl_packed_vec3_() {
}
void main() {
float Foo_1 = 1.0;
bool at = true;
float Foo = 0.0;
bool at = false;
test_msl_packed_vec3_();
mat4x2 _e16 = _group_0_binding_7_cs[0][0];
vec4 _e23 = _group_0_binding_6_cs[0][0][0];
wg[7] = (_e16 * _e23).x;
mat3x2 _e28 = _group_0_binding_5_cs;
vec3 _e29 = _group_0_binding_4_cs;
wg[6] = (_e28 * _e29).x;
float _e37 = _group_0_binding_2_cs[1].y;
wg[5] = _e37;
mat4x2 _e8 = _group_0_binding_7_cs[0][0];
vec4 _e16 = _group_0_binding_6_cs[0][0][0];
wg[7] = (_e8 * _e16).x;
mat3x2 _e23 = _group_0_binding_5_cs;
vec3 _e25 = _group_0_binding_4_cs;
wg[6] = (_e23 * _e25).x;
float _e35 = _group_0_binding_2_cs[1].y;
wg[5] = _e35;
float _e43 = _group_0_binding_3_cs[0].w;
wg[4] = _e43;
float _e47 = _group_0_binding_1_cs.v1_;
wg[3] = _e47;
float _e52 = _group_0_binding_1_cs.v3_.x;
wg[2] = _e52;
float _e49 = _group_0_binding_1_cs.v1_;
wg[3] = _e49;
float _e56 = _group_0_binding_1_cs.v3_.x;
wg[2] = _e56;
_group_0_binding_1_cs.v1_ = 4.0;
wg[1] = float(uint(_group_0_binding_2_cs.length()));
at_1 = 2u;
Foo = 1.0;
at = true;
return;
}

View File

@ -31,14 +31,14 @@ vec4 splat() {
vec2 splat_assignment() {
vec2 a = vec2(0.0);
a = vec2(2.0);
vec2 _e7 = a;
a = (_e7 + vec2(1.0));
vec2 _e11 = a;
a = (_e11 - vec2(3.0));
vec2 _e4 = a;
a = (_e4 + vec2(1.0));
vec2 _e8 = a;
a = (_e8 - vec2(3.0));
vec2 _e12 = a;
a = (_e12 / vec2(4.0));
vec2 _e15 = a;
a = (_e15 / vec2(4.0));
vec2 _e19 = a;
return _e19;
return _e15;
}
vec3 bool_cast(vec3 x) {
@ -62,8 +62,8 @@ float constructors() {
mat2x3 unnamed_8 = mat2x3(mat2x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
uvec2 unnamed_9 = uvec2(0u, 0u);
mat2x3 unnamed_10 = mat2x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0));
float _e75 = foo.a.x;
return _e75;
float _e71 = foo.a.x;
return _e71;
}
void logical() {
@ -216,38 +216,40 @@ void comparison() {
}
void assignment() {
int a_1 = 1;
ivec3 vec0_ = ivec3(0, 0, 0);
int a_1 = 0;
ivec3 vec0_ = ivec3(0);
a_1 = 1;
int _e3 = a_1;
a_1 = (_e3 + 1);
int _e6 = a_1;
a_1 = (_e6 + 1);
a_1 = (_e6 - 1);
int _e8 = a_1;
int _e9 = a_1;
a_1 = (_e9 - 1);
a_1 = (_e9 * _e8);
int _e11 = a_1;
int _e12 = a_1;
int _e13 = a_1;
a_1 = (_e12 * _e13);
a_1 = (_e12 / _e11);
int _e15 = a_1;
int _e16 = a_1;
a_1 = (_e15 / _e16);
a_1 = (_e15 % 1);
int _e18 = a_1;
a_1 = (_e18 % 1);
a_1 = (_e18 & 0);
int _e21 = a_1;
a_1 = (_e21 & 0);
a_1 = (_e21 | 0);
int _e24 = a_1;
a_1 = (_e24 | 0);
a_1 = (_e24 ^ 0);
int _e27 = a_1;
a_1 = (_e27 ^ 0);
a_1 = (_e27 << 2u);
int _e30 = a_1;
a_1 = (_e30 << 2u);
int _e33 = a_1;
a_1 = (_e33 >> 1u);
int _e36 = a_1;
a_1 = (_e36 + 1);
int _e39 = a_1;
a_1 = (_e39 - 1);
int _e46 = vec0_.y;
vec0_.y = (_e46 + 1);
int _e51 = vec0_.y;
vec0_.y = (_e51 - 1);
a_1 = (_e30 >> 1u);
int _e32 = a_1;
a_1 = (_e32 + 1);
int _e35 = a_1;
a_1 = (_e35 - 1);
vec0_ = ivec3(0, 0, 0);
int _e42 = vec0_.y;
vec0_.y = (_e42 + 1);
int _e47 = vec0_.y;
vec0_.y = (_e47 - 1);
return;
}
@ -262,10 +264,10 @@ void negation_avoids_prefix_decrement() {
}
void main() {
vec4 _e4 = builtins();
vec4 _e5 = splat();
vec3 _e7 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz);
float _e8 = constructors();
vec4 _e0 = builtins();
vec4 _e1 = splat();
vec3 _e4 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz);
float _e5 = constructors();
logical();
arithmetic();
bit();

View File

@ -26,10 +26,10 @@ uniform Test3__block_2Vertex { Test3_ _group_0_binding_2_vs; };
void main() {
float _e6 = _group_0_binding_0_vs.b;
float _e9 = _group_0_binding_1_vs.b;
float _e4 = _group_0_binding_0_vs.b;
float _e8 = _group_0_binding_1_vs.b;
float _e12 = _group_0_binding_2_vs.b;
gl_Position = (((vec4(1.0) * _e6) * _e9) * _e12);
gl_Position = (((vec4(1.0) * _e4) * _e8) * _e12);
gl_Position.yz = vec2(-gl_Position.y, gl_Position.z * 2.0 - gl_Position.w);
return;
}

View File

@ -40,40 +40,44 @@ float fetch_shadow(uint light_id, vec4 homogeneous_coords) {
vec2 flip_correction = vec2(0.5, -0.5);
float proj_correction = (1.0 / homogeneous_coords.w);
vec2 light_local = (((homogeneous_coords.xy * flip_correction) * proj_correction) + vec2(0.5, 0.5));
float _e28 = textureGrad(_group_0_binding_2_fs, vec4(light_local, int(light_id), (homogeneous_coords.z * proj_correction)), vec2(0.0), vec2(0.0));
return _e28;
float _e24 = textureGrad(_group_0_binding_2_fs, vec4(light_local, int(light_id), (homogeneous_coords.z * proj_correction)), vec2(0.0), vec2(0.0));
return _e24;
}
void main() {
VertexOutput in_ = VertexOutput(gl_FragCoord, _vs2fs_location0, _vs2fs_location1);
vec3 color = vec3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
vec3 color = vec3(0.0);
uint i = 0u;
vec3 normal_1 = normalize(in_.world_normal);
color = vec3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _e20 = i;
i = (_e20 + 1u);
uint _e39 = i;
i = (_e39 + 1u);
}
loop_init = false;
uint _e14 = i;
uint _e17 = _group_0_binding_0_fs.num_lights.x;
if ((_e14 < min(_e17, 10u))) {
uint _e7 = i;
uint _e11 = _group_0_binding_0_fs.num_lights.x;
if ((_e7 < min(_e11, 10u))) {
} else {
break;
}
uint _e23 = i;
Light light = _group_0_binding_1_fs[_e23];
uint _e26 = i;
float _e30 = fetch_shadow(_e26, (light.proj * in_.world_position));
vec3 light_dir = normalize((light.pos.xyz - in_.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
vec3 _e40 = color;
color = (_e40 + ((_e30 * diffuse) * light.color.xyz));
{
uint _e16 = i;
Light light = _group_0_binding_1_fs[_e16];
uint _e19 = i;
float _e23 = fetch_shadow(_e19, (light.proj * in_.world_position));
vec3 light_dir = normalize((light.pos.xyz - in_.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
vec3 _e37 = color;
color = (_e37 + ((_e23 * diffuse) * light.color.xyz));
}
}
vec3 _e46 = color;
vec4 _e50 = _group_1_binding_0_fs.color;
_fs2p_location0 = (vec4(_e46, 1.0) * _e50);
vec3 _e42 = color;
vec4 _e47 = _group_1_binding_0_fs.color;
_fs2p_location0 = (vec4(_e42, 1.0) * _e47);
return;
}

View File

@ -40,40 +40,44 @@ float fetch_shadow(uint light_id, vec4 homogeneous_coords) {
vec2 flip_correction = vec2(0.5, -0.5);
float proj_correction = (1.0 / homogeneous_coords.w);
vec2 light_local = (((homogeneous_coords.xy * flip_correction) * proj_correction) + vec2(0.5, 0.5));
float _e28 = textureGrad(_group_0_binding_2_fs, vec4(light_local, int(light_id), (homogeneous_coords.z * proj_correction)), vec2(0.0), vec2(0.0));
return _e28;
float _e24 = textureGrad(_group_0_binding_2_fs, vec4(light_local, int(light_id), (homogeneous_coords.z * proj_correction)), vec2(0.0), vec2(0.0));
return _e24;
}
void main() {
VertexOutput in_1 = VertexOutput(gl_FragCoord, _vs2fs_location0, _vs2fs_location1);
vec3 color_1 = vec3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
vec3 color_1 = vec3(0.0);
uint i_1 = 0u;
vec3 normal_1 = normalize(in_1.world_normal);
color_1 = vec3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i_1 = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _e20 = i_1;
i_1 = (_e20 + 1u);
uint _e39 = i_1;
i_1 = (_e39 + 1u);
}
loop_init = false;
uint _e14 = i_1;
uint _e17 = _group_0_binding_0_fs.num_lights.x;
if ((_e14 < min(_e17, 10u))) {
uint _e7 = i_1;
uint _e11 = _group_0_binding_0_fs.num_lights.x;
if ((_e7 < min(_e11, 10u))) {
} else {
break;
}
uint _e23 = i_1;
Light light = _group_0_binding_1_fs[_e23];
uint _e26 = i_1;
float _e30 = fetch_shadow(_e26, (light.proj * in_1.world_position));
vec3 light_dir = normalize((light.pos.xyz - in_1.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
vec3 _e40 = color_1;
color_1 = (_e40 + ((_e30 * diffuse) * light.color.xyz));
{
uint _e16 = i_1;
Light light = _group_0_binding_1_fs[_e16];
uint _e19 = i_1;
float _e23 = fetch_shadow(_e19, (light.proj * in_1.world_position));
vec3 light_dir = normalize((light.pos.xyz - in_1.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
vec3 _e37 = color_1;
color_1 = (_e37 + ((_e23 * diffuse) * light.color.xyz));
}
}
vec3 _e46 = color_1;
vec4 _e50 = _group_1_binding_0_fs.color;
_fs2p_location0 = (vec4(_e46, 1.0) * _e50);
vec3 _e42 = color_1;
vec4 _e47 = _group_1_binding_0_fs.color;
_fs2p_location0 = (vec4(_e42, 1.0) * _e47);
return;
}

View File

@ -39,12 +39,12 @@ void main() {
vec4 world_pos = (_e7 * vec4(position));
out_.world_normal = (mat3x3(w[0].xyz, w[1].xyz, w[2].xyz) * vec3(normal.xyz));
out_.world_position = world_pos;
mat4x4 _e25 = _group_0_binding_0_vs.view_proj;
out_.proj_position = (_e25 * world_pos);
VertexOutput _e27 = out_;
gl_Position = _e27.proj_position;
_vs2fs_location0 = _e27.world_normal;
_vs2fs_location1 = _e27.world_position;
mat4x4 _e26 = _group_0_binding_0_vs.view_proj;
out_.proj_position = (_e26 * world_pos);
VertexOutput _e28 = out_;
gl_Position = _e28.proj_position;
_vs2fs_location0 = _e28.world_normal;
_vs2fs_location1 = _e28.world_position;
gl_Position.yz = vec2(-gl_Position.y, gl_Position.z * 2.0 - gl_Position.w);
return;
}

View File

@ -18,8 +18,8 @@ layout(location = 0) out vec4 _fs2p_location0;
void main() {
VertexOutput in_ = VertexOutput(gl_FragCoord, _vs2fs_location0);
vec4 _e5 = texture(_group_0_binding_1_fs, vec3(in_.uv));
_fs2p_location0 = _e5;
vec4 _e4 = texture(_group_0_binding_1_fs, vec3(in_.uv));
_fs2p_location0 = _e4;
return;
}

View File

@ -21,15 +21,15 @@ void main() {
int tmp2_ = 0;
tmp1_ = (int(vertex_index) / 2);
tmp2_ = (int(vertex_index) & 1);
int _e10 = tmp1_;
int _e16 = tmp2_;
vec4 pos = vec4(((float(_e10) * 4.0) - 1.0), ((float(_e16) * 4.0) - 1.0), 0.0, 1.0);
int _e9 = tmp1_;
int _e15 = tmp2_;
vec4 pos = vec4(((float(_e9) * 4.0) - 1.0), ((float(_e15) * 4.0) - 1.0), 0.0, 1.0);
vec4 _e27 = _group_0_binding_0_vs.view[0];
vec4 _e31 = _group_0_binding_0_vs.view[1];
vec4 _e35 = _group_0_binding_0_vs.view[2];
mat3x3 inv_model_view = transpose(mat3x3(_e27.xyz, _e31.xyz, _e35.xyz));
mat4x4 _e40 = _group_0_binding_0_vs.proj_inv;
vec4 unprojected = (_e40 * pos);
vec4 _e32 = _group_0_binding_0_vs.view[1];
vec4 _e37 = _group_0_binding_0_vs.view[2];
mat3x3 inv_model_view = transpose(mat3x3(_e27.xyz, _e32.xyz, _e37.xyz));
mat4x4 _e43 = _group_0_binding_0_vs.proj_inv;
vec4 unprojected = (_e43 * pos);
VertexOutput _tmp_return = VertexOutput(pos, (inv_model_view * unprojected.xyz));
gl_Position = _tmp_return.position;
_vs2fs_location0 = _tmp_return.uv;

View File

@ -8,8 +8,8 @@ uniform highp sampler2D _group_0_binding_0_fs;
layout(location = 0) out vec4 _fs2p_location0;
vec4 test(highp sampler2D Passed_Texture) {
vec4 _e7 = texture(Passed_Texture, vec2(vec2(0.0, 0.0)));
return _e7;
vec4 _e5 = texture(Passed_Texture, vec2(vec2(0.0, 0.0)));
return _e5;
}
void main() {

View File

@ -138,38 +138,39 @@ Baz ConstructBaz(float3x2 arg0) {
void test_matrix_within_struct_accesses()
{
int idx = 1;
int idx = (int)0;
Baz t = (Baz)0;
int _expr6 = idx;
idx = (_expr6 - 1);
idx = 1;
int _expr2 = idx;
idx = (_expr2 - 1);
float3x2 unnamed = GetMatmOnBaz(baz);
float2 unnamed_1 = GetMatmOnBaz(baz)[0];
int _expr16 = idx;
float2 unnamed_2 = GetMatmOnBaz(baz)[_expr16];
int _expr15 = idx;
float2 unnamed_2 = GetMatmOnBaz(baz)[_expr15];
float unnamed_3 = GetMatmOnBaz(baz)[0].y;
int _expr28 = idx;
float unnamed_4 = GetMatmOnBaz(baz)[0][_expr28];
int _expr32 = idx;
float unnamed_5 = GetMatmOnBaz(baz)[_expr32].y;
int _expr38 = idx;
int _expr40 = idx;
float unnamed_6 = GetMatmOnBaz(baz)[_expr38][_expr40];
int _expr29 = idx;
float unnamed_4 = GetMatmOnBaz(baz)[0][_expr29];
int _expr34 = idx;
float unnamed_5 = GetMatmOnBaz(baz)[_expr34].y;
int _expr41 = idx;
int _expr43 = idx;
float unnamed_6 = GetMatmOnBaz(baz)[_expr41][_expr43];
t = ConstructBaz(float3x2((1.0).xx, (2.0).xx, (3.0).xx));
int _expr52 = idx;
idx = (_expr52 + 1);
int _expr55 = idx;
idx = (_expr55 + 1);
SetMatmOnBaz(t, float3x2((6.0).xx, (5.0).xx, (4.0).xx));
t.m_0 = (9.0).xx;
int _expr69 = idx;
SetMatVecmOnBaz(t, (90.0).xx, _expr69);
int _expr72 = idx;
SetMatVecmOnBaz(t, (90.0).xx, _expr72);
t.m_0[1] = 10.0;
int _expr82 = idx;
t.m_0[_expr82] = 20.0;
int _expr86 = idx;
SetMatScalarmOnBaz(t, 30.0, _expr86, 1);
int _expr92 = idx;
int _expr94 = idx;
SetMatScalarmOnBaz(t, 40.0, _expr92, _expr94);
int _expr85 = idx;
t.m_0[_expr85] = 20.0;
int _expr89 = idx;
SetMatScalarmOnBaz(t, 30.0, _expr89, 1);
int _expr95 = idx;
int _expr97 = idx;
SetMatScalarmOnBaz(t, 40.0, _expr95, _expr97);
return;
}
@ -181,47 +182,48 @@ MatCx2InArray ConstructMatCx2InArray(float4x2 arg0[2]) {
void test_matrix_within_array_within_struct_accesses()
{
int idx_1 = 1;
int idx_1 = (int)0;
MatCx2InArray t_1 = (MatCx2InArray)0;
int _expr7 = idx_1;
idx_1 = (_expr7 - 1);
idx_1 = 1;
int _expr2 = idx_1;
idx_1 = (_expr2 - 1);
float4x2 unnamed_7[2] = ((float4x2[2])nested_mat_cx2_.am);
float4x2 unnamed_8 = ((float4x2)nested_mat_cx2_.am[0]);
float2 unnamed_9 = nested_mat_cx2_.am[0]._0;
int _expr25 = idx_1;
float2 unnamed_10 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr25);
int _expr24 = idx_1;
float2 unnamed_10 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr24);
float unnamed_11 = nested_mat_cx2_.am[0]._0.y;
int _expr41 = idx_1;
float unnamed_12 = nested_mat_cx2_.am[0]._0[_expr41];
int _expr47 = idx_1;
float unnamed_13 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr47).y;
int _expr55 = idx_1;
int _expr57 = idx_1;
float unnamed_14 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr55)[_expr57];
int _expr42 = idx_1;
float unnamed_12 = nested_mat_cx2_.am[0]._0[_expr42];
int _expr49 = idx_1;
float unnamed_13 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr49).y;
int _expr58 = idx_1;
int _expr60 = idx_1;
float unnamed_14 = __get_col_of_mat4x2(nested_mat_cx2_.am[0], _expr58)[_expr60];
t_1 = ConstructMatCx2InArray(Constructarray2_float4x2_(float4x2(float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0)), float4x2(float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0))));
int _expr63 = idx_1;
idx_1 = (_expr63 + 1);
int _expr66 = idx_1;
idx_1 = (_expr66 + 1);
t_1.am = (__mat4x2[2])Constructarray2_float4x2_(float4x2(float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0)), float4x2(float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0), float2(0.0, 0.0)));
t_1.am[0] = (__mat4x2)float4x2((8.0).xx, (7.0).xx, (6.0).xx, (5.0).xx);
t_1.am[0]._0 = (9.0).xx;
int _expr90 = idx_1;
__set_col_of_mat4x2(t_1.am[0], _expr90, (90.0).xx);
int _expr93 = idx_1;
__set_col_of_mat4x2(t_1.am[0], _expr93, (90.0).xx);
t_1.am[0]._0.y = 10.0;
int _expr107 = idx_1;
t_1.am[0]._0[_expr107] = 20.0;
int _expr113 = idx_1;
__set_el_of_mat4x2(t_1.am[0], _expr113, 1, 30.0);
int _expr121 = idx_1;
int _expr123 = idx_1;
__set_el_of_mat4x2(t_1.am[0], _expr121, _expr123, 40.0);
int _expr110 = idx_1;
t_1.am[0]._0[_expr110] = 20.0;
int _expr116 = idx_1;
__set_el_of_mat4x2(t_1.am[0], _expr116, 1, 30.0);
int _expr124 = idx_1;
int _expr126 = idx_1;
__set_el_of_mat4x2(t_1.am[0], _expr124, _expr126, 40.0);
return;
}
float read_from_private(inout float foo_1)
{
float _expr6 = foo_1;
return _expr6;
float _expr1 = foo_1;
return _expr1;
}
float test_arr_as_arg(float a[5][10])
@ -250,9 +252,10 @@ ret_Constructarray5_int_ Constructarray5_int_(int arg0, int arg1, int arg2, int
float4 foo_vert(uint vi : SV_VertexID) : SV_Position
{
float foo = 0.0;
int c[5] = {(int)0,(int)0,(int)0,(int)0,(int)0};
float foo = (float)0;
int c2_[5] = {(int)0,(int)0,(int)0,(int)0,(int)0};
foo = 0.0;
float baz_1 = foo;
foo = 1.0;
test_matrix_within_struct_accesses();
@ -261,12 +264,12 @@ float4 foo_vert(uint vi : SV_VertexID) : SV_Position
uint2 arr[2] = {asuint(bar.Load2(104+0)), asuint(bar.Load2(104+8))};
float b = asfloat(bar.Load(0+48+0));
int a_1 = asint(bar.Load(0+(((NagaBufferLengthRW(bar) - 120) / 8) - 2u)*8+120));
int2 c_1 = asint(qux.Load2(0));
const float _e32 = read_from_private(foo);
c = Constructarray5_int_(a_1, int(b), 3, 4, 5);
c[(vi + 1u)] = 42;
int value = c[vi];
const float _e46 = test_arr_as_arg(Constructarray5_array10_float__(Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
int2 c = asint(qux.Load2(0));
const float _e34 = read_from_private(foo);
c2_ = Constructarray5_int_(a_1, int(b), 3, 4, 5);
c2_[(vi + 1u)] = 42;
int value = c2_[vi];
const float _e48 = test_arr_as_arg(Constructarray5_array10_float__(Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
return float4(mul(float4((value).xxxx), _matrix), 2.0);
}
@ -302,22 +305,22 @@ void atomics()
int tmp = (int)0;
int value_1 = asint(bar.Load(96));
int _e10; bar.InterlockedAdd(96, 5, _e10);
tmp = _e10;
int _e13; bar.InterlockedAdd(96, -5, _e13);
tmp = _e13;
int _e16; bar.InterlockedAnd(96, 5, _e16);
tmp = _e16;
int _e7; bar.InterlockedAdd(96, 5, _e7);
tmp = _e7;
int _e11; bar.InterlockedAdd(96, -5, _e11);
tmp = _e11;
int _e15; bar.InterlockedAnd(96, 5, _e15);
tmp = _e15;
int _e19; bar.InterlockedOr(96, 5, _e19);
tmp = _e19;
int _e22; bar.InterlockedXor(96, 5, _e22);
tmp = _e22;
int _e25; bar.InterlockedMin(96, 5, _e25);
tmp = _e25;
int _e28; bar.InterlockedMax(96, 5, _e28);
tmp = _e28;
int _e31; bar.InterlockedExchange(96, 5, _e31);
int _e23; bar.InterlockedXor(96, 5, _e23);
tmp = _e23;
int _e27; bar.InterlockedMin(96, 5, _e27);
tmp = _e27;
int _e31; bar.InterlockedMax(96, 5, _e31);
tmp = _e31;
int _e35; bar.InterlockedExchange(96, 5, _e35);
tmp = _e35;
bar.Store(96, asuint(value_1));
return;
}

View File

@ -52,132 +52,134 @@ int NagaMSNumSamples2D(Texture2DMS<float4> tex)
float4 main(FragmentInput_main fragmentinput_main) : SV_Target0
{
FragmentIn fragment_in = { fragmentinput_main.index };
int i1_ = 0;
int i1_ = (int)0;
int2 i2_ = (int2)0;
float v1_ = 0.0;
float v1_ = (float)0;
float4 v4_ = (float4)0;
uint uniform_index = uni.index;
uint non_uniform_index = fragment_in.index;
i1_ = 0;
i2_ = (0).xx;
v1_ = 0.0;
v4_ = (0.0).xxxx;
float2 uv = (0.0).xx;
int2 pix = (0).xx;
int2 _expr27 = i2_;
i2_ = (_expr27 + NagaDimensions2D(texture_array_unbounded[0]));
int2 _expr32 = i2_;
i2_ = (_expr32 + NagaDimensions2D(texture_array_unbounded[uniform_index]));
int2 _expr36 = i2_;
i2_ = (_expr36 + NagaDimensions2D(texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)]));
float4 _expr40 = v4_;
float4 _expr45 = texture_array_bounded[0].Gather(samp[0], uv);
v4_ = (_expr40 + _expr45);
float4 _expr47 = v4_;
float4 _expr50 = texture_array_bounded[uniform_index].Gather(samp[uniform_index], uv);
v4_ = (_expr47 + _expr50);
float4 _expr52 = v4_;
int2 _expr23 = i2_;
i2_ = (_expr23 + NagaDimensions2D(texture_array_unbounded[0]));
int2 _expr28 = i2_;
i2_ = (_expr28 + NagaDimensions2D(texture_array_unbounded[uniform_index]));
int2 _expr33 = i2_;
i2_ = (_expr33 + NagaDimensions2D(texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)]));
float4 _expr41 = texture_array_bounded[0].Gather(samp[0], uv);
float4 _expr42 = v4_;
v4_ = (_expr42 + _expr41);
float4 _expr48 = texture_array_bounded[uniform_index].Gather(samp[uniform_index], uv);
float4 _expr49 = v4_;
v4_ = (_expr49 + _expr48);
float4 _expr55 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].Gather(samp[NonUniformResourceIndex(non_uniform_index)], uv);
v4_ = (_expr52 + _expr55);
float4 _expr57 = v4_;
float4 _expr63 = texture_array_depth[0].GatherCmp(samp_comp[0], uv, 0.0);
v4_ = (_expr57 + _expr63);
float4 _expr65 = v4_;
float4 _expr69 = texture_array_depth[uniform_index].GatherCmp(samp_comp[uniform_index], uv, 0.0);
v4_ = (_expr65 + _expr69);
float4 _expr71 = v4_;
float4 _expr75 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].GatherCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
v4_ = (_expr71 + _expr75);
float4 _expr77 = v4_;
float4 _expr81 = texture_array_unbounded[0].Load(int3(pix, 0));
v4_ = (_expr77 + _expr81);
float4 _expr83 = v4_;
float4 _expr86 = texture_array_unbounded[uniform_index].Load(int3(pix, 0));
v4_ = (_expr83 + _expr86);
float4 _expr88 = v4_;
float4 _expr91 = texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)].Load(int3(pix, 0));
v4_ = (_expr88 + _expr91);
int _expr93 = i1_;
i1_ = (_expr93 + NagaNumLayers2DArray(texture_array_2darray[0]));
int _expr98 = i1_;
i1_ = (_expr98 + NagaNumLayers2DArray(texture_array_2darray[uniform_index]));
int _expr102 = i1_;
i1_ = (_expr102 + NagaNumLayers2DArray(texture_array_2darray[NonUniformResourceIndex(non_uniform_index)]));
int _expr106 = i1_;
i1_ = (_expr106 + NagaNumLevels2D(texture_array_bounded[0]));
int _expr111 = i1_;
i1_ = (_expr111 + NagaNumLevels2D(texture_array_bounded[uniform_index]));
int _expr115 = i1_;
i1_ = (_expr115 + NagaNumLevels2D(texture_array_bounded[NonUniformResourceIndex(non_uniform_index)]));
int _expr119 = i1_;
i1_ = (_expr119 + NagaMSNumSamples2D(texture_array_multisampled[0]));
int _expr124 = i1_;
i1_ = (_expr124 + NagaMSNumSamples2D(texture_array_multisampled[uniform_index]));
float4 _expr56 = v4_;
v4_ = (_expr56 + _expr55);
float4 _expr65 = texture_array_depth[0].GatherCmp(samp_comp[0], uv, 0.0);
float4 _expr66 = v4_;
v4_ = (_expr66 + _expr65);
float4 _expr73 = texture_array_depth[uniform_index].GatherCmp(samp_comp[uniform_index], uv, 0.0);
float4 _expr74 = v4_;
v4_ = (_expr74 + _expr73);
float4 _expr81 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].GatherCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
float4 _expr82 = v4_;
v4_ = (_expr82 + _expr81);
float4 _expr88 = texture_array_unbounded[0].Load(int3(pix, 0));
float4 _expr89 = v4_;
v4_ = (_expr89 + _expr88);
float4 _expr94 = texture_array_unbounded[uniform_index].Load(int3(pix, 0));
float4 _expr95 = v4_;
v4_ = (_expr95 + _expr94);
float4 _expr100 = texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)].Load(int3(pix, 0));
float4 _expr101 = v4_;
v4_ = (_expr101 + _expr100);
int _expr107 = i1_;
i1_ = (_expr107 + NagaNumLayers2DArray(texture_array_2darray[0]));
int _expr112 = i1_;
i1_ = (_expr112 + NagaNumLayers2DArray(texture_array_2darray[uniform_index]));
int _expr117 = i1_;
i1_ = (_expr117 + NagaNumLayers2DArray(texture_array_2darray[NonUniformResourceIndex(non_uniform_index)]));
int _expr123 = i1_;
i1_ = (_expr123 + NagaNumLevels2D(texture_array_bounded[0]));
int _expr128 = i1_;
i1_ = (_expr128 + NagaMSNumSamples2D(texture_array_multisampled[NonUniformResourceIndex(non_uniform_index)]));
float4 _expr132 = v4_;
float4 _expr137 = texture_array_bounded[0].Sample(samp[0], uv);
v4_ = (_expr132 + _expr137);
float4 _expr139 = v4_;
float4 _expr142 = texture_array_bounded[uniform_index].Sample(samp[uniform_index], uv);
v4_ = (_expr139 + _expr142);
float4 _expr144 = v4_;
float4 _expr147 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].Sample(samp[NonUniformResourceIndex(non_uniform_index)], uv);
v4_ = (_expr144 + _expr147);
float4 _expr149 = v4_;
float4 _expr155 = texture_array_bounded[0].SampleBias(samp[0], uv, 0.0);
v4_ = (_expr149 + _expr155);
float4 _expr157 = v4_;
float4 _expr161 = texture_array_bounded[uniform_index].SampleBias(samp[uniform_index], uv, 0.0);
v4_ = (_expr157 + _expr161);
float4 _expr163 = v4_;
float4 _expr167 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleBias(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
v4_ = (_expr163 + _expr167);
float _expr169 = v1_;
float _expr175 = texture_array_depth[0].SampleCmp(samp_comp[0], uv, 0.0);
v1_ = (_expr169 + _expr175);
float _expr177 = v1_;
float _expr181 = texture_array_depth[uniform_index].SampleCmp(samp_comp[uniform_index], uv, 0.0);
v1_ = (_expr177 + _expr181);
float _expr183 = v1_;
float _expr187 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
v1_ = (_expr183 + _expr187);
float _expr189 = v1_;
float _expr195 = texture_array_depth[0].SampleCmpLevelZero(samp_comp[0], uv, 0.0);
v1_ = (_expr189 + _expr195);
float _expr197 = v1_;
float _expr201 = texture_array_depth[uniform_index].SampleCmpLevelZero(samp_comp[uniform_index], uv, 0.0);
v1_ = (_expr197 + _expr201);
float _expr203 = v1_;
float _expr207 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmpLevelZero(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
v1_ = (_expr203 + _expr207);
float4 _expr209 = v4_;
float4 _expr214 = texture_array_bounded[0].SampleGrad(samp[0], uv, uv, uv);
v4_ = (_expr209 + _expr214);
float4 _expr216 = v4_;
float4 _expr219 = texture_array_bounded[uniform_index].SampleGrad(samp[uniform_index], uv, uv, uv);
v4_ = (_expr216 + _expr219);
float4 _expr221 = v4_;
float4 _expr224 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleGrad(samp[NonUniformResourceIndex(non_uniform_index)], uv, uv, uv);
v4_ = (_expr221 + _expr224);
float4 _expr226 = v4_;
float4 _expr232 = texture_array_bounded[0].SampleLevel(samp[0], uv, 0.0);
v4_ = (_expr226 + _expr232);
float4 _expr234 = v4_;
float4 _expr238 = texture_array_bounded[uniform_index].SampleLevel(samp[uniform_index], uv, 0.0);
v4_ = (_expr234 + _expr238);
float4 _expr240 = v4_;
float4 _expr244 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleLevel(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
v4_ = (_expr240 + _expr244);
float4 _expr248 = v4_;
texture_array_storage[0][pix] = _expr248;
float4 _expr250 = v4_;
texture_array_storage[uniform_index][pix] = _expr250;
float4 _expr252 = v4_;
texture_array_storage[NonUniformResourceIndex(non_uniform_index)][pix] = _expr252;
int2 _expr253 = i2_;
int _expr254 = i1_;
float2 v2_ = float2((_expr253 + (_expr254).xx));
float4 _expr258 = v4_;
float _expr265 = v1_;
return ((_expr258 + float4(v2_.x, v2_.y, v2_.x, v2_.y)) + (_expr265).xxxx);
i1_ = (_expr128 + NagaNumLevels2D(texture_array_bounded[uniform_index]));
int _expr133 = i1_;
i1_ = (_expr133 + NagaNumLevels2D(texture_array_bounded[NonUniformResourceIndex(non_uniform_index)]));
int _expr139 = i1_;
i1_ = (_expr139 + NagaMSNumSamples2D(texture_array_multisampled[0]));
int _expr144 = i1_;
i1_ = (_expr144 + NagaMSNumSamples2D(texture_array_multisampled[uniform_index]));
int _expr149 = i1_;
i1_ = (_expr149 + NagaMSNumSamples2D(texture_array_multisampled[NonUniformResourceIndex(non_uniform_index)]));
float4 _expr157 = texture_array_bounded[0].Sample(samp[0], uv);
float4 _expr158 = v4_;
v4_ = (_expr158 + _expr157);
float4 _expr164 = texture_array_bounded[uniform_index].Sample(samp[uniform_index], uv);
float4 _expr165 = v4_;
v4_ = (_expr165 + _expr164);
float4 _expr171 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].Sample(samp[NonUniformResourceIndex(non_uniform_index)], uv);
float4 _expr172 = v4_;
v4_ = (_expr172 + _expr171);
float4 _expr181 = texture_array_bounded[0].SampleBias(samp[0], uv, 0.0);
float4 _expr182 = v4_;
v4_ = (_expr182 + _expr181);
float4 _expr189 = texture_array_bounded[uniform_index].SampleBias(samp[uniform_index], uv, 0.0);
float4 _expr190 = v4_;
v4_ = (_expr190 + _expr189);
float4 _expr197 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleBias(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
float4 _expr198 = v4_;
v4_ = (_expr198 + _expr197);
float _expr207 = texture_array_depth[0].SampleCmp(samp_comp[0], uv, 0.0);
float _expr208 = v1_;
v1_ = (_expr208 + _expr207);
float _expr215 = texture_array_depth[uniform_index].SampleCmp(samp_comp[uniform_index], uv, 0.0);
float _expr216 = v1_;
v1_ = (_expr216 + _expr215);
float _expr223 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
float _expr224 = v1_;
v1_ = (_expr224 + _expr223);
float _expr233 = texture_array_depth[0].SampleCmpLevelZero(samp_comp[0], uv, 0.0);
float _expr234 = v1_;
v1_ = (_expr234 + _expr233);
float _expr241 = texture_array_depth[uniform_index].SampleCmpLevelZero(samp_comp[uniform_index], uv, 0.0);
float _expr242 = v1_;
v1_ = (_expr242 + _expr241);
float _expr249 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmpLevelZero(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
float _expr250 = v1_;
v1_ = (_expr250 + _expr249);
float4 _expr258 = texture_array_bounded[0].SampleGrad(samp[0], uv, uv, uv);
float4 _expr259 = v4_;
v4_ = (_expr259 + _expr258);
float4 _expr265 = texture_array_bounded[uniform_index].SampleGrad(samp[uniform_index], uv, uv, uv);
float4 _expr266 = v4_;
v4_ = (_expr266 + _expr265);
float4 _expr272 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleGrad(samp[NonUniformResourceIndex(non_uniform_index)], uv, uv, uv);
float4 _expr273 = v4_;
v4_ = (_expr273 + _expr272);
float4 _expr282 = texture_array_bounded[0].SampleLevel(samp[0], uv, 0.0);
float4 _expr283 = v4_;
v4_ = (_expr283 + _expr282);
float4 _expr290 = texture_array_bounded[uniform_index].SampleLevel(samp[uniform_index], uv, 0.0);
float4 _expr291 = v4_;
v4_ = (_expr291 + _expr290);
float4 _expr298 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleLevel(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
float4 _expr299 = v4_;
v4_ = (_expr299 + _expr298);
float4 _expr304 = v4_;
texture_array_storage[0][pix] = _expr304;
float4 _expr307 = v4_;
texture_array_storage[uniform_index][pix] = _expr307;
float4 _expr310 = v4_;
texture_array_storage[NonUniformResourceIndex(non_uniform_index)][pix] = _expr310;
int2 _expr311 = i2_;
int _expr312 = i1_;
float2 v2_ = float2((_expr311 + (_expr312).xx));
float4 _expr316 = v4_;
float _expr323 = v1_;
return ((_expr316 + float4(v2_.x, v2_.y, v2_.x, v2_.y)) + (_expr323).xxxx);
}

View File

@ -27,121 +27,124 @@ void main(uint3 global_invocation_id : SV_DispatchThreadID)
float2 cMass = (float2)0;
float2 cVel = (float2)0;
float2 colVel = (float2)0;
int cMassCount = 0;
int cVelCount = 0;
int cMassCount = (int)0;
int cVelCount = (int)0;
float2 pos = (float2)0;
float2 vel = (float2)0;
uint i = 0u;
uint i = (uint)0;
uint index = global_invocation_id.x;
if ((index >= NUM_PARTICLES)) {
return;
}
float2 _expr10 = asfloat(particlesSrc.Load2(0+index*16+0));
vPos = _expr10;
float2 _expr15 = asfloat(particlesSrc.Load2(8+index*16+0));
vVel = _expr15;
float2 _expr8 = asfloat(particlesSrc.Load2(0+index*16+0));
vPos = _expr8;
float2 _expr14 = asfloat(particlesSrc.Load2(8+index*16+0));
vVel = _expr14;
cMass = float2(0.0, 0.0);
cVel = float2(0.0, 0.0);
colVel = float2(0.0, 0.0);
cMassCount = 0;
cVelCount = 0;
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _expr86 = i;
i = (_expr86 + 1u);
uint _expr91 = i;
i = (_expr91 + 1u);
}
loop_init = false;
uint _expr37 = i;
if ((_expr37 >= NUM_PARTICLES)) {
uint _expr36 = i;
if ((_expr36 >= NUM_PARTICLES)) {
break;
}
uint _expr39 = i;
if ((_expr39 == index)) {
continue;
}
uint _expr42 = i;
float2 _expr45 = asfloat(particlesSrc.Load2(0+_expr42*16+0));
pos = _expr45;
uint _expr47 = i;
float2 _expr50 = asfloat(particlesSrc.Load2(8+_expr47*16+0));
vel = _expr50;
float2 _expr51 = pos;
float2 _expr52 = vPos;
float _expr55 = params.rule1Distance;
if ((distance(_expr51, _expr52) < _expr55)) {
float2 _expr57 = cMass;
float2 _expr58 = pos;
cMass = (_expr57 + _expr58);
int _expr60 = cMassCount;
cMassCount = (_expr60 + 1);
uint _expr43 = i;
float2 _expr46 = asfloat(particlesSrc.Load2(0+_expr43*16+0));
pos = _expr46;
uint _expr49 = i;
float2 _expr52 = asfloat(particlesSrc.Load2(8+_expr49*16+0));
vel = _expr52;
float2 _expr53 = pos;
float2 _expr54 = vPos;
float _expr58 = params.rule1Distance;
if ((distance(_expr53, _expr54) < _expr58)) {
float2 _expr60 = cMass;
float2 _expr61 = pos;
cMass = (_expr60 + _expr61);
int _expr63 = cMassCount;
cMassCount = (_expr63 + 1);
}
float2 _expr63 = pos;
float2 _expr64 = vPos;
float _expr67 = params.rule2Distance;
if ((distance(_expr63, _expr64) < _expr67)) {
float2 _expr69 = colVel;
float2 _expr70 = pos;
float2 _expr71 = vPos;
colVel = (_expr69 - (_expr70 - _expr71));
float2 _expr66 = pos;
float2 _expr67 = vPos;
float _expr71 = params.rule2Distance;
if ((distance(_expr66, _expr67) < _expr71)) {
float2 _expr73 = colVel;
float2 _expr74 = pos;
float2 _expr75 = vPos;
colVel = (_expr73 - (_expr74 - _expr75));
}
float2 _expr74 = pos;
float2 _expr75 = vPos;
float _expr78 = params.rule3Distance;
if ((distance(_expr74, _expr75) < _expr78)) {
float2 _expr80 = cVel;
float2 _expr81 = vel;
cVel = (_expr80 + _expr81);
int _expr83 = cVelCount;
cVelCount = (_expr83 + 1);
float2 _expr78 = pos;
float2 _expr79 = vPos;
float _expr83 = params.rule3Distance;
if ((distance(_expr78, _expr79) < _expr83)) {
float2 _expr85 = cVel;
float2 _expr86 = vel;
cVel = (_expr85 + _expr86);
int _expr88 = cVelCount;
cVelCount = (_expr88 + 1);
}
}
int _expr89 = cMassCount;
if ((_expr89 > 0)) {
float2 _expr92 = cMass;
int _expr93 = cMassCount;
float2 _expr97 = vPos;
cMass = ((_expr92 / (float(_expr93)).xx) - _expr97);
int _expr94 = cMassCount;
if ((_expr94 > 0)) {
float2 _expr97 = cMass;
int _expr98 = cMassCount;
float2 _expr102 = vPos;
cMass = ((_expr97 / (float(_expr98)).xx) - _expr102);
}
int _expr99 = cVelCount;
if ((_expr99 > 0)) {
float2 _expr102 = cVel;
int _expr103 = cVelCount;
cVel = (_expr102 / (float(_expr103)).xx);
int _expr104 = cVelCount;
if ((_expr104 > 0)) {
float2 _expr107 = cVel;
int _expr108 = cVelCount;
cVel = (_expr107 / (float(_expr108)).xx);
}
float2 _expr107 = vVel;
float2 _expr108 = cMass;
float _expr110 = params.rule1Scale;
float2 _expr113 = colVel;
float _expr115 = params.rule2Scale;
float2 _expr118 = cVel;
float _expr120 = params.rule3Scale;
vVel = (((_expr107 + (_expr108 * _expr110)) + (_expr113 * _expr115)) + (_expr118 * _expr120));
float2 _expr123 = vVel;
float2 _expr125 = vVel;
vVel = (normalize(_expr123) * clamp(length(_expr125), 0.0, 0.10000000149011612));
float2 _expr131 = vPos;
float2 _expr132 = vVel;
float _expr134 = params.deltaT;
vPos = (_expr131 + (_expr132 * _expr134));
float _expr138 = vPos.x;
if ((_expr138 < -1.0)) {
float2 _expr112 = vVel;
float2 _expr113 = cMass;
float _expr116 = params.rule1Scale;
float2 _expr119 = colVel;
float _expr122 = params.rule2Scale;
float2 _expr125 = cVel;
float _expr128 = params.rule3Scale;
vVel = (((_expr112 + (_expr113 * _expr116)) + (_expr119 * _expr122)) + (_expr125 * _expr128));
float2 _expr131 = vVel;
float2 _expr133 = vVel;
vVel = (normalize(_expr131) * clamp(length(_expr133), 0.0, 0.10000000149011612));
float2 _expr139 = vPos;
float2 _expr140 = vVel;
float _expr143 = params.deltaT;
vPos = (_expr139 + (_expr140 * _expr143));
float _expr147 = vPos.x;
if ((_expr147 < -1.0)) {
vPos.x = 1.0;
}
float _expr144 = vPos.x;
if ((_expr144 > 1.0)) {
float _expr153 = vPos.x;
if ((_expr153 > 1.0)) {
vPos.x = -1.0;
}
float _expr150 = vPos.y;
if ((_expr150 < -1.0)) {
float _expr159 = vPos.y;
if ((_expr159 < -1.0)) {
vPos.y = 1.0;
}
float _expr156 = vPos.y;
if ((_expr156 > 1.0)) {
float _expr165 = vPos.y;
if ((_expr165 > 1.0)) {
vPos.y = -1.0;
}
float2 _expr164 = vPos;
particlesDst.Store2(0+index*16+0, asuint(_expr164));
float2 _expr168 = vVel;
particlesDst.Store2(8+index*16+0, asuint(_expr168));
float2 _expr174 = vPos;
particlesDst.Store2(0+index*16+0, asuint(_expr174));
float2 _expr179 = vVel;
particlesDst.Store2(8+index*16+0, asuint(_expr179));
return;
}

View File

@ -4,35 +4,38 @@ RWByteAddressBuffer v_indices : register(u0);
uint collatz_iterations(uint n_base)
{
uint n = (uint)0;
uint i = 0u;
uint i = (uint)0;
n = n_base;
i = 0u;
while(true) {
uint _expr5 = n;
if ((_expr5 > 1u)) {
uint _expr4 = n;
if ((_expr4 > 1u)) {
} else {
break;
}
uint _expr8 = n;
if (((_expr8 % 2u) == 0u)) {
uint _expr13 = n;
n = (_expr13 / 2u);
} else {
uint _expr17 = n;
n = ((3u * _expr17) + 1u);
{
uint _expr7 = n;
if (((_expr7 % 2u) == 0u)) {
uint _expr12 = n;
n = (_expr12 / 2u);
} else {
uint _expr16 = n;
n = ((3u * _expr16) + 1u);
}
uint _expr20 = i;
i = (_expr20 + 1u);
}
uint _expr21 = i;
i = (_expr21 + 1u);
}
uint _expr24 = i;
return _expr24;
uint _expr23 = i;
return _expr23;
}
[numthreads(1, 1, 1)]
void main(uint3 global_id : SV_DispatchThreadID)
{
uint _expr8 = asuint(v_indices.Load(global_id.x*4+0));
const uint _e9 = collatz_iterations(_expr8);
v_indices.Store(global_id.x*4+0, asuint(_e9));
uint _expr9 = asuint(v_indices.Load(global_id.x*4+0));
const uint _e10 = collatz_iterations(_expr9);
v_indices.Store(global_id.x*4+0, asuint(_e10));
return;
}

View File

@ -1,4 +1,4 @@
static const bool Foo_2 = true;
static const bool Foo_1 = true;
typedef struct { float2 _0; float2 _1; float2 _2; } __mat3x2;
float2 __get_col_of_mat3x2(__mat3x2 mat, uint idx) {
@ -51,7 +51,7 @@ void __set_el_of_mat4x2(__mat4x2 mat, uint idx, uint vec_idx, float value) {
}
}
struct Foo {
struct FooStruct {
float3 v3_;
float v1_;
};
@ -71,8 +71,8 @@ void test_msl_packed_vec3_as_arg(float3 arg)
return;
}
Foo ConstructFoo(float3 arg0, float arg1) {
Foo ret = (Foo)0;
FooStruct ConstructFooStruct(float3 arg0, float arg1) {
FooStruct ret = (FooStruct)0;
ret.v3_ = arg0;
ret.v1_ = arg1;
return ret;
@ -80,14 +80,15 @@ Foo ConstructFoo(float3 arg0, float arg1) {
void test_msl_packed_vec3_()
{
int idx = 1;
int idx = (int)0;
alignment.Store3(0, asuint((1.0).xxx));
idx = 1;
alignment.Store(0+0, asuint(1.0));
alignment.Store(0+0, asuint(2.0));
int _expr23 = idx;
alignment.Store(_expr23*4+0, asuint(3.0));
Foo data = ConstructFoo(asfloat(alignment.Load3(0)), asfloat(alignment.Load(12)));
int _expr17 = idx;
alignment.Store(_expr17*4+0, asuint(3.0));
FooStruct data = ConstructFooStruct(asfloat(alignment.Load3(0)), asfloat(alignment.Load(12)));
float3 unnamed = data.v3_;
float2 unnamed_1 = data.v3_.zx;
test_msl_packed_vec3_as_arg(data.v3_);
@ -107,26 +108,28 @@ uint NagaBufferLength(ByteAddressBuffer buffer)
[numthreads(1, 1, 1)]
void main()
{
float Foo_1 = 1.0;
bool at = true;
float Foo = (float)0;
bool at = (bool)0;
test_msl_packed_vec3_();
float4x2 _expr16 = ((float4x2)global_nested_arrays_of_matrices_4x2_[0][0]);
float4 _expr23 = global_nested_arrays_of_matrices_2x4_[0][0][0];
wg[7] = mul(_expr23, _expr16).x;
float3x2 _expr28 = ((float3x2)global_mat);
float3 _expr29 = global_vec;
wg[6] = mul(_expr29, _expr28).x;
float _expr37 = asfloat(dummy.Load(4+8));
wg[5] = _expr37;
float4x2 _expr8 = ((float4x2)global_nested_arrays_of_matrices_4x2_[0][0]);
float4 _expr16 = global_nested_arrays_of_matrices_2x4_[0][0][0];
wg[7] = mul(_expr16, _expr8).x;
float3x2 _expr23 = ((float3x2)global_mat);
float3 _expr25 = global_vec;
wg[6] = mul(_expr25, _expr23).x;
float _expr35 = asfloat(dummy.Load(4+8));
wg[5] = _expr35;
float _expr43 = float_vecs[0].w;
wg[4] = _expr43;
float _expr47 = asfloat(alignment.Load(12));
wg[3] = _expr47;
float _expr52 = asfloat(alignment.Load(0+0));
wg[2] = _expr52;
float _expr49 = asfloat(alignment.Load(12));
wg[3] = _expr49;
float _expr56 = asfloat(alignment.Load(0+0));
wg[2] = _expr56;
alignment.Store(12, asuint(4.0));
wg[1] = float(((NagaBufferLength(dummy) - 0) / 8));
at_1 = 2u;
Foo = 1.0;
at = true;
return;
}

View File

@ -83,8 +83,9 @@ void compute(uint3 global_id : SV_DispatchThreadID, uint3 local_id : SV_GroupThr
precise float4 vertex_two_structs(Input1_ in1_, Input2_ in2_) : SV_Position
{
uint index = 2u;
uint index = (uint)0;
uint _expr9 = index;
return float4(float((_NagaConstants.base_vertex + in1_.index)), float((_NagaConstants.base_instance + in2_.index)), float(_expr9), 0.0);
index = 2u;
uint _expr8 = index;
return float4(float((_NagaConstants.base_vertex + in1_.index)), float((_NagaConstants.base_instance + in2_.index)), float(_expr8), 0.0);
}

View File

@ -49,14 +49,14 @@ float2 splat_assignment()
float2 a = (float2)0;
a = (2.0).xx;
float2 _expr7 = a;
a = (_expr7 + (1.0).xx);
float2 _expr11 = a;
a = (_expr11 - (3.0).xx);
float2 _expr4 = a;
a = (_expr4 + (1.0).xx);
float2 _expr8 = a;
a = (_expr8 - (3.0).xx);
float2 _expr12 = a;
a = (_expr12 / (4.0).xx);
float2 _expr15 = a;
a = (_expr15 / (4.0).xx);
float2 _expr19 = a;
return _expr19;
return _expr15;
}
float3 bool_cast(float3 x)
@ -89,8 +89,8 @@ float constructors()
float2x3 unnamed_8 = float2x3(float2x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
uint2 unnamed_9 = asuint(uint2(0u, 0u));
float2x3 unnamed_10 = asfloat(float2x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
float _expr75 = foo.a.x;
return _expr75;
float _expr71 = foo.a.x;
return _expr71;
}
void logical()
@ -248,39 +248,41 @@ void comparison()
void assignment()
{
int a_1 = 1;
int3 vec0_ = int3(0, 0, 0);
int a_1 = (int)0;
int3 vec0_ = (int3)0;
a_1 = 1;
int _expr3 = a_1;
a_1 = (_expr3 + 1);
int _expr6 = a_1;
a_1 = (_expr6 + 1);
a_1 = (_expr6 - 1);
int _expr8 = a_1;
int _expr9 = a_1;
a_1 = (_expr9 - 1);
a_1 = (_expr9 * _expr8);
int _expr11 = a_1;
int _expr12 = a_1;
int _expr13 = a_1;
a_1 = (_expr12 * _expr13);
a_1 = (_expr12 / _expr11);
int _expr15 = a_1;
int _expr16 = a_1;
a_1 = (_expr15 / _expr16);
a_1 = (_expr15 % 1);
int _expr18 = a_1;
a_1 = (_expr18 % 1);
a_1 = (_expr18 & 0);
int _expr21 = a_1;
a_1 = (_expr21 & 0);
a_1 = (_expr21 | 0);
int _expr24 = a_1;
a_1 = (_expr24 | 0);
a_1 = (_expr24 ^ 0);
int _expr27 = a_1;
a_1 = (_expr27 ^ 0);
a_1 = (_expr27 << 2u);
int _expr30 = a_1;
a_1 = (_expr30 << 2u);
int _expr33 = a_1;
a_1 = (_expr33 >> 1u);
int _expr36 = a_1;
a_1 = (_expr36 + 1);
int _expr39 = a_1;
a_1 = (_expr39 - 1);
int _expr46 = vec0_.y;
vec0_.y = (_expr46 + 1);
int _expr51 = vec0_.y;
vec0_.y = (_expr51 - 1);
a_1 = (_expr30 >> 1u);
int _expr32 = a_1;
a_1 = (_expr32 + 1);
int _expr35 = a_1;
a_1 = (_expr35 - 1);
vec0_ = int3(0, 0, 0);
int _expr42 = vec0_.y;
vec0_.y = (_expr42 + 1);
int _expr47 = vec0_.y;
vec0_.y = (_expr47 - 1);
return;
}
@ -298,10 +300,10 @@ void negation_avoids_prefix_decrement()
[numthreads(1, 1, 1)]
void main()
{
const float4 _e4 = builtins();
const float4 _e5 = splat();
const float3 _e7 = bool_cast(float4(1.0, 1.0, 1.0, 1.0).xyz);
const float _e8 = constructors();
const float4 _e0 = builtins();
const float4 _e1 = splat();
const float3 _e4 = bool_cast(float4(1.0, 1.0, 1.0, 1.0).xyz);
const float _e5 = constructors();
logical();
arithmetic();
bit();

View File

@ -36,8 +36,8 @@ cbuffer input3_ : register(b2) { Test3_ input3_; }
float4 vertex() : SV_Position
{
float _expr6 = input1_.b;
float _expr9 = input2_.b;
float _expr4 = input1_.b;
float _expr8 = input2_.b;
float _expr12 = input3_.b;
return ((((1.0).xxxx * _expr6) * _expr9) * _expr12);
return ((((1.0).xxxx * _expr4) * _expr8) * _expr12);
}

View File

@ -56,8 +56,8 @@ float fetch_shadow(uint light_id, float4 homogeneous_coords)
float2 flip_correction = float2(0.5, -0.5);
float proj_correction = (1.0 / homogeneous_coords.w);
float2 light_local = (((homogeneous_coords.xy * flip_correction) * proj_correction) + float2(0.5, 0.5));
float _expr28 = t_shadow.SampleCmpLevelZero(sampler_shadow, float3(light_local, int(light_id)), (homogeneous_coords.z * proj_correction));
return _expr28;
float _expr24 = t_shadow.SampleCmpLevelZero(sampler_shadow, float3(light_local, int(light_id)), (homogeneous_coords.z * proj_correction));
return _expr24;
}
VertexOutput_vs_main vs_main(int4 position : LOC0, int4 normal : LOC1)
@ -69,10 +69,10 @@ VertexOutput_vs_main vs_main(int4 position : LOC0, int4 normal : LOC1)
float4 world_pos = mul(float4(position), _expr7);
out_.world_normal = mul(float3(normal.xyz), float3x3(w[0].xyz, w[1].xyz, w[2].xyz));
out_.world_position = world_pos;
float4x4 _expr25 = u_globals.view_proj;
out_.proj_position = mul(world_pos, _expr25);
VertexOutput _expr27 = out_;
const VertexOutput vertexoutput = _expr27;
float4x4 _expr26 = u_globals.view_proj;
out_.proj_position = mul(world_pos, _expr26);
VertexOutput _expr28 = out_;
const VertexOutput vertexoutput = _expr28;
const VertexOutput_vs_main vertexoutput_1 = { vertexoutput.world_normal, vertexoutput.world_position, vertexoutput.proj_position };
return vertexoutput_1;
}
@ -88,67 +88,75 @@ Light ConstructLight(float4x4 arg0, float4 arg1, float4 arg2) {
float4 fs_main(FragmentInput_fs_main fragmentinput_fs_main) : SV_Target0
{
VertexOutput in_ = { fragmentinput_fs_main.proj_position_1, fragmentinput_fs_main.world_normal_1, fragmentinput_fs_main.world_position_1 };
float3 color = float3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
uint i = 0u;
float3 color = (float3)0;
uint i = (uint)0;
float3 normal_1 = normalize(in_.world_normal);
color = float3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _expr20 = i;
i = (_expr20 + 1u);
uint _expr39 = i;
i = (_expr39 + 1u);
}
loop_init = false;
uint _expr14 = i;
uint _expr17 = u_globals.num_lights.x;
if ((_expr14 < min(_expr17, c_max_lights))) {
uint _expr7 = i;
uint _expr11 = u_globals.num_lights.x;
if ((_expr7 < min(_expr11, c_max_lights))) {
} else {
break;
}
uint _expr23 = i;
Light light = ConstructLight(float4x4(asfloat(s_lights.Load4(_expr23*96+0+0)), asfloat(s_lights.Load4(_expr23*96+0+16)), asfloat(s_lights.Load4(_expr23*96+0+32)), asfloat(s_lights.Load4(_expr23*96+0+48))), asfloat(s_lights.Load4(_expr23*96+64)), asfloat(s_lights.Load4(_expr23*96+80)));
uint _expr26 = i;
const float _e30 = fetch_shadow(_expr26, mul(in_.world_position, light.proj));
float3 light_dir = normalize((light.pos.xyz - in_.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
float3 _expr40 = color;
color = (_expr40 + ((_e30 * diffuse) * light.color.xyz));
{
uint _expr16 = i;
Light light = ConstructLight(float4x4(asfloat(s_lights.Load4(_expr16*96+0+0)), asfloat(s_lights.Load4(_expr16*96+0+16)), asfloat(s_lights.Load4(_expr16*96+0+32)), asfloat(s_lights.Load4(_expr16*96+0+48))), asfloat(s_lights.Load4(_expr16*96+64)), asfloat(s_lights.Load4(_expr16*96+80)));
uint _expr19 = i;
const float _e23 = fetch_shadow(_expr19, mul(in_.world_position, light.proj));
float3 light_dir = normalize((light.pos.xyz - in_.world_position.xyz));
float diffuse = max(0.0, dot(normal_1, light_dir));
float3 _expr37 = color;
color = (_expr37 + ((_e23 * diffuse) * light.color.xyz));
}
}
float3 _expr46 = color;
float4 _expr50 = u_entity.color;
return (float4(_expr46, 1.0) * _expr50);
float3 _expr42 = color;
float4 _expr47 = u_entity.color;
return (float4(_expr42, 1.0) * _expr47);
}
float4 fs_main_without_storage(FragmentInput_fs_main_without_storage fragmentinput_fs_main_without_storage) : SV_Target0
{
VertexOutput in_1 = { fragmentinput_fs_main_without_storage.proj_position_2, fragmentinput_fs_main_without_storage.world_normal_2, fragmentinput_fs_main_without_storage.world_position_2 };
float3 color_1 = float3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
uint i_1 = 0u;
float3 color_1 = (float3)0;
uint i_1 = (uint)0;
float3 normal_2 = normalize(in_1.world_normal);
color_1 = float3(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i_1 = 0u;
bool loop_init_1 = true;
while(true) {
if (!loop_init_1) {
uint _expr20 = i_1;
i_1 = (_expr20 + 1u);
uint _expr39 = i_1;
i_1 = (_expr39 + 1u);
}
loop_init_1 = false;
uint _expr14 = i_1;
uint _expr17 = u_globals.num_lights.x;
if ((_expr14 < min(_expr17, c_max_lights))) {
uint _expr7 = i_1;
uint _expr11 = u_globals.num_lights.x;
if ((_expr7 < min(_expr11, c_max_lights))) {
} else {
break;
}
uint _expr23 = i_1;
Light light_1 = u_lights[_expr23];
uint _expr26 = i_1;
const float _e30 = fetch_shadow(_expr26, mul(in_1.world_position, light_1.proj));
float3 light_dir_1 = normalize((light_1.pos.xyz - in_1.world_position.xyz));
float diffuse_1 = max(0.0, dot(normal_2, light_dir_1));
float3 _expr40 = color_1;
color_1 = (_expr40 + ((_e30 * diffuse_1) * light_1.color.xyz));
{
uint _expr16 = i_1;
Light light_1 = u_lights[_expr16];
uint _expr19 = i_1;
const float _e23 = fetch_shadow(_expr19, mul(in_1.world_position, light_1.proj));
float3 light_dir_1 = normalize((light_1.pos.xyz - in_1.world_position.xyz));
float diffuse_1 = max(0.0, dot(normal_2, light_dir_1));
float3 _expr37 = color_1;
color_1 = (_expr37 + ((_e23 * diffuse_1) * light_1.color.xyz));
}
}
float3 _expr46 = color_1;
float4 _expr50 = u_entity.color;
return (float4(_expr46, 1.0) * _expr50);
float3 _expr42 = color_1;
float4 _expr47 = u_entity.color;
return (float4(_expr42, 1.0) * _expr47);
}

View File

@ -43,15 +43,15 @@ VertexOutput_vs_main vs_main(uint vertex_index : SV_VertexID)
tmp1_ = (int((_NagaConstants.base_vertex + vertex_index)) / 2);
tmp2_ = (int((_NagaConstants.base_vertex + vertex_index)) & 1);
int _expr10 = tmp1_;
int _expr16 = tmp2_;
float4 pos = float4(((float(_expr10) * 4.0) - 1.0), ((float(_expr16) * 4.0) - 1.0), 0.0, 1.0);
int _expr9 = tmp1_;
int _expr15 = tmp2_;
float4 pos = float4(((float(_expr9) * 4.0) - 1.0), ((float(_expr15) * 4.0) - 1.0), 0.0, 1.0);
float4 _expr27 = r_data.view[0];
float4 _expr31 = r_data.view[1];
float4 _expr35 = r_data.view[2];
float3x3 inv_model_view = transpose(float3x3(_expr27.xyz, _expr31.xyz, _expr35.xyz));
float4x4 _expr40 = r_data.proj_inv;
float4 unprojected = mul(pos, _expr40);
float4 _expr32 = r_data.view[1];
float4 _expr37 = r_data.view[2];
float3x3 inv_model_view = transpose(float3x3(_expr27.xyz, _expr32.xyz, _expr37.xyz));
float4x4 _expr43 = r_data.proj_inv;
float4 unprojected = mul(pos, _expr43);
const VertexOutput vertexoutput = ConstructVertexOutput(pos, mul(unprojected.xyz, inv_model_view));
const VertexOutput_vs_main vertexoutput_1 = { vertexoutput.uv, vertexoutput.position };
return vertexoutput_1;
@ -60,6 +60,6 @@ VertexOutput_vs_main vs_main(uint vertex_index : SV_VertexID)
float4 fs_main(FragmentInput_fs_main fragmentinput_fs_main) : SV_Target0
{
VertexOutput in_ = { fragmentinput_fs_main.position_1, fragmentinput_fs_main.uv_1 };
float4 _expr5 = r_texture.Sample(r_sampler, in_.uv);
return _expr5;
float4 _expr4 = r_texture.Sample(r_sampler, in_.uv);
return _expr4;
}

View File

@ -4,8 +4,8 @@ SamplerState Sampler : register(s1);
float4 test(Texture2D<float4> Passed_Texture, SamplerState Passed_Sampler)
{
float4 _expr7 = Passed_Texture.Sample(Passed_Sampler, float2(0.0, 0.0));
return _expr7;
float4 _expr5 = Passed_Texture.Sample(Passed_Sampler, float2(0.0, 0.0));
return _expr5;
}
float4 main() : SV_Target0

View File

@ -111,164 +111,171 @@
(
name: Some("i"),
ty: 1,
init: Some(1),
init: None,
),
],
expressions: [
GlobalVariable(1),
FunctionArgument(0),
LocalVariable(1),
Constant(1),
LocalVariable(2),
Load(
pointer: 3,
pointer: 2,
),
Constant(2),
Binary(
op: Greater,
left: 6,
right: 7,
left: 5,
right: 6,
),
Load(
pointer: 3,
pointer: 2,
),
Constant(3),
Binary(
op: Modulo,
left: 9,
right: 10,
left: 8,
right: 9,
),
Constant(1),
Binary(
op: Equal,
left: 11,
right: 12,
left: 10,
right: 11,
),
Load(
pointer: 3,
pointer: 2,
),
Constant(3),
Binary(
op: Divide,
left: 14,
right: 15,
left: 13,
right: 14,
),
Constant(4),
Load(
pointer: 3,
pointer: 2,
),
Binary(
op: Multiply,
left: 17,
right: 18,
left: 16,
right: 17,
),
Constant(2),
Binary(
op: Add,
left: 19,
right: 20,
left: 18,
right: 19,
),
Load(
pointer: 5,
pointer: 4,
),
Constant(2),
Binary(
op: Add,
left: 22,
right: 23,
left: 21,
right: 22,
),
Load(
pointer: 5,
pointer: 4,
),
],
named_expressions: {},
named_expressions: {
1: "n_base",
},
body: [
Store(
pointer: 3,
value: 2,
pointer: 2,
value: 1,
),
Store(
pointer: 4,
value: 3,
),
Loop(
body: [
Emit((
start: 5,
end: 6,
start: 4,
end: 5,
)),
Emit((
start: 7,
end: 8,
start: 6,
end: 7,
)),
If(
condition: 8,
condition: 7,
accept: [],
reject: [
Break,
],
),
Emit((
start: 8,
end: 9,
)),
Emit((
start: 10,
end: 11,
)),
Emit((
start: 12,
end: 13,
)),
If(
condition: 13,
accept: [
Emit((
start: 13,
end: 14,
)),
Emit((
start: 15,
end: 16,
)),
Store(
pointer: 3,
value: 16,
),
],
reject: [
Emit((
start: 17,
end: 19,
)),
Emit((
start: 20,
end: 21,
)),
Store(
pointer: 3,
value: 21,
),
],
),
Emit((
start: 21,
end: 22,
)),
Emit((
start: 23,
end: 24,
)),
Store(
pointer: 5,
value: 24,
),
Block([
Emit((
start: 7,
end: 8,
)),
Emit((
start: 9,
end: 10,
)),
Emit((
start: 11,
end: 12,
)),
If(
condition: 12,
accept: [
Emit((
start: 12,
end: 13,
)),
Emit((
start: 14,
end: 15,
)),
Store(
pointer: 2,
value: 15,
),
],
reject: [
Emit((
start: 16,
end: 18,
)),
Emit((
start: 19,
end: 20,
)),
Store(
pointer: 2,
value: 20,
),
],
),
Emit((
start: 20,
end: 21,
)),
Emit((
start: 22,
end: 23,
)),
Store(
pointer: 4,
value: 23,
),
]),
],
continuing: [],
break_if: None,
),
Emit((
start: 24,
end: 25,
start: 23,
end: 24,
)),
Return(
value: Some(25),
value: Some(24),
),
],
),
@ -291,53 +298,60 @@
result: None,
local_variables: [],
expressions: [
GlobalVariable(1),
FunctionArgument(0),
GlobalVariable(1),
AccessIndex(
base: 1,
base: 2,
index: 0,
),
AccessIndex(
base: 2,
base: 1,
index: 0,
),
Access(
base: 3,
index: 4,
),
GlobalVariable(1),
AccessIndex(
base: 6,
index: 0,
),
AccessIndex(
base: 1,
index: 0,
),
AccessIndex(
base: 2,
index: 0,
),
Access(
base: 6,
index: 7,
base: 7,
index: 8,
),
Load(
pointer: 8,
pointer: 9,
),
CallResult(1),
],
named_expressions: {},
named_expressions: {
1: "global_id",
},
body: [
Emit((
start: 2,
end: 9,
end: 5,
)),
Emit((
start: 6,
end: 10,
)),
Call(
function: 1,
arguments: [
9,
10,
],
result: Some(10),
result: Some(11),
),
Store(
pointer: 5,
value: 10,
value: 11,
),
Return(
value: None,

View File

@ -35,11 +35,11 @@ struct Bar {
struct Baz {
metal::float3x2 m;
};
struct type_13 {
struct type_14 {
metal::float4x2 inner[2];
};
struct MatCx2InArray {
type_13 am;
type_14 am;
};
struct type_17 {
float inner[10];
@ -52,9 +52,9 @@ struct type_21 {
};
constant metal::uint3 const_type_1_ = {0u, 0u, 0u};
constant GlobalConst const_GlobalConst = {0u, {}, const_type_1_, 0};
constant metal::float2 const_type_14_ = {0.0, 0.0};
constant metal::float4x2 const_type_12_ = {const_type_14_, const_type_14_, const_type_14_, const_type_14_};
constant type_13 const_type_13_ = {const_type_12_, const_type_12_};
constant metal::float2 const_type_12_ = {0.0, 0.0};
constant metal::float4x2 const_type_13_ = {const_type_12_, const_type_12_, const_type_12_, const_type_12_};
constant type_14 const_type_14_ = {const_type_13_, const_type_13_};
constant type_17 const_type_17_ = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
constant type_18 const_type_18_ = {const_type_17_, const_type_17_, const_type_17_, const_type_17_, const_type_17_};
constant metal::int2 const_type_11_ = {0, 0};
@ -62,84 +62,86 @@ constant metal::int2 const_type_11_ = {0, 0};
void test_matrix_within_struct_accesses(
constant Baz& baz
) {
int idx = 1;
int idx = {};
Baz t = {};
int _e6 = idx;
idx = _e6 - 1;
idx = 1;
int _e2 = idx;
idx = _e2 - 1;
metal::float3x2 unnamed = baz.m;
metal::float2 unnamed_1 = baz.m[0];
int _e16 = idx;
metal::float2 unnamed_2 = baz.m[_e16];
int _e15 = idx;
metal::float2 unnamed_2 = baz.m[_e15];
float unnamed_3 = baz.m[0].y;
int _e28 = idx;
float unnamed_4 = baz.m[0][_e28];
int _e32 = idx;
float unnamed_5 = baz.m[_e32].y;
int _e38 = idx;
int _e40 = idx;
float unnamed_6 = baz.m[_e38][_e40];
int _e29 = idx;
float unnamed_4 = baz.m[0][_e29];
int _e34 = idx;
float unnamed_5 = baz.m[_e34].y;
int _e41 = idx;
int _e43 = idx;
float unnamed_6 = baz.m[_e41][_e43];
t = Baz {metal::float3x2(metal::float2(1.0), metal::float2(2.0), metal::float2(3.0))};
int _e52 = idx;
idx = _e52 + 1;
int _e55 = idx;
idx = _e55 + 1;
t.m = metal::float3x2(metal::float2(6.0), metal::float2(5.0), metal::float2(4.0));
t.m[0] = metal::float2(9.0);
int _e69 = idx;
t.m[_e69] = metal::float2(90.0);
int _e72 = idx;
t.m[_e72] = metal::float2(90.0);
t.m[0].y = 10.0;
int _e82 = idx;
t.m[0][_e82] = 20.0;
int _e86 = idx;
t.m[_e86].y = 30.0;
int _e92 = idx;
int _e94 = idx;
t.m[_e92][_e94] = 40.0;
int _e85 = idx;
t.m[0][_e85] = 20.0;
int _e89 = idx;
t.m[_e89].y = 30.0;
int _e95 = idx;
int _e97 = idx;
t.m[_e95][_e97] = 40.0;
return;
}
void test_matrix_within_array_within_struct_accesses(
constant MatCx2InArray& nested_mat_cx2_
) {
int idx_1 = 1;
int idx_1 = {};
MatCx2InArray t_1 = {};
int _e7 = idx_1;
idx_1 = _e7 - 1;
type_13 unnamed_7 = nested_mat_cx2_.am;
idx_1 = 1;
int _e2 = idx_1;
idx_1 = _e2 - 1;
type_14 unnamed_7 = nested_mat_cx2_.am;
metal::float4x2 unnamed_8 = nested_mat_cx2_.am.inner[0];
metal::float2 unnamed_9 = nested_mat_cx2_.am.inner[0][0];
int _e25 = idx_1;
metal::float2 unnamed_10 = nested_mat_cx2_.am.inner[0][_e25];
int _e24 = idx_1;
metal::float2 unnamed_10 = nested_mat_cx2_.am.inner[0][_e24];
float unnamed_11 = nested_mat_cx2_.am.inner[0][0].y;
int _e41 = idx_1;
float unnamed_12 = nested_mat_cx2_.am.inner[0][0][_e41];
int _e47 = idx_1;
float unnamed_13 = nested_mat_cx2_.am.inner[0][_e47].y;
int _e55 = idx_1;
int _e57 = idx_1;
float unnamed_14 = nested_mat_cx2_.am.inner[0][_e55][_e57];
t_1 = MatCx2InArray {const_type_13_};
int _e63 = idx_1;
idx_1 = _e63 + 1;
for(int _i=0; _i<2; ++_i) t_1.am.inner[_i] = const_type_13_.inner[_i];
int _e42 = idx_1;
float unnamed_12 = nested_mat_cx2_.am.inner[0][0][_e42];
int _e49 = idx_1;
float unnamed_13 = nested_mat_cx2_.am.inner[0][_e49].y;
int _e58 = idx_1;
int _e60 = idx_1;
float unnamed_14 = nested_mat_cx2_.am.inner[0][_e58][_e60];
t_1 = MatCx2InArray {const_type_14_};
int _e66 = idx_1;
idx_1 = _e66 + 1;
for(int _i=0; _i<2; ++_i) t_1.am.inner[_i] = const_type_14_.inner[_i];
t_1.am.inner[0] = metal::float4x2(metal::float2(8.0), metal::float2(7.0), metal::float2(6.0), metal::float2(5.0));
t_1.am.inner[0][0] = metal::float2(9.0);
int _e90 = idx_1;
t_1.am.inner[0][_e90] = metal::float2(90.0);
int _e93 = idx_1;
t_1.am.inner[0][_e93] = metal::float2(90.0);
t_1.am.inner[0][0].y = 10.0;
int _e107 = idx_1;
t_1.am.inner[0][0][_e107] = 20.0;
int _e113 = idx_1;
t_1.am.inner[0][_e113].y = 30.0;
int _e121 = idx_1;
int _e123 = idx_1;
t_1.am.inner[0][_e121][_e123] = 40.0;
int _e110 = idx_1;
t_1.am.inner[0][0][_e110] = 20.0;
int _e116 = idx_1;
t_1.am.inner[0][_e116].y = 30.0;
int _e124 = idx_1;
int _e126 = idx_1;
t_1.am.inner[0][_e124][_e126] = 40.0;
return;
}
float read_from_private(
thread float& foo_1
) {
float _e6 = foo_1;
return _e6;
float _e1 = foo_1;
return _e1;
}
float test_arr_as_arg(
@ -168,8 +170,9 @@ vertex foo_vertOutput foo_vert(
, constant MatCx2InArray& nested_mat_cx2_ [[buffer(3)]]
, constant _mslBufferSizes& _buffer_sizes [[buffer(24)]]
) {
float foo = 0.0;
type_21 c = {};
float foo = {};
type_21 c2_ = {};
foo = 0.0;
float baz_1 = foo;
foo = 1.0;
test_matrix_within_struct_accesses(baz);
@ -178,12 +181,12 @@ vertex foo_vertOutput foo_vert(
type_8 arr = bar.arr;
float b = bar._matrix[3].x;
int a_1 = bar.data[(1 + (_buffer_sizes.size1 - 120 - 8) / 8) - 2u].value;
metal::int2 c_1 = qux;
float _e32 = read_from_private(foo);
for(int _i=0; _i<5; ++_i) c.inner[_i] = type_21 {a_1, static_cast<int>(b), 3, 4, 5}.inner[_i];
c.inner[vi + 1u] = 42;
int value = c.inner[vi];
float _e46 = test_arr_as_arg(const_type_18_);
metal::int2 c = qux;
float _e34 = read_from_private(foo);
for(int _i=0; _i<5; ++_i) c2_.inner[_i] = type_21 {a_1, static_cast<int>(b), 3, 4, 5}.inner[_i];
c2_.inner[vi + 1u] = 42;
int value = c2_.inner[vi];
float _e48 = test_arr_as_arg(const_type_18_);
return foo_vertOutput { metal::float4(_matrix * static_cast<metal::float4>(metal::int4(value)), 2.0) };
}
@ -211,22 +214,22 @@ kernel void atomics(
) {
int tmp = {};
int value_1 = metal::atomic_load_explicit(&bar.atom, metal::memory_order_relaxed);
int _e10 = metal::atomic_fetch_add_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e10;
int _e13 = metal::atomic_fetch_sub_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e13;
int _e16 = metal::atomic_fetch_and_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e16;
int _e7 = metal::atomic_fetch_add_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e7;
int _e11 = metal::atomic_fetch_sub_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e11;
int _e15 = metal::atomic_fetch_and_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e15;
int _e19 = metal::atomic_fetch_or_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e19;
int _e22 = metal::atomic_fetch_xor_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e22;
int _e25 = metal::atomic_fetch_min_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e25;
int _e28 = metal::atomic_fetch_max_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e28;
int _e31 = metal::atomic_exchange_explicit(&bar.atom, 5, metal::memory_order_relaxed);
int _e23 = metal::atomic_fetch_xor_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e23;
int _e27 = metal::atomic_fetch_min_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e27;
int _e31 = metal::atomic_fetch_max_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e31;
int _e35 = metal::atomic_exchange_explicit(&bar.atom, 5, metal::memory_order_relaxed);
tmp = _e35;
metal::atomic_store_explicit(&bar.atom, value_1, metal::memory_order_relaxed);
return;
}

View File

@ -36,137 +36,139 @@ fragment main_Output main_(
, constant UniformIndex& uni [[user(fake0)]]
) {
const FragmentIn fragment_in = { varyings.index };
int i1_ = 0;
int i1_ = {};
metal::int2 i2_ = {};
float v1_ = 0.0;
float v1_ = {};
metal::float4 v4_ = {};
uint uniform_index = uni.index;
uint non_uniform_index = fragment_in.index;
i1_ = 0;
i2_ = metal::int2(0);
v1_ = 0.0;
v4_ = metal::float4(0.0);
metal::float2 uv = metal::float2(0.0);
metal::int2 pix = metal::int2(0);
metal::int2 _e27 = i2_;
i2_ = _e27 + metal::int2(texture_array_unbounded[0].get_width(), texture_array_unbounded[0].get_height());
metal::int2 _e32 = i2_;
i2_ = _e32 + metal::int2(texture_array_unbounded[uniform_index].get_width(), texture_array_unbounded[uniform_index].get_height());
metal::int2 _e36 = i2_;
i2_ = _e36 + metal::int2(texture_array_unbounded[non_uniform_index].get_width(), texture_array_unbounded[non_uniform_index].get_height());
metal::float4 _e40 = v4_;
metal::float4 _e45 = texture_array_bounded[0].gather(samp[0], uv);
v4_ = _e40 + _e45;
metal::float4 _e47 = v4_;
metal::float4 _e50 = texture_array_bounded[uniform_index].gather(samp[uniform_index], uv);
v4_ = _e47 + _e50;
metal::float4 _e52 = v4_;
metal::int2 _e23 = i2_;
i2_ = _e23 + metal::int2(texture_array_unbounded[0].get_width(), texture_array_unbounded[0].get_height());
metal::int2 _e28 = i2_;
i2_ = _e28 + metal::int2(texture_array_unbounded[uniform_index].get_width(), texture_array_unbounded[uniform_index].get_height());
metal::int2 _e33 = i2_;
i2_ = _e33 + metal::int2(texture_array_unbounded[non_uniform_index].get_width(), texture_array_unbounded[non_uniform_index].get_height());
metal::float4 _e41 = texture_array_bounded[0].gather(samp[0], uv);
metal::float4 _e42 = v4_;
v4_ = _e42 + _e41;
metal::float4 _e48 = texture_array_bounded[uniform_index].gather(samp[uniform_index], uv);
metal::float4 _e49 = v4_;
v4_ = _e49 + _e48;
metal::float4 _e55 = texture_array_bounded[non_uniform_index].gather(samp[non_uniform_index], uv);
v4_ = _e52 + _e55;
metal::float4 _e57 = v4_;
metal::float4 _e63 = texture_array_depth[0].gather_compare(samp_comp[0], uv, 0.0);
v4_ = _e57 + _e63;
metal::float4 _e65 = v4_;
metal::float4 _e69 = texture_array_depth[uniform_index].gather_compare(samp_comp[uniform_index], uv, 0.0);
v4_ = _e65 + _e69;
metal::float4 _e71 = v4_;
metal::float4 _e75 = texture_array_depth[non_uniform_index].gather_compare(samp_comp[non_uniform_index], uv, 0.0);
v4_ = _e71 + _e75;
metal::float4 _e77 = v4_;
metal::float4 _e81 = (uint(0) < texture_array_unbounded[0].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[0].get_width(0), texture_array_unbounded[0].get_height(0))) ? texture_array_unbounded[0].read(metal::uint2(pix), 0): DefaultConstructible());
v4_ = _e77 + _e81;
metal::float4 _e83 = v4_;
metal::float4 _e86 = (uint(0) < texture_array_unbounded[uniform_index].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[uniform_index].get_width(0), texture_array_unbounded[uniform_index].get_height(0))) ? texture_array_unbounded[uniform_index].read(metal::uint2(pix), 0): DefaultConstructible());
v4_ = _e83 + _e86;
metal::float4 _e88 = v4_;
metal::float4 _e91 = (uint(0) < texture_array_unbounded[non_uniform_index].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[non_uniform_index].get_width(0), texture_array_unbounded[non_uniform_index].get_height(0))) ? texture_array_unbounded[non_uniform_index].read(metal::uint2(pix), 0): DefaultConstructible());
v4_ = _e88 + _e91;
int _e93 = i1_;
i1_ = _e93 + int(texture_array_2darray[0].get_array_size());
int _e98 = i1_;
i1_ = _e98 + int(texture_array_2darray[uniform_index].get_array_size());
int _e102 = i1_;
i1_ = _e102 + int(texture_array_2darray[non_uniform_index].get_array_size());
int _e106 = i1_;
i1_ = _e106 + int(texture_array_bounded[0].get_num_mip_levels());
int _e111 = i1_;
i1_ = _e111 + int(texture_array_bounded[uniform_index].get_num_mip_levels());
int _e115 = i1_;
i1_ = _e115 + int(texture_array_bounded[non_uniform_index].get_num_mip_levels());
int _e119 = i1_;
i1_ = _e119 + int(texture_array_multisampled[0].get_num_samples());
int _e124 = i1_;
i1_ = _e124 + int(texture_array_multisampled[uniform_index].get_num_samples());
metal::float4 _e56 = v4_;
v4_ = _e56 + _e55;
metal::float4 _e65 = texture_array_depth[0].gather_compare(samp_comp[0], uv, 0.0);
metal::float4 _e66 = v4_;
v4_ = _e66 + _e65;
metal::float4 _e73 = texture_array_depth[uniform_index].gather_compare(samp_comp[uniform_index], uv, 0.0);
metal::float4 _e74 = v4_;
v4_ = _e74 + _e73;
metal::float4 _e81 = texture_array_depth[non_uniform_index].gather_compare(samp_comp[non_uniform_index], uv, 0.0);
metal::float4 _e82 = v4_;
v4_ = _e82 + _e81;
metal::float4 _e88 = (uint(0) < texture_array_unbounded[0].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[0].get_width(0), texture_array_unbounded[0].get_height(0))) ? texture_array_unbounded[0].read(metal::uint2(pix), 0): DefaultConstructible());
metal::float4 _e89 = v4_;
v4_ = _e89 + _e88;
metal::float4 _e94 = (uint(0) < texture_array_unbounded[uniform_index].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[uniform_index].get_width(0), texture_array_unbounded[uniform_index].get_height(0))) ? texture_array_unbounded[uniform_index].read(metal::uint2(pix), 0): DefaultConstructible());
metal::float4 _e95 = v4_;
v4_ = _e95 + _e94;
metal::float4 _e100 = (uint(0) < texture_array_unbounded[non_uniform_index].get_num_mip_levels() && metal::all(metal::uint2(pix) < metal::uint2(texture_array_unbounded[non_uniform_index].get_width(0), texture_array_unbounded[non_uniform_index].get_height(0))) ? texture_array_unbounded[non_uniform_index].read(metal::uint2(pix), 0): DefaultConstructible());
metal::float4 _e101 = v4_;
v4_ = _e101 + _e100;
int _e107 = i1_;
i1_ = _e107 + int(texture_array_2darray[0].get_array_size());
int _e112 = i1_;
i1_ = _e112 + int(texture_array_2darray[uniform_index].get_array_size());
int _e117 = i1_;
i1_ = _e117 + int(texture_array_2darray[non_uniform_index].get_array_size());
int _e123 = i1_;
i1_ = _e123 + int(texture_array_bounded[0].get_num_mip_levels());
int _e128 = i1_;
i1_ = _e128 + int(texture_array_multisampled[non_uniform_index].get_num_samples());
metal::float4 _e132 = v4_;
metal::float4 _e137 = texture_array_bounded[0].sample(samp[0], uv);
v4_ = _e132 + _e137;
metal::float4 _e139 = v4_;
metal::float4 _e142 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv);
v4_ = _e139 + _e142;
metal::float4 _e144 = v4_;
metal::float4 _e147 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv);
v4_ = _e144 + _e147;
metal::float4 _e149 = v4_;
metal::float4 _e155 = texture_array_bounded[0].sample(samp[0], uv, metal::bias(0.0));
v4_ = _e149 + _e155;
metal::float4 _e157 = v4_;
metal::float4 _e161 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::bias(0.0));
v4_ = _e157 + _e161;
metal::float4 _e163 = v4_;
metal::float4 _e167 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::bias(0.0));
v4_ = _e163 + _e167;
float _e169 = v1_;
float _e175 = texture_array_depth[0].sample_compare(samp_comp[0], uv, 0.0);
v1_ = _e169 + _e175;
float _e177 = v1_;
float _e181 = texture_array_depth[uniform_index].sample_compare(samp_comp[uniform_index], uv, 0.0);
v1_ = _e177 + _e181;
float _e183 = v1_;
float _e187 = texture_array_depth[non_uniform_index].sample_compare(samp_comp[non_uniform_index], uv, 0.0);
v1_ = _e183 + _e187;
float _e189 = v1_;
float _e195 = texture_array_depth[0].sample_compare(samp_comp[0], uv, 0.0);
v1_ = _e189 + _e195;
float _e197 = v1_;
float _e201 = texture_array_depth[uniform_index].sample_compare(samp_comp[uniform_index], uv, 0.0);
v1_ = _e197 + _e201;
float _e203 = v1_;
float _e207 = texture_array_depth[non_uniform_index].sample_compare(samp_comp[non_uniform_index], uv, 0.0);
v1_ = _e203 + _e207;
metal::float4 _e209 = v4_;
metal::float4 _e214 = texture_array_bounded[0].sample(samp[0], uv, metal::gradient2d(uv, uv));
v4_ = _e209 + _e214;
metal::float4 _e216 = v4_;
metal::float4 _e219 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::gradient2d(uv, uv));
v4_ = _e216 + _e219;
metal::float4 _e221 = v4_;
metal::float4 _e224 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::gradient2d(uv, uv));
v4_ = _e221 + _e224;
metal::float4 _e226 = v4_;
metal::float4 _e232 = texture_array_bounded[0].sample(samp[0], uv, metal::level(0.0));
v4_ = _e226 + _e232;
metal::float4 _e234 = v4_;
metal::float4 _e238 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::level(0.0));
v4_ = _e234 + _e238;
metal::float4 _e240 = v4_;
metal::float4 _e244 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::level(0.0));
v4_ = _e240 + _e244;
metal::float4 _e248 = v4_;
i1_ = _e128 + int(texture_array_bounded[uniform_index].get_num_mip_levels());
int _e133 = i1_;
i1_ = _e133 + int(texture_array_bounded[non_uniform_index].get_num_mip_levels());
int _e139 = i1_;
i1_ = _e139 + int(texture_array_multisampled[0].get_num_samples());
int _e144 = i1_;
i1_ = _e144 + int(texture_array_multisampled[uniform_index].get_num_samples());
int _e149 = i1_;
i1_ = _e149 + int(texture_array_multisampled[non_uniform_index].get_num_samples());
metal::float4 _e157 = texture_array_bounded[0].sample(samp[0], uv);
metal::float4 _e158 = v4_;
v4_ = _e158 + _e157;
metal::float4 _e164 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv);
metal::float4 _e165 = v4_;
v4_ = _e165 + _e164;
metal::float4 _e171 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv);
metal::float4 _e172 = v4_;
v4_ = _e172 + _e171;
metal::float4 _e181 = texture_array_bounded[0].sample(samp[0], uv, metal::bias(0.0));
metal::float4 _e182 = v4_;
v4_ = _e182 + _e181;
metal::float4 _e189 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::bias(0.0));
metal::float4 _e190 = v4_;
v4_ = _e190 + _e189;
metal::float4 _e197 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::bias(0.0));
metal::float4 _e198 = v4_;
v4_ = _e198 + _e197;
float _e207 = texture_array_depth[0].sample_compare(samp_comp[0], uv, 0.0);
float _e208 = v1_;
v1_ = _e208 + _e207;
float _e215 = texture_array_depth[uniform_index].sample_compare(samp_comp[uniform_index], uv, 0.0);
float _e216 = v1_;
v1_ = _e216 + _e215;
float _e223 = texture_array_depth[non_uniform_index].sample_compare(samp_comp[non_uniform_index], uv, 0.0);
float _e224 = v1_;
v1_ = _e224 + _e223;
float _e233 = texture_array_depth[0].sample_compare(samp_comp[0], uv, 0.0);
float _e234 = v1_;
v1_ = _e234 + _e233;
float _e241 = texture_array_depth[uniform_index].sample_compare(samp_comp[uniform_index], uv, 0.0);
float _e242 = v1_;
v1_ = _e242 + _e241;
float _e249 = texture_array_depth[non_uniform_index].sample_compare(samp_comp[non_uniform_index], uv, 0.0);
float _e250 = v1_;
v1_ = _e250 + _e249;
metal::float4 _e258 = texture_array_bounded[0].sample(samp[0], uv, metal::gradient2d(uv, uv));
metal::float4 _e259 = v4_;
v4_ = _e259 + _e258;
metal::float4 _e265 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::gradient2d(uv, uv));
metal::float4 _e266 = v4_;
v4_ = _e266 + _e265;
metal::float4 _e272 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::gradient2d(uv, uv));
metal::float4 _e273 = v4_;
v4_ = _e273 + _e272;
metal::float4 _e282 = texture_array_bounded[0].sample(samp[0], uv, metal::level(0.0));
metal::float4 _e283 = v4_;
v4_ = _e283 + _e282;
metal::float4 _e290 = texture_array_bounded[uniform_index].sample(samp[uniform_index], uv, metal::level(0.0));
metal::float4 _e291 = v4_;
v4_ = _e291 + _e290;
metal::float4 _e298 = texture_array_bounded[non_uniform_index].sample(samp[non_uniform_index], uv, metal::level(0.0));
metal::float4 _e299 = v4_;
v4_ = _e299 + _e298;
metal::float4 _e304 = v4_;
if (metal::all(metal::uint2(pix) < metal::uint2(texture_array_storage[0].get_width(), texture_array_storage[0].get_height()))) {
texture_array_storage[0].write(_e248, metal::uint2(pix));
texture_array_storage[0].write(_e304, metal::uint2(pix));
}
metal::float4 _e250 = v4_;
metal::float4 _e307 = v4_;
if (metal::all(metal::uint2(pix) < metal::uint2(texture_array_storage[uniform_index].get_width(), texture_array_storage[uniform_index].get_height()))) {
texture_array_storage[uniform_index].write(_e250, metal::uint2(pix));
texture_array_storage[uniform_index].write(_e307, metal::uint2(pix));
}
metal::float4 _e252 = v4_;
metal::float4 _e310 = v4_;
if (metal::all(metal::uint2(pix) < metal::uint2(texture_array_storage[non_uniform_index].get_width(), texture_array_storage[non_uniform_index].get_height()))) {
texture_array_storage[non_uniform_index].write(_e252, metal::uint2(pix));
texture_array_storage[non_uniform_index].write(_e310, metal::uint2(pix));
}
metal::int2 _e253 = i2_;
int _e254 = i1_;
metal::float2 v2_ = static_cast<metal::float2>(_e253 + metal::int2(_e254));
metal::float4 _e258 = v4_;
float _e265 = v1_;
return main_Output { (_e258 + metal::float4(v2_.x, v2_.y, v2_.x, v2_.y)) + metal::float4(_e265) };
metal::int2 _e311 = i2_;
int _e312 = i1_;
metal::float2 v2_ = static_cast<metal::float2>(_e311 + metal::int2(_e312));
metal::float4 _e316 = v4_;
float _e323 = v1_;
return main_Output { (_e316 + metal::float4(v2_.x, v2_.y, v2_.x, v2_.y)) + metal::float4(_e323) };
}

View File

@ -7,19 +7,21 @@ using metal::uint;
kernel void main_(
) {
int i = 0;
int i = {};
metal::int2 i2_ = {};
metal::int3 i3_ = {};
metal::int4 i4_ = {};
uint u = 0u;
uint u = {};
metal::uint2 u2_ = {};
metal::uint3 u3_ = {};
metal::uint4 u4_ = {};
metal::float2 f2_ = {};
metal::float4 f4_ = {};
i = 0;
i2_ = metal::int2(0);
i3_ = metal::int3(0);
i4_ = metal::int4(0);
u = 0u;
u2_ = metal::uint2(0u);
u3_ = metal::uint3(0u);
u4_ = metal::uint4(0u);

View File

@ -42,120 +42,123 @@ kernel void main_(
metal::float2 cMass = {};
metal::float2 cVel = {};
metal::float2 colVel = {};
int cMassCount = 0;
int cVelCount = 0;
int cMassCount = {};
int cVelCount = {};
metal::float2 pos = {};
metal::float2 vel = {};
uint i = 0u;
uint i = {};
uint index = global_invocation_id.x;
if (index >= NUM_PARTICLES) {
return;
}
metal::float2 _e10 = particlesSrc.particles[index].pos;
vPos = _e10;
metal::float2 _e15 = particlesSrc.particles[index].vel;
vVel = _e15;
metal::float2 _e8 = particlesSrc.particles[index].pos;
vPos = _e8;
metal::float2 _e14 = particlesSrc.particles[index].vel;
vVel = _e14;
cMass = metal::float2(0.0, 0.0);
cVel = metal::float2(0.0, 0.0);
colVel = metal::float2(0.0, 0.0);
cMassCount = 0;
cVelCount = 0;
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _e86 = i;
i = _e86 + 1u;
uint _e91 = i;
i = _e91 + 1u;
}
loop_init = false;
uint _e37 = i;
if (_e37 >= NUM_PARTICLES) {
uint _e36 = i;
if (_e36 >= NUM_PARTICLES) {
break;
}
uint _e39 = i;
if (_e39 == index) {
continue;
}
uint _e42 = i;
metal::float2 _e45 = particlesSrc.particles[_e42].pos;
pos = _e45;
uint _e47 = i;
metal::float2 _e50 = particlesSrc.particles[_e47].vel;
vel = _e50;
metal::float2 _e51 = pos;
metal::float2 _e52 = vPos;
float _e55 = params.rule1Distance;
if (metal::distance(_e51, _e52) < _e55) {
metal::float2 _e57 = cMass;
metal::float2 _e58 = pos;
cMass = _e57 + _e58;
int _e60 = cMassCount;
cMassCount = _e60 + 1;
uint _e43 = i;
metal::float2 _e46 = particlesSrc.particles[_e43].pos;
pos = _e46;
uint _e49 = i;
metal::float2 _e52 = particlesSrc.particles[_e49].vel;
vel = _e52;
metal::float2 _e53 = pos;
metal::float2 _e54 = vPos;
float _e58 = params.rule1Distance;
if (metal::distance(_e53, _e54) < _e58) {
metal::float2 _e60 = cMass;
metal::float2 _e61 = pos;
cMass = _e60 + _e61;
int _e63 = cMassCount;
cMassCount = _e63 + 1;
}
metal::float2 _e63 = pos;
metal::float2 _e64 = vPos;
float _e67 = params.rule2Distance;
if (metal::distance(_e63, _e64) < _e67) {
metal::float2 _e69 = colVel;
metal::float2 _e70 = pos;
metal::float2 _e71 = vPos;
colVel = _e69 - (_e70 - _e71);
metal::float2 _e66 = pos;
metal::float2 _e67 = vPos;
float _e71 = params.rule2Distance;
if (metal::distance(_e66, _e67) < _e71) {
metal::float2 _e73 = colVel;
metal::float2 _e74 = pos;
metal::float2 _e75 = vPos;
colVel = _e73 - (_e74 - _e75);
}
metal::float2 _e74 = pos;
metal::float2 _e75 = vPos;
float _e78 = params.rule3Distance;
if (metal::distance(_e74, _e75) < _e78) {
metal::float2 _e80 = cVel;
metal::float2 _e81 = vel;
cVel = _e80 + _e81;
int _e83 = cVelCount;
cVelCount = _e83 + 1;
metal::float2 _e78 = pos;
metal::float2 _e79 = vPos;
float _e83 = params.rule3Distance;
if (metal::distance(_e78, _e79) < _e83) {
metal::float2 _e85 = cVel;
metal::float2 _e86 = vel;
cVel = _e85 + _e86;
int _e88 = cVelCount;
cVelCount = _e88 + 1;
}
}
int _e89 = cMassCount;
if (_e89 > 0) {
metal::float2 _e92 = cMass;
int _e93 = cMassCount;
metal::float2 _e97 = vPos;
cMass = (_e92 / metal::float2(static_cast<float>(_e93))) - _e97;
int _e94 = cMassCount;
if (_e94 > 0) {
metal::float2 _e97 = cMass;
int _e98 = cMassCount;
metal::float2 _e102 = vPos;
cMass = (_e97 / metal::float2(static_cast<float>(_e98))) - _e102;
}
int _e99 = cVelCount;
if (_e99 > 0) {
metal::float2 _e102 = cVel;
int _e103 = cVelCount;
cVel = _e102 / metal::float2(static_cast<float>(_e103));
int _e104 = cVelCount;
if (_e104 > 0) {
metal::float2 _e107 = cVel;
int _e108 = cVelCount;
cVel = _e107 / metal::float2(static_cast<float>(_e108));
}
metal::float2 _e107 = vVel;
metal::float2 _e108 = cMass;
float _e110 = params.rule1Scale;
metal::float2 _e113 = colVel;
float _e115 = params.rule2Scale;
metal::float2 _e118 = cVel;
float _e120 = params.rule3Scale;
vVel = ((_e107 + (_e108 * _e110)) + (_e113 * _e115)) + (_e118 * _e120);
metal::float2 _e123 = vVel;
metal::float2 _e125 = vVel;
vVel = metal::normalize(_e123) * metal::clamp(metal::length(_e125), 0.0, 0.10000000149011612);
metal::float2 _e131 = vPos;
metal::float2 _e132 = vVel;
float _e134 = params.deltaT;
vPos = _e131 + (_e132 * _e134);
float _e138 = vPos.x;
if (_e138 < -1.0) {
metal::float2 _e112 = vVel;
metal::float2 _e113 = cMass;
float _e116 = params.rule1Scale;
metal::float2 _e119 = colVel;
float _e122 = params.rule2Scale;
metal::float2 _e125 = cVel;
float _e128 = params.rule3Scale;
vVel = ((_e112 + (_e113 * _e116)) + (_e119 * _e122)) + (_e125 * _e128);
metal::float2 _e131 = vVel;
metal::float2 _e133 = vVel;
vVel = metal::normalize(_e131) * metal::clamp(metal::length(_e133), 0.0, 0.10000000149011612);
metal::float2 _e139 = vPos;
metal::float2 _e140 = vVel;
float _e143 = params.deltaT;
vPos = _e139 + (_e140 * _e143);
float _e147 = vPos.x;
if (_e147 < -1.0) {
vPos.x = 1.0;
}
float _e144 = vPos.x;
if (_e144 > 1.0) {
float _e153 = vPos.x;
if (_e153 > 1.0) {
vPos.x = -1.0;
}
float _e150 = vPos.y;
if (_e150 < -1.0) {
float _e159 = vPos.y;
if (_e159 < -1.0) {
vPos.y = 1.0;
}
float _e156 = vPos.y;
if (_e156 > 1.0) {
float _e165 = vPos.y;
if (_e165 > 1.0) {
vPos.y = -1.0;
}
metal::float2 _e164 = vPos;
particlesDst.particles[index].pos = _e164;
metal::float2 _e168 = vVel;
particlesDst.particles[index].vel = _e168;
metal::float2 _e174 = vPos;
particlesDst.particles[index].pos = _e174;
metal::float2 _e179 = vVel;
particlesDst.particles[index].vel = _e179;
return;
}

View File

@ -22,9 +22,9 @@ metal::float4 test_textureLoad_2d(
int level_1,
metal::texture2d<float, metal::access::sample> image_2d
) {
uint clamped_lod_e4 = metal::min(uint(level_1), image_2d.get_num_mip_levels() - 1);
metal::float4 _e4 = image_2d.read(metal::min(metal::uint2(coords_1), metal::uint2(image_2d.get_width(clamped_lod_e4), image_2d.get_height(clamped_lod_e4)) - 1), clamped_lod_e4);
return _e4;
uint clamped_lod_e3 = metal::min(uint(level_1), image_2d.get_num_mip_levels() - 1);
metal::float4 _e3 = image_2d.read(metal::min(metal::uint2(coords_1), metal::uint2(image_2d.get_width(clamped_lod_e3), image_2d.get_height(clamped_lod_e3)) - 1), clamped_lod_e3);
return _e3;
}
metal::float4 test_textureLoad_2d_array(
@ -33,9 +33,9 @@ metal::float4 test_textureLoad_2d_array(
int level_2,
metal::texture2d_array<float, metal::access::sample> image_2d_array
) {
uint clamped_lod_e6 = metal::min(uint(level_2), image_2d_array.get_num_mip_levels() - 1);
metal::float4 _e6 = image_2d_array.read(metal::min(metal::uint2(coords_2), metal::uint2(image_2d_array.get_width(clamped_lod_e6), image_2d_array.get_height(clamped_lod_e6)) - 1), metal::min(uint(index), image_2d_array.get_array_size() - 1), clamped_lod_e6);
return _e6;
uint clamped_lod_e4 = metal::min(uint(level_2), image_2d_array.get_num_mip_levels() - 1);
metal::float4 _e4 = image_2d_array.read(metal::min(metal::uint2(coords_2), metal::uint2(image_2d_array.get_width(clamped_lod_e4), image_2d_array.get_height(clamped_lod_e4)) - 1), metal::min(uint(index), image_2d_array.get_array_size() - 1), clamped_lod_e4);
return _e4;
}
metal::float4 test_textureLoad_3d(
@ -43,9 +43,9 @@ metal::float4 test_textureLoad_3d(
int level_3,
metal::texture3d<float, metal::access::sample> image_3d
) {
uint clamped_lod_e6 = metal::min(uint(level_3), image_3d.get_num_mip_levels() - 1);
metal::float4 _e6 = image_3d.read(metal::min(metal::uint3(coords_3), metal::uint3(image_3d.get_width(clamped_lod_e6), image_3d.get_height(clamped_lod_e6), image_3d.get_depth(clamped_lod_e6)) - 1), clamped_lod_e6);
return _e6;
uint clamped_lod_e3 = metal::min(uint(level_3), image_3d.get_num_mip_levels() - 1);
metal::float4 _e3 = image_3d.read(metal::min(metal::uint3(coords_3), metal::uint3(image_3d.get_width(clamped_lod_e3), image_3d.get_height(clamped_lod_e3), image_3d.get_depth(clamped_lod_e3)) - 1), clamped_lod_e3);
return _e3;
}
metal::float4 test_textureLoad_multisampled_2d(
@ -53,8 +53,8 @@ metal::float4 test_textureLoad_multisampled_2d(
int _sample,
metal::texture2d_ms<float, metal::access::read> image_multisampled_2d
) {
metal::float4 _e7 = image_multisampled_2d.read(metal::min(metal::uint2(coords_4), metal::uint2(image_multisampled_2d.get_width(), image_multisampled_2d.get_height()) - 1), metal::min(uint(_sample), image_multisampled_2d.get_num_samples() - 1));
return _e7;
metal::float4 _e3 = image_multisampled_2d.read(metal::min(metal::uint2(coords_4), metal::uint2(image_multisampled_2d.get_width(), image_multisampled_2d.get_height()) - 1), metal::min(uint(_sample), image_multisampled_2d.get_num_samples() - 1));
return _e3;
}
float test_textureLoad_depth_2d(
@ -62,9 +62,9 @@ float test_textureLoad_depth_2d(
int level_4,
metal::depth2d<float, metal::access::sample> image_depth_2d
) {
uint clamped_lod_e8 = metal::min(uint(level_4), image_depth_2d.get_num_mip_levels() - 1);
float _e8 = image_depth_2d.read(metal::min(metal::uint2(coords_5), metal::uint2(image_depth_2d.get_width(clamped_lod_e8), image_depth_2d.get_height(clamped_lod_e8)) - 1), clamped_lod_e8);
return _e8;
uint clamped_lod_e3 = metal::min(uint(level_4), image_depth_2d.get_num_mip_levels() - 1);
float _e3 = image_depth_2d.read(metal::min(metal::uint2(coords_5), metal::uint2(image_depth_2d.get_width(clamped_lod_e3), image_depth_2d.get_height(clamped_lod_e3)) - 1), clamped_lod_e3);
return _e3;
}
float test_textureLoad_depth_2d_array(
@ -73,9 +73,9 @@ float test_textureLoad_depth_2d_array(
int level_5,
metal::depth2d_array<float, metal::access::sample> image_depth_2d_array
) {
uint clamped_lod_e10 = metal::min(uint(level_5), image_depth_2d_array.get_num_mip_levels() - 1);
float _e10 = image_depth_2d_array.read(metal::min(metal::uint2(coords_6), metal::uint2(image_depth_2d_array.get_width(clamped_lod_e10), image_depth_2d_array.get_height(clamped_lod_e10)) - 1), metal::min(uint(index_1), image_depth_2d_array.get_array_size() - 1), clamped_lod_e10);
return _e10;
uint clamped_lod_e4 = metal::min(uint(level_5), image_depth_2d_array.get_num_mip_levels() - 1);
float _e4 = image_depth_2d_array.read(metal::min(metal::uint2(coords_6), metal::uint2(image_depth_2d_array.get_width(clamped_lod_e4), image_depth_2d_array.get_height(clamped_lod_e4)) - 1), metal::min(uint(index_1), image_depth_2d_array.get_array_size() - 1), clamped_lod_e4);
return _e4;
}
float test_textureLoad_depth_multisampled_2d(
@ -83,8 +83,8 @@ float test_textureLoad_depth_multisampled_2d(
int _sample_1,
metal::depth2d_ms<float, metal::access::read> image_depth_multisampled_2d
) {
float _e10 = image_depth_multisampled_2d.read(metal::min(metal::uint2(coords_7), metal::uint2(image_depth_multisampled_2d.get_width(), image_depth_multisampled_2d.get_height()) - 1), metal::min(uint(_sample_1), image_depth_multisampled_2d.get_num_samples() - 1));
return _e10;
float _e3 = image_depth_multisampled_2d.read(metal::min(metal::uint2(coords_7), metal::uint2(image_depth_multisampled_2d.get_width(), image_depth_multisampled_2d.get_height()) - 1), metal::min(uint(_sample_1), image_depth_multisampled_2d.get_num_samples() - 1));
return _e3;
}
void test_textureStore_1d(
@ -138,11 +138,11 @@ fragment fragment_shaderOutput fragment_shader(
, metal::texture2d_array<float, metal::access::write> image_storage_2d_array [[user(fake0)]]
, metal::texture3d<float, metal::access::write> image_storage_3d [[user(fake0)]]
) {
metal::float4 _e14 = test_textureLoad_1d(0, 0, image_1d);
metal::float4 _e17 = test_textureLoad_2d(const_type_4_, 0, image_2d);
metal::float4 _e21 = test_textureLoad_2d_array(const_type_4_, 0, 0, image_2d_array);
metal::float4 _e24 = test_textureLoad_3d(const_type_7_, 0, image_3d);
metal::float4 _e27 = test_textureLoad_multisampled_2d(const_type_4_, 0, image_multisampled_2d);
metal::float4 _e2 = test_textureLoad_1d(0, 0, image_1d);
metal::float4 _e5 = test_textureLoad_2d(const_type_4_, 0, image_2d);
metal::float4 _e9 = test_textureLoad_2d_array(const_type_4_, 0, 0, image_2d_array);
metal::float4 _e12 = test_textureLoad_3d(const_type_7_, 0, image_3d);
metal::float4 _e15 = test_textureLoad_multisampled_2d(const_type_4_, 0, image_multisampled_2d);
test_textureStore_1d(0, const_type_2_, image_storage_1d);
test_textureStore_2d(const_type_4_, const_type_2_, image_storage_2d);
test_textureStore_2d_array(const_type_4_, 0, const_type_2_, image_storage_2d_array);

View File

@ -28,8 +28,8 @@ metal::float4 test_textureLoad_2d(
int level_1,
metal::texture2d<float, metal::access::sample> image_2d
) {
metal::float4 _e4 = (uint(level_1) < image_2d.get_num_mip_levels() && metal::all(metal::uint2(coords_1) < metal::uint2(image_2d.get_width(level_1), image_2d.get_height(level_1))) ? image_2d.read(metal::uint2(coords_1), level_1): DefaultConstructible());
return _e4;
metal::float4 _e3 = (uint(level_1) < image_2d.get_num_mip_levels() && metal::all(metal::uint2(coords_1) < metal::uint2(image_2d.get_width(level_1), image_2d.get_height(level_1))) ? image_2d.read(metal::uint2(coords_1), level_1): DefaultConstructible());
return _e3;
}
metal::float4 test_textureLoad_2d_array(
@ -38,8 +38,8 @@ metal::float4 test_textureLoad_2d_array(
int level_2,
metal::texture2d_array<float, metal::access::sample> image_2d_array
) {
metal::float4 _e6 = (uint(level_2) < image_2d_array.get_num_mip_levels() && uint(index) < image_2d_array.get_array_size() && metal::all(metal::uint2(coords_2) < metal::uint2(image_2d_array.get_width(level_2), image_2d_array.get_height(level_2))) ? image_2d_array.read(metal::uint2(coords_2), index, level_2): DefaultConstructible());
return _e6;
metal::float4 _e4 = (uint(level_2) < image_2d_array.get_num_mip_levels() && uint(index) < image_2d_array.get_array_size() && metal::all(metal::uint2(coords_2) < metal::uint2(image_2d_array.get_width(level_2), image_2d_array.get_height(level_2))) ? image_2d_array.read(metal::uint2(coords_2), index, level_2): DefaultConstructible());
return _e4;
}
metal::float4 test_textureLoad_3d(
@ -47,8 +47,8 @@ metal::float4 test_textureLoad_3d(
int level_3,
metal::texture3d<float, metal::access::sample> image_3d
) {
metal::float4 _e6 = (uint(level_3) < image_3d.get_num_mip_levels() && metal::all(metal::uint3(coords_3) < metal::uint3(image_3d.get_width(level_3), image_3d.get_height(level_3), image_3d.get_depth(level_3))) ? image_3d.read(metal::uint3(coords_3), level_3): DefaultConstructible());
return _e6;
metal::float4 _e3 = (uint(level_3) < image_3d.get_num_mip_levels() && metal::all(metal::uint3(coords_3) < metal::uint3(image_3d.get_width(level_3), image_3d.get_height(level_3), image_3d.get_depth(level_3))) ? image_3d.read(metal::uint3(coords_3), level_3): DefaultConstructible());
return _e3;
}
metal::float4 test_textureLoad_multisampled_2d(
@ -56,8 +56,8 @@ metal::float4 test_textureLoad_multisampled_2d(
int _sample,
metal::texture2d_ms<float, metal::access::read> image_multisampled_2d
) {
metal::float4 _e7 = (uint(_sample) < image_multisampled_2d.get_num_samples() && metal::all(metal::uint2(coords_4) < metal::uint2(image_multisampled_2d.get_width(), image_multisampled_2d.get_height())) ? image_multisampled_2d.read(metal::uint2(coords_4), _sample): DefaultConstructible());
return _e7;
metal::float4 _e3 = (uint(_sample) < image_multisampled_2d.get_num_samples() && metal::all(metal::uint2(coords_4) < metal::uint2(image_multisampled_2d.get_width(), image_multisampled_2d.get_height())) ? image_multisampled_2d.read(metal::uint2(coords_4), _sample): DefaultConstructible());
return _e3;
}
float test_textureLoad_depth_2d(
@ -65,8 +65,8 @@ float test_textureLoad_depth_2d(
int level_4,
metal::depth2d<float, metal::access::sample> image_depth_2d
) {
float _e8 = (uint(level_4) < image_depth_2d.get_num_mip_levels() && metal::all(metal::uint2(coords_5) < metal::uint2(image_depth_2d.get_width(level_4), image_depth_2d.get_height(level_4))) ? image_depth_2d.read(metal::uint2(coords_5), level_4): DefaultConstructible());
return _e8;
float _e3 = (uint(level_4) < image_depth_2d.get_num_mip_levels() && metal::all(metal::uint2(coords_5) < metal::uint2(image_depth_2d.get_width(level_4), image_depth_2d.get_height(level_4))) ? image_depth_2d.read(metal::uint2(coords_5), level_4): DefaultConstructible());
return _e3;
}
float test_textureLoad_depth_2d_array(
@ -75,8 +75,8 @@ float test_textureLoad_depth_2d_array(
int level_5,
metal::depth2d_array<float, metal::access::sample> image_depth_2d_array
) {
float _e10 = (uint(level_5) < image_depth_2d_array.get_num_mip_levels() && uint(index_1) < image_depth_2d_array.get_array_size() && metal::all(metal::uint2(coords_6) < metal::uint2(image_depth_2d_array.get_width(level_5), image_depth_2d_array.get_height(level_5))) ? image_depth_2d_array.read(metal::uint2(coords_6), index_1, level_5): DefaultConstructible());
return _e10;
float _e4 = (uint(level_5) < image_depth_2d_array.get_num_mip_levels() && uint(index_1) < image_depth_2d_array.get_array_size() && metal::all(metal::uint2(coords_6) < metal::uint2(image_depth_2d_array.get_width(level_5), image_depth_2d_array.get_height(level_5))) ? image_depth_2d_array.read(metal::uint2(coords_6), index_1, level_5): DefaultConstructible());
return _e4;
}
float test_textureLoad_depth_multisampled_2d(
@ -84,8 +84,8 @@ float test_textureLoad_depth_multisampled_2d(
int _sample_1,
metal::depth2d_ms<float, metal::access::read> image_depth_multisampled_2d
) {
float _e10 = (uint(_sample_1) < image_depth_multisampled_2d.get_num_samples() && metal::all(metal::uint2(coords_7) < metal::uint2(image_depth_multisampled_2d.get_width(), image_depth_multisampled_2d.get_height())) ? image_depth_multisampled_2d.read(metal::uint2(coords_7), _sample_1): DefaultConstructible());
return _e10;
float _e3 = (uint(_sample_1) < image_depth_multisampled_2d.get_num_samples() && metal::all(metal::uint2(coords_7) < metal::uint2(image_depth_multisampled_2d.get_width(), image_depth_multisampled_2d.get_height())) ? image_depth_multisampled_2d.read(metal::uint2(coords_7), _sample_1): DefaultConstructible());
return _e3;
}
void test_textureStore_1d(
@ -147,11 +147,11 @@ fragment fragment_shaderOutput fragment_shader(
, metal::texture2d_array<float, metal::access::write> image_storage_2d_array [[user(fake0)]]
, metal::texture3d<float, metal::access::write> image_storage_3d [[user(fake0)]]
) {
metal::float4 _e14 = test_textureLoad_1d(0, 0, image_1d);
metal::float4 _e17 = test_textureLoad_2d(const_type_4_, 0, image_2d);
metal::float4 _e21 = test_textureLoad_2d_array(const_type_4_, 0, 0, image_2d_array);
metal::float4 _e24 = test_textureLoad_3d(const_type_7_, 0, image_3d);
metal::float4 _e27 = test_textureLoad_multisampled_2d(const_type_4_, 0, image_multisampled_2d);
metal::float4 _e2 = test_textureLoad_1d(0, 0, image_1d);
metal::float4 _e5 = test_textureLoad_2d(const_type_4_, 0, image_2d);
metal::float4 _e9 = test_textureLoad_2d_array(const_type_4_, 0, 0, image_2d_array);
metal::float4 _e12 = test_textureLoad_3d(const_type_7_, 0, image_3d);
metal::float4 _e15 = test_textureLoad_multisampled_2d(const_type_4_, 0, image_multisampled_2d);
test_textureStore_1d(0, const_type_2_, image_storage_1d);
test_textureStore_2d(const_type_4_, const_type_2_, image_storage_2d);
test_textureStore_2d_array(const_type_4_, 0, const_type_2_, image_storage_2d_array);

View File

@ -87,9 +87,9 @@ float index_in_bounds(
constant _mslBufferSizes& _buffer_sizes
) {
float _e4 = globals.a.inner[9];
float _e8 = globals.v.w;
float _e15 = globals.m[2].w;
return (_e4 + _e8) + _e15;
float _e9 = globals.v.w;
float _e17 = globals.m[2].w;
return (_e4 + _e9) + _e17;
}
void set_array(

View File

@ -94,9 +94,9 @@ float index_in_bounds(
constant _mslBufferSizes& _buffer_sizes
) {
float _e4 = globals.a.inner[9];
float _e8 = globals.v.w;
float _e15 = globals.m[2].w;
return (_e4 + _e8) + _e15;
float _e9 = globals.v.w;
float _e17 = globals.m[2].w;
return (_e4 + _e9) + _e17;
}
void set_array(

View File

@ -17,27 +17,30 @@ uint collatz_iterations(
uint n_base
) {
uint n = {};
uint i = 0u;
uint i = {};
n = n_base;
i = 0u;
while(true) {
uint _e5 = n;
if (_e5 > 1u) {
uint _e4 = n;
if (_e4 > 1u) {
} else {
break;
}
uint _e8 = n;
if ((_e8 % 2u) == 0u) {
uint _e13 = n;
n = _e13 / 2u;
} else {
uint _e17 = n;
n = (3u * _e17) + 1u;
{
uint _e7 = n;
if ((_e7 % 2u) == 0u) {
uint _e12 = n;
n = _e12 / 2u;
} else {
uint _e16 = n;
n = (3u * _e16) + 1u;
}
uint _e20 = i;
i = _e20 + 1u;
}
uint _e21 = i;
i = _e21 + 1u;
}
uint _e24 = i;
return _e24;
uint _e23 = i;
return _e23;
}
struct main_Input {
@ -47,8 +50,8 @@ kernel void main_(
, device PrimeIndices& v_indices [[user(fake0)]]
, constant _mslBufferSizes& _buffer_sizes [[user(fake0)]]
) {
uint _e8 = v_indices.data[global_id.x];
uint _e9 = collatz_iterations(_e8);
v_indices.data[global_id.x] = _e9;
uint _e9 = v_indices.data[global_id.x];
uint _e10 = collatz_iterations(_e9);
v_indices.data[global_id.x] = _e10;
return;
}

View File

@ -8,11 +8,11 @@ struct _mslBufferSizes {
uint size3;
};
constexpr constant bool Foo_2 = true;
constexpr constant bool Foo_1 = true;
struct type_2 {
float inner[10u];
};
struct Foo {
struct FooStruct {
metal::packed_float3 v3_;
float v1_;
};
@ -42,15 +42,16 @@ void test_msl_packed_vec3_as_arg(
}
void test_msl_packed_vec3_(
device Foo& alignment
device FooStruct& alignment
) {
int idx = 1;
int idx = {};
alignment.v3_ = metal::float3(1.0);
idx = 1;
alignment.v3_[0] = 1.0;
alignment.v3_[0] = 2.0;
int _e23 = idx;
alignment.v3_[_e23] = 3.0;
Foo data = alignment;
int _e17 = idx;
alignment.v3_[_e17] = 3.0;
FooStruct data = alignment;
metal::float3 unnamed = data.v3_;
metal::float2 unnamed_1 = metal::float3(data.v3_).zx;
test_msl_packed_vec3_as_arg(data.v3_);
@ -63,7 +64,7 @@ void test_msl_packed_vec3_(
kernel void main_(
threadgroup type_2& wg
, threadgroup metal::atomic_uint& at_1
, device Foo& alignment [[user(fake0)]]
, device FooStruct& alignment [[user(fake0)]]
, device type_6 const& dummy [[user(fake0)]]
, constant type_8& float_vecs [[user(fake0)]]
, constant metal::float3& global_vec [[user(fake0)]]
@ -72,25 +73,27 @@ kernel void main_(
, constant type_15& global_nested_arrays_of_matrices_4x2_ [[user(fake0)]]
, constant _mslBufferSizes& _buffer_sizes [[user(fake0)]]
) {
float Foo_1 = 1.0;
bool at = true;
float Foo = {};
bool at = {};
test_msl_packed_vec3_(alignment);
metal::float4x2 _e16 = global_nested_arrays_of_matrices_4x2_.inner[0].inner[0];
metal::float4 _e23 = global_nested_arrays_of_matrices_2x4_.inner[0].inner[0][0];
wg.inner[7] = (_e16 * _e23).x;
metal::float3x2 _e28 = global_mat;
metal::float3 _e29 = global_vec;
wg.inner[6] = (_e28 * _e29).x;
float _e37 = dummy[1].y;
wg.inner[5] = _e37;
metal::float4x2 _e8 = global_nested_arrays_of_matrices_4x2_.inner[0].inner[0];
metal::float4 _e16 = global_nested_arrays_of_matrices_2x4_.inner[0].inner[0][0];
wg.inner[7] = (_e8 * _e16).x;
metal::float3x2 _e23 = global_mat;
metal::float3 _e25 = global_vec;
wg.inner[6] = (_e23 * _e25).x;
float _e35 = dummy[1].y;
wg.inner[5] = _e35;
float _e43 = float_vecs.inner[0].w;
wg.inner[4] = _e43;
float _e47 = alignment.v1_;
wg.inner[3] = _e47;
float _e52 = alignment.v3_[0];
wg.inner[2] = _e52;
float _e49 = alignment.v1_;
wg.inner[3] = _e49;
float _e56 = alignment.v3_[0];
wg.inner[2] = _e56;
alignment.v1_ = 4.0;
wg.inner[1] = static_cast<float>(1 + (_buffer_sizes.size3 - 0 - 8) / 8);
metal::atomic_store_explicit(&at_1, 2u, metal::memory_order_relaxed);
Foo = 1.0;
at = true;
return;
}

View File

@ -93,7 +93,8 @@ vertex vertex_two_structsOutput vertex_two_structs(
) {
const Input1_ in1_ = { index_1 };
const Input2_ in2_ = { index_2 };
uint index = 2u;
uint _e9 = index;
return vertex_two_structsOutput { metal::float4(static_cast<float>(in1_.index), static_cast<float>(in2_.index), static_cast<float>(_e9), 0.0), 1.0 };
uint index = {};
index = 2u;
uint _e8 = index;
return vertex_two_structsOutput { metal::float4(static_cast<float>(in1_.index), static_cast<float>(in2_.index), static_cast<float>(_e8), 0.0), 1.0 };
}

View File

@ -4,7 +4,7 @@
using metal::uint;
constant metal::int2 const_type = {0, 0};
constant metal::int2 const_type_1_ = {0, 0};
vertex void main_(
) {
@ -14,6 +14,6 @@ vertex void main_(
metal::float4 c = ((v) * 57.295779513082322865);
metal::float4 d = ((v) * 0.017453292519943295474);
metal::float4 e = metal::saturate(v);
int const_dot = ( + const_type.x * const_type.x + const_type.y * const_type.y);
int const_dot = ( + const_type_1_.x * const_type_1_.x + const_type_1_.y * const_type_1_.y);
uint first_leading_bit_abs = (((metal::clz(metal::abs(0u)) + 1) % 33) - 1);
}

View File

@ -8,28 +8,28 @@ struct Foo {
metal::float4 a;
int b;
};
struct type_12 {
struct type_13 {
Foo inner[3];
};
struct type_13 {
struct type_14 {
int inner[4u];
};
constant metal::float4 v_f32_one = {1.0, 1.0, 1.0, 1.0};
constant metal::float4 v_f32_zero = {0.0, 0.0, 0.0, 0.0};
constant metal::float4 v_f32_half = {0.5, 0.5, 0.5, 0.5};
constant metal::int4 v_i32_one = {1, 1, 1, 1};
constant metal::uint2 const_type_11_ = {0u, 0u};
constant metal::uint2 const_type_12_ = {0u, 0u};
constant metal::float2 const_type_4_ = {0.0, 0.0};
constant metal::float2x2 const_type_7_ = {const_type_4_, const_type_4_};
constant metal::float2x2 const_type_8_ = {const_type_4_, const_type_4_};
constant metal::float4 const_type = {0.0, 0.0, 0.0, 0.0};
constant Foo const_Foo = {const_type, 0};
constant type_12 const_type_12_ = {const_Foo, const_Foo, const_Foo};
constant type_13 const_type_13_ = {const_Foo, const_Foo, const_Foo};
constant metal::float3 const_type_5_ = {0.0, 0.0, 0.0};
constant metal::float2x3 const_type_14_ = {const_type_5_, const_type_5_};
constant metal::float3x3 const_type_15_ = {const_type_5_, const_type_5_, const_type_5_};
constant metal::float4x3 const_type_16_ = {const_type_5_, const_type_5_, const_type_5_, const_type_5_};
constant metal::float3x4 const_type_17_ = {const_type, const_type, const_type};
constant metal::int3 const_type_18_ = {0, 0, 0};
constant metal::float2x3 const_type_15_ = {const_type_5_, const_type_5_};
constant metal::float3x3 const_type_16_ = {const_type_5_, const_type_5_, const_type_5_};
constant metal::float4x3 const_type_17_ = {const_type_5_, const_type_5_, const_type_5_, const_type_5_};
constant metal::float3x4 const_type_18_ = {const_type, const_type, const_type};
constant metal::int3 const_type_19_ = {0, 0, 0};
metal::float4 builtins(
) {
@ -55,14 +55,14 @@ metal::float2 splat_assignment(
) {
metal::float2 a = {};
a = metal::float2(2.0);
metal::float2 _e7 = a;
a = _e7 + metal::float2(1.0);
metal::float2 _e11 = a;
a = _e11 - metal::float2(3.0);
metal::float2 _e4 = a;
a = _e4 + metal::float2(1.0);
metal::float2 _e8 = a;
a = _e8 - metal::float2(3.0);
metal::float2 _e12 = a;
a = _e12 / metal::float2(4.0);
metal::float2 _e15 = a;
a = _e15 / metal::float2(4.0);
metal::float2 _e19 = a;
return _e19;
return _e15;
}
metal::float3 bool_cast(
@ -80,17 +80,17 @@ float constructors(
metal::float4x4 mat4comp = metal::float4x4(metal::float4(1.0, 0.0, 0.0, 0.0), metal::float4(0.0, 1.0, 0.0, 0.0), metal::float4(0.0, 0.0, 1.0, 0.0), metal::float4(0.0, 0.0, 0.0, 1.0));
metal::uint2 unnamed = metal::uint2(0u);
metal::float2x2 unnamed_1 = metal::float2x2(metal::float2(0.0), metal::float2(0.0));
type_13 unnamed_2 = type_13 {0, 1, 2, 3};
type_14 unnamed_2 = type_14 {0, 1, 2, 3};
bool unnamed_3 = static_cast<bool>(false);
int unnamed_4 = static_cast<int>(0);
uint unnamed_5 = static_cast<uint>(0u);
float unnamed_6 = static_cast<float>(0.0);
metal::uint2 unnamed_7 = static_cast<metal::uint2>(const_type_11_);
metal::float2x3 unnamed_8 = metal::float2x3(const_type_14_);
metal::uint2 unnamed_9 = as_type<metal::uint2>(const_type_11_);
metal::float2x3 unnamed_10 = metal::float2x3(const_type_14_);
float _e75 = foo.a.x;
return _e75;
metal::uint2 unnamed_7 = static_cast<metal::uint2>(const_type_12_);
metal::float2x3 unnamed_8 = metal::float2x3(const_type_15_);
metal::uint2 unnamed_9 = as_type<metal::uint2>(const_type_12_);
metal::float2x3 unnamed_10 = metal::float2x3(const_type_15_);
float _e71 = foo.a.x;
return _e71;
}
void logical(
@ -169,13 +169,13 @@ void arithmetic(
metal::uint2 unnamed_78 = metal::uint2(2u) % metal::uint2(1u);
metal::float2 unnamed_79 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
metal::float2 unnamed_80 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
metal::float3x3 unnamed_81 = const_type_15_ + const_type_15_;
metal::float3x3 unnamed_82 = const_type_15_ - const_type_15_;
metal::float3x3 unnamed_83 = const_type_15_ * 1.0;
metal::float3x3 unnamed_84 = 2.0 * const_type_15_;
metal::float3 unnamed_85 = const_type_16_ * metal::float4(1.0);
metal::float4 unnamed_86 = metal::float3(2.0) * const_type_16_;
metal::float3x3 unnamed_87 = const_type_16_ * const_type_17_;
metal::float3x3 unnamed_81 = const_type_16_ + const_type_16_;
metal::float3x3 unnamed_82 = const_type_16_ - const_type_16_;
metal::float3x3 unnamed_83 = const_type_16_ * 1.0;
metal::float3x3 unnamed_84 = 2.0 * const_type_16_;
metal::float3 unnamed_85 = const_type_17_ * metal::float4(1.0);
metal::float4 unnamed_86 = metal::float3(2.0) * const_type_17_;
metal::float3x3 unnamed_87 = const_type_17_ * const_type_18_;
}
void bit(
@ -248,38 +248,40 @@ void comparison(
void assignment(
) {
int a_1 = 1;
metal::int3 vec0_ = const_type_18_;
int a_1 = {};
metal::int3 vec0_ = {};
a_1 = 1;
int _e3 = a_1;
a_1 = _e3 + 1;
int _e6 = a_1;
a_1 = _e6 + 1;
a_1 = _e6 - 1;
int _e8 = a_1;
int _e9 = a_1;
a_1 = _e9 - 1;
a_1 = _e9 * _e8;
int _e11 = a_1;
int _e12 = a_1;
int _e13 = a_1;
a_1 = _e12 * _e13;
a_1 = _e12 / _e11;
int _e15 = a_1;
int _e16 = a_1;
a_1 = _e15 / _e16;
a_1 = _e15 % 1;
int _e18 = a_1;
a_1 = _e18 % 1;
a_1 = _e18 & 0;
int _e21 = a_1;
a_1 = _e21 & 0;
a_1 = _e21 | 0;
int _e24 = a_1;
a_1 = _e24 | 0;
a_1 = _e24 ^ 0;
int _e27 = a_1;
a_1 = _e27 ^ 0;
a_1 = _e27 << 2u;
int _e30 = a_1;
a_1 = _e30 << 2u;
int _e33 = a_1;
a_1 = _e33 >> 1u;
int _e36 = a_1;
a_1 = _e36 + 1;
int _e39 = a_1;
a_1 = _e39 - 1;
int _e46 = vec0_.y;
vec0_.y = _e46 + 1;
int _e51 = vec0_.y;
vec0_.y = _e51 - 1;
a_1 = _e30 >> 1u;
int _e32 = a_1;
a_1 = _e32 + 1;
int _e35 = a_1;
a_1 = _e35 - 1;
vec0_ = const_type_19_;
int _e42 = vec0_.y;
vec0_.y = _e42 + 1;
int _e47 = vec0_.y;
vec0_.y = _e47 - 1;
return;
}
@ -296,10 +298,10 @@ void negation_avoids_prefix_decrement(
kernel void main_(
) {
metal::float4 _e4 = builtins();
metal::float4 _e5 = splat();
metal::float3 _e7 = bool_cast(v_f32_one.xyz);
float _e8 = constructors();
metal::float4 _e0 = builtins();
metal::float4 _e1 = splat();
metal::float3 _e4 = bool_cast(v_f32_one.xyz);
float _e5 = constructors();
logical();
arithmetic();
bit();

View File

@ -31,8 +31,8 @@ vertex vertex_Output vertex_(
, constant Test2_& input2_ [[buffer(1)]]
, constant Test3_& input3_ [[buffer(2)]]
) {
float _e6 = input1_.b;
float _e9 = input2_.b;
float _e4 = input1_.b;
float _e8 = input2_.b;
float _e12 = input3_.b;
return vertex_Output { ((metal::float4(1.0) * _e6) * _e9) * _e12 };
return vertex_Output { ((metal::float4(1.0) * _e4) * _e8) * _e12 };
}

View File

@ -44,11 +44,11 @@ metal::float4 mock_function(
) {
type_9 in_function = {};
for(int _i=0; _i<2; ++_i) in_function.inner[_i] = type_9 {metal::float4(0.7070000171661377, 0.0, 0.0, 1.0), metal::float4(0.0, 0.7070000171661377, 0.0, 1.0)}.inner[_i];
metal::float4 _e22 = in_storage.a.inner[i];
metal::float4 _e25 = in_uniform.a.inner[i];
metal::float4 _e27 = (uint(l) < image_2d_array.get_num_mip_levels() && uint(i) < image_2d_array.get_array_size() && metal::all(metal::uint2(c) < metal::uint2(image_2d_array.get_width(l), image_2d_array.get_height(l))) ? image_2d_array.read(metal::uint2(c), i, l): DefaultConstructible());
float _e30 = in_workgroup.inner[metal::min(unsigned(i), 29u)];
metal::float4 _e18 = in_storage.a.inner[i];
metal::float4 _e22 = in_uniform.a.inner[i];
metal::float4 _e25 = (uint(l) < image_2d_array.get_num_mip_levels() && uint(i) < image_2d_array.get_array_size() && metal::all(metal::uint2(c) < metal::uint2(image_2d_array.get_width(l), image_2d_array.get_height(l))) ? image_2d_array.read(metal::uint2(c), i, l): DefaultConstructible());
float _e29 = in_workgroup.inner[metal::min(unsigned(i), 29u)];
float _e34 = in_private.inner[metal::min(unsigned(i), 39u)];
metal::float4 _e38 = in_function.inner[metal::min(unsigned(i), 1u)];
return ((((_e22 + _e25) + _e27) + metal::float4(_e30)) + metal::float4(_e34)) + _e38;
return ((((_e18 + _e22) + _e25) + metal::float4(_e29)) + metal::float4(_e34)) + _e38;
}

View File

@ -45,8 +45,8 @@ float fetch_shadow(
metal::float2 flip_correction = metal::float2(0.5, -0.5);
float proj_correction = 1.0 / homogeneous_coords.w;
metal::float2 light_local = ((homogeneous_coords.xy * flip_correction) * proj_correction) + metal::float2(0.5, 0.5);
float _e28 = t_shadow.sample_compare(sampler_shadow, light_local, static_cast<int>(light_id), homogeneous_coords.z * proj_correction);
return _e28;
float _e24 = t_shadow.sample_compare(sampler_shadow, light_local, static_cast<int>(light_id), homogeneous_coords.z * proj_correction);
return _e24;
}
struct vs_mainInput {
@ -71,10 +71,10 @@ vertex vs_mainOutput vs_main(
metal::float4 world_pos = _e7 * static_cast<metal::float4>(position);
out.world_normal = metal::float3x3(w[0].xyz, w[1].xyz, w[2].xyz) * static_cast<metal::float3>(normal.xyz);
out.world_position = world_pos;
metal::float4x4 _e25 = u_globals.view_proj;
out.proj_position = _e25 * world_pos;
VertexOutput _e27 = out;
const auto _tmp = _e27;
metal::float4x4 _e26 = u_globals.view_proj;
out.proj_position = _e26 * world_pos;
VertexOutput _e28 = out;
const auto _tmp = _e28;
return vs_mainOutput { _tmp.proj_position, _tmp.world_normal, _tmp.world_position };
}
@ -97,34 +97,38 @@ fragment fs_mainOutput fs_main(
, constant _mslBufferSizes& _buffer_sizes [[user(fake0)]]
) {
const VertexOutput in = { proj_position, varyings_1.world_normal, varyings_1.world_position };
metal::float3 color = c_ambient;
uint i = 0u;
metal::float3 color = {};
uint i = {};
metal::float3 normal_1 = metal::normalize(in.world_normal);
color = c_ambient;
i = 0u;
bool loop_init = true;
while(true) {
if (!loop_init) {
uint _e20 = i;
i = _e20 + 1u;
uint _e39 = i;
i = _e39 + 1u;
}
loop_init = false;
uint _e14 = i;
uint _e17 = u_globals.num_lights.x;
if (_e14 < metal::min(_e17, c_max_lights)) {
uint _e7 = i;
uint _e11 = u_globals.num_lights.x;
if (_e7 < metal::min(_e11, c_max_lights)) {
} else {
break;
}
uint _e23 = i;
Light light = s_lights[_e23];
uint _e26 = i;
float _e30 = fetch_shadow(_e26, light.proj * in.world_position, t_shadow, sampler_shadow);
metal::float3 light_dir = metal::normalize(light.pos.xyz - in.world_position.xyz);
float diffuse = metal::max(0.0, metal::dot(normal_1, light_dir));
metal::float3 _e40 = color;
color = _e40 + ((_e30 * diffuse) * light.color.xyz);
{
uint _e16 = i;
Light light = s_lights[_e16];
uint _e19 = i;
float _e23 = fetch_shadow(_e19, light.proj * in.world_position, t_shadow, sampler_shadow);
metal::float3 light_dir = metal::normalize(light.pos.xyz - in.world_position.xyz);
float diffuse = metal::max(0.0, metal::dot(normal_1, light_dir));
metal::float3 _e37 = color;
color = _e37 + ((_e23 * diffuse) * light.color.xyz);
}
}
metal::float3 _e46 = color;
metal::float4 _e50 = u_entity.color;
return fs_mainOutput { metal::float4(_e46, 1.0) * _e50 };
metal::float3 _e42 = color;
metal::float4 _e47 = u_entity.color;
return fs_mainOutput { metal::float4(_e42, 1.0) * _e47 };
}
@ -145,32 +149,36 @@ fragment fs_main_without_storageOutput fs_main_without_storage(
, metal::sampler sampler_shadow [[user(fake0)]]
) {
const VertexOutput in_1 = { proj_position_1, varyings_2.world_normal, varyings_2.world_position };
metal::float3 color_1 = c_ambient;
uint i_1 = 0u;
metal::float3 color_1 = {};
uint i_1 = {};
metal::float3 normal_2 = metal::normalize(in_1.world_normal);
color_1 = c_ambient;
i_1 = 0u;
bool loop_init_1 = true;
while(true) {
if (!loop_init_1) {
uint _e20 = i_1;
i_1 = _e20 + 1u;
uint _e39 = i_1;
i_1 = _e39 + 1u;
}
loop_init_1 = false;
uint _e14 = i_1;
uint _e17 = u_globals.num_lights.x;
if (_e14 < metal::min(_e17, c_max_lights)) {
uint _e7 = i_1;
uint _e11 = u_globals.num_lights.x;
if (_e7 < metal::min(_e11, c_max_lights)) {
} else {
break;
}
uint _e23 = i_1;
Light light_1 = u_lights.inner[_e23];
uint _e26 = i_1;
float _e30 = fetch_shadow(_e26, light_1.proj * in_1.world_position, t_shadow, sampler_shadow);
metal::float3 light_dir_1 = metal::normalize(light_1.pos.xyz - in_1.world_position.xyz);
float diffuse_1 = metal::max(0.0, metal::dot(normal_2, light_dir_1));
metal::float3 _e40 = color_1;
color_1 = _e40 + ((_e30 * diffuse_1) * light_1.color.xyz);
{
uint _e16 = i_1;
Light light_1 = u_lights.inner[_e16];
uint _e19 = i_1;
float _e23 = fetch_shadow(_e19, light_1.proj * in_1.world_position, t_shadow, sampler_shadow);
metal::float3 light_dir_1 = metal::normalize(light_1.pos.xyz - in_1.world_position.xyz);
float diffuse_1 = metal::max(0.0, metal::dot(normal_2, light_dir_1));
metal::float3 _e37 = color_1;
color_1 = _e37 + ((_e23 * diffuse_1) * light_1.color.xyz);
}
}
metal::float3 _e46 = color_1;
metal::float4 _e50 = u_entity.color;
return fs_main_without_storageOutput { metal::float4(_e46, 1.0) * _e50 };
metal::float3 _e42 = color_1;
metal::float4 _e47 = u_entity.color;
return fs_main_without_storageOutput { metal::float4(_e42, 1.0) * _e47 };
}

View File

@ -27,15 +27,15 @@ vertex vs_mainOutput vs_main(
int tmp2_ = {};
tmp1_ = static_cast<int>(vertex_index) / 2;
tmp2_ = static_cast<int>(vertex_index) & 1;
int _e10 = tmp1_;
int _e16 = tmp2_;
metal::float4 pos = metal::float4((static_cast<float>(_e10) * 4.0) - 1.0, (static_cast<float>(_e16) * 4.0) - 1.0, 0.0, 1.0);
int _e9 = tmp1_;
int _e15 = tmp2_;
metal::float4 pos = metal::float4((static_cast<float>(_e9) * 4.0) - 1.0, (static_cast<float>(_e15) * 4.0) - 1.0, 0.0, 1.0);
metal::float4 _e27 = r_data.view[0];
metal::float4 _e31 = r_data.view[1];
metal::float4 _e35 = r_data.view[2];
metal::float3x3 inv_model_view = metal::transpose(metal::float3x3(_e27.xyz, _e31.xyz, _e35.xyz));
metal::float4x4 _e40 = r_data.proj_inv;
metal::float4 unprojected = _e40 * pos;
metal::float4 _e32 = r_data.view[1];
metal::float4 _e37 = r_data.view[2];
metal::float3x3 inv_model_view = metal::transpose(metal::float3x3(_e27.xyz, _e32.xyz, _e37.xyz));
metal::float4x4 _e43 = r_data.proj_inv;
metal::float4 unprojected = _e43 * pos;
const auto _tmp = VertexOutput {pos, inv_model_view * unprojected.xyz};
return vs_mainOutput { _tmp.position, _tmp.uv };
}
@ -61,6 +61,6 @@ fragment fs_mainOutput fs_main(
metal::coord::normalized
);
const VertexOutput in = { position, varyings_1.uv };
metal::float4 _e5 = r_texture.sample(r_sampler, in.uv);
return fs_mainOutput { _e5 };
metal::float4 _e4 = r_texture.sample(r_sampler, in.uv);
return fs_mainOutput { _e4 };
}

View File

@ -9,8 +9,8 @@ metal::float4 test(
metal::texture2d<float, metal::access::sample> Passed_Texture,
metal::sampler Passed_Sampler
) {
metal::float4 _e7 = Passed_Texture.sample(Passed_Sampler, metal::float2(0.0, 0.0));
return _e7;
metal::float4 _e5 = Passed_Texture.sample(Passed_Sampler, metal::float2(0.0, 0.0));
return _e5;
}
struct main_Output {

View File

@ -1,18 +1,18 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 320
; Bound: 323
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %233 "foo_vert" %228 %231
OpEntryPoint Fragment %274 "foo_frag" %273
OpEntryPoint GLCompute %293 "atomics"
OpEntryPoint GLCompute %317 "assign_through_ptr"
OpExecutionMode %274 OriginUpperLeft
OpExecutionMode %293 LocalSize 1 1 1
OpExecutionMode %317 LocalSize 1 1 1
OpEntryPoint Vertex %236 "foo_vert" %231 %234
OpEntryPoint Fragment %277 "foo_frag" %276
OpEntryPoint GLCompute %296 "atomics"
OpEntryPoint GLCompute %320 "assign_through_ptr"
OpExecutionMode %277 OriginUpperLeft
OpExecutionMode %296 LocalSize 1 1 1
OpExecutionMode %320 LocalSize 1 1 1
OpSource GLSL 450
OpMemberName %36 0 "a"
OpMemberName %36 1 "b"
@ -30,32 +30,32 @@ OpMemberName %48 0 "m"
OpName %48 "Baz"
OpMemberName %52 0 "am"
OpName %52 "MatCx2InArray"
OpName %68 "global_const"
OpName %70 "bar"
OpName %72 "baz"
OpName %75 "qux"
OpName %78 "nested_mat_cx2"
OpName %81 "val"
OpName %82 "idx"
OpName %84 "t"
OpName %88 "test_matrix_within_struct_accesses"
OpName %146 "idx"
OpName %147 "t"
OpName %151 "test_matrix_within_array_within_struct_accesses"
OpName %206 "foo"
OpName %207 "read_from_private"
OpName %212 "a"
OpName %213 "test_arr_as_arg"
OpName %219 "p"
OpName %220 "assign_through_ptr_fn"
OpName %223 "foo"
OpName %224 "c"
OpName %228 "vi"
OpName %233 "foo_vert"
OpName %274 "foo_frag"
OpName %290 "tmp"
OpName %293 "atomics"
OpName %317 "assign_through_ptr"
OpName %69 "global_const"
OpName %71 "bar"
OpName %73 "baz"
OpName %76 "qux"
OpName %79 "nested_mat_cx2"
OpName %82 "val"
OpName %83 "idx"
OpName %86 "t"
OpName %90 "test_matrix_within_struct_accesses"
OpName %147 "idx"
OpName %149 "t"
OpName %153 "test_matrix_within_array_within_struct_accesses"
OpName %208 "foo"
OpName %209 "read_from_private"
OpName %214 "a"
OpName %215 "test_arr_as_arg"
OpName %221 "p"
OpName %222 "assign_through_ptr_fn"
OpName %225 "foo"
OpName %227 "c2"
OpName %231 "vi"
OpName %236 "foo_vert"
OpName %277 "foo_frag"
OpName %293 "tmp"
OpName %296 "atomics"
OpName %320 "assign_through_ptr"
OpMemberDecorate %36 0 Offset 0
OpMemberDecorate %36 1 Offset 16
OpMemberDecorate %36 2 Offset 28
@ -82,24 +82,24 @@ OpMemberDecorate %52 0 MatrixStride 8
OpDecorate %54 ArrayStride 4
OpDecorate %55 ArrayStride 40
OpDecorate %58 ArrayStride 4
OpDecorate %70 DescriptorSet 0
OpDecorate %70 Binding 0
OpDecorate %71 DescriptorSet 0
OpDecorate %71 Binding 0
OpDecorate %46 Block
OpDecorate %72 DescriptorSet 0
OpDecorate %72 Binding 1
OpDecorate %73 Block
OpMemberDecorate %73 0 Offset 0
OpDecorate %75 DescriptorSet 0
OpDecorate %75 Binding 2
OpDecorate %76 Block
OpMemberDecorate %76 0 Offset 0
OpDecorate %78 DescriptorSet 0
OpDecorate %78 Binding 3
OpDecorate %79 Block
OpMemberDecorate %79 0 Offset 0
OpDecorate %228 BuiltIn VertexIndex
OpDecorate %231 BuiltIn Position
OpDecorate %273 Location 0
OpDecorate %73 DescriptorSet 0
OpDecorate %73 Binding 1
OpDecorate %74 Block
OpMemberDecorate %74 0 Offset 0
OpDecorate %76 DescriptorSet 0
OpDecorate %76 Binding 2
OpDecorate %77 Block
OpMemberDecorate %77 0 Offset 0
OpDecorate %79 DescriptorSet 0
OpDecorate %79 Binding 3
OpDecorate %80 Block
OpMemberDecorate %80 0 Offset 0
OpDecorate %231 BuiltIn VertexIndex
OpDecorate %234 BuiltIn Position
OpDecorate %276 Location 0
%2 = OpTypeVoid
%4 = OpTypeInt 32 0
%3 = OpConstant %4 0
@ -157,332 +157,338 @@ OpDecorate %273 Location 0
%56 = OpTypeVector %10 4
%57 = OpTypePointer StorageBuffer %6
%58 = OpTypeArray %6 %26
%59 = OpTypePointer Workgroup %4
%60 = OpConstantComposite %35 %3 %3 %3
%61 = OpConstantComposite %36 %3 %60 %5
%62 = OpConstantComposite %41 %22 %22
%63 = OpConstantComposite %50 %62 %62 %62 %62
%64 = OpConstantComposite %51 %63 %63
%65 = OpConstantComposite %54 %22 %22 %22 %22 %22 %22 %22 %22 %22 %22
%66 = OpConstantComposite %55 %65 %65 %65 %65 %65
%67 = OpConstantComposite %49 %5 %5
%69 = OpTypePointer Private %36
%68 = OpVariable %69 Private %61
%71 = OpTypePointer StorageBuffer %46
%70 = OpVariable %71 StorageBuffer
%73 = OpTypeStruct %48
%74 = OpTypePointer Uniform %73
%72 = OpVariable %74 Uniform
%76 = OpTypeStruct %49
%77 = OpTypePointer StorageBuffer %76
%75 = OpVariable %77 StorageBuffer
%79 = OpTypeStruct %52
%80 = OpTypePointer Uniform %79
%78 = OpVariable %80 Uniform
%81 = OpVariable %59 Workgroup
%83 = OpTypePointer Function %6
%85 = OpTypePointer Function %48
%86 = OpConstantNull %48
%89 = OpTypeFunction %2
%90 = OpTypePointer Uniform %48
%92 = OpTypePointer StorageBuffer %49
%96 = OpTypePointer Uniform %47
%99 = OpTypePointer Uniform %41
%105 = OpTypePointer Uniform %10
%125 = OpTypePointer Function %47
%131 = OpTypePointer Function %41
%137 = OpTypePointer Function %10
%148 = OpTypePointer Function %52
%149 = OpConstantNull %52
%152 = OpTypePointer Uniform %52
%157 = OpTypePointer Uniform %51
%160 = OpTypePointer Uniform %50
%183 = OpTypePointer Function %51
%185 = OpTypePointer Function %50
%208 = OpTypeFunction %10 %53
%214 = OpTypeFunction %10 %55
%221 = OpTypeFunction %2 %59
%225 = OpTypePointer Function %58
%226 = OpConstantNull %58
%229 = OpTypePointer Input %4
%228 = OpVariable %229 Input
%232 = OpTypePointer Output %56
%231 = OpVariable %232 Output
%241 = OpTypePointer StorageBuffer %38
%244 = OpTypePointer StorageBuffer %44
%247 = OpTypePointer StorageBuffer %39
%248 = OpTypePointer StorageBuffer %10
%251 = OpTypePointer StorageBuffer %45
%254 = OpTypePointer StorageBuffer %37
%255 = OpConstant %4 4
%267 = OpTypeVector %6 4
%273 = OpVariable %232 Output
%291 = OpConstantNull %6
%295 = OpTypePointer StorageBuffer %6
%298 = OpConstant %4 64
%88 = OpFunction %2 None %89
%87 = OpLabel
%82 = OpVariable %83 Function %8
%84 = OpVariable %85 Function %86
%91 = OpAccessChain %90 %72 %3
OpBranch %93
%93 = OpLabel
%94 = OpLoad %6 %82
%95 = OpISub %6 %94 %8
OpStore %82 %95
%97 = OpAccessChain %96 %91 %3
%98 = OpLoad %47 %97
%100 = OpAccessChain %99 %91 %3 %3
%101 = OpLoad %41 %100
%102 = OpLoad %6 %82
%103 = OpAccessChain %99 %91 %3 %102
%104 = OpLoad %41 %103
%106 = OpAccessChain %105 %91 %3 %3 %32
%107 = OpLoad %10 %106
%108 = OpLoad %6 %82
%109 = OpAccessChain %105 %91 %3 %3 %108
%110 = OpLoad %10 %109
%111 = OpLoad %6 %82
%112 = OpAccessChain %105 %91 %3 %111 %32
%113 = OpLoad %10 %112
%114 = OpLoad %6 %82
%115 = OpLoad %6 %82
%116 = OpAccessChain %105 %91 %3 %114 %115
%117 = OpLoad %10 %116
%118 = OpCompositeConstruct %41 %9 %9
%119 = OpCompositeConstruct %41 %11 %11
%120 = OpCompositeConstruct %41 %12 %12
%121 = OpCompositeConstruct %47 %118 %119 %120
%122 = OpCompositeConstruct %48 %121
OpStore %84 %122
%123 = OpLoad %6 %82
%124 = OpIAdd %6 %123 %8
OpStore %82 %124
%126 = OpCompositeConstruct %41 %13 %13
%127 = OpCompositeConstruct %41 %14 %14
%128 = OpCompositeConstruct %41 %15 %15
%129 = OpCompositeConstruct %47 %126 %127 %128
%130 = OpAccessChain %125 %84 %3
OpStore %130 %129
%132 = OpCompositeConstruct %41 %16 %16
%133 = OpAccessChain %131 %84 %3 %3
OpStore %133 %132
%134 = OpLoad %6 %82
%135 = OpCompositeConstruct %41 %17 %17
%136 = OpAccessChain %131 %84 %3 %134
OpStore %136 %135
%138 = OpAccessChain %137 %84 %3 %3 %32
OpStore %138 %18
%139 = OpLoad %6 %82
%140 = OpAccessChain %137 %84 %3 %3 %139
OpStore %140 %19
%141 = OpLoad %6 %82
%142 = OpAccessChain %137 %84 %3 %141 %32
OpStore %142 %20
%143 = OpLoad %6 %82
%144 = OpLoad %6 %82
%145 = OpAccessChain %137 %84 %3 %143 %144
OpStore %145 %21
%59 = OpTypeVector %6 4
%60 = OpTypePointer Workgroup %4
%61 = OpConstantComposite %35 %3 %3 %3
%62 = OpConstantComposite %36 %3 %61 %5
%63 = OpConstantComposite %41 %22 %22
%64 = OpConstantComposite %50 %63 %63 %63 %63
%65 = OpConstantComposite %51 %64 %64
%66 = OpConstantComposite %54 %22 %22 %22 %22 %22 %22 %22 %22 %22 %22
%67 = OpConstantComposite %55 %66 %66 %66 %66 %66
%68 = OpConstantComposite %49 %5 %5
%70 = OpTypePointer Private %36
%69 = OpVariable %70 Private %62
%72 = OpTypePointer StorageBuffer %46
%71 = OpVariable %72 StorageBuffer
%74 = OpTypeStruct %48
%75 = OpTypePointer Uniform %74
%73 = OpVariable %75 Uniform
%77 = OpTypeStruct %49
%78 = OpTypePointer StorageBuffer %77
%76 = OpVariable %78 StorageBuffer
%80 = OpTypeStruct %52
%81 = OpTypePointer Uniform %80
%79 = OpVariable %81 Uniform
%82 = OpVariable %60 Workgroup
%84 = OpTypePointer Function %6
%85 = OpConstantNull %6
%87 = OpTypePointer Function %48
%88 = OpConstantNull %48
%91 = OpTypeFunction %2
%92 = OpTypePointer Uniform %48
%97 = OpTypePointer Uniform %47
%100 = OpTypePointer Uniform %41
%106 = OpTypePointer Uniform %10
%126 = OpTypePointer Function %47
%132 = OpTypePointer Function %41
%138 = OpTypePointer Function %10
%148 = OpConstantNull %6
%150 = OpTypePointer Function %52
%151 = OpConstantNull %52
%154 = OpTypePointer Uniform %52
%159 = OpTypePointer Uniform %51
%162 = OpTypePointer Uniform %50
%185 = OpTypePointer Function %51
%187 = OpTypePointer Function %50
%210 = OpTypeFunction %10 %53
%216 = OpTypeFunction %10 %55
%223 = OpTypeFunction %2 %60
%226 = OpConstantNull %10
%228 = OpTypePointer Function %58
%229 = OpConstantNull %58
%232 = OpTypePointer Input %4
%231 = OpVariable %232 Input
%235 = OpTypePointer Output %56
%234 = OpVariable %235 Output
%238 = OpTypePointer StorageBuffer %49
%245 = OpTypePointer StorageBuffer %38
%248 = OpTypePointer StorageBuffer %44
%251 = OpTypePointer StorageBuffer %39
%252 = OpTypePointer StorageBuffer %10
%255 = OpTypePointer StorageBuffer %45
%258 = OpTypePointer StorageBuffer %37
%259 = OpConstant %4 4
%276 = OpVariable %235 Output
%294 = OpConstantNull %6
%298 = OpTypePointer StorageBuffer %6
%301 = OpConstant %4 64
%90 = OpFunction %2 None %91
%89 = OpLabel
%83 = OpVariable %84 Function %85
%86 = OpVariable %87 Function %88
%93 = OpAccessChain %92 %73 %3
OpBranch %94
%94 = OpLabel
OpStore %83 %8
%95 = OpLoad %6 %83
%96 = OpISub %6 %95 %8
OpStore %83 %96
%98 = OpAccessChain %97 %93 %3
%99 = OpLoad %47 %98
%101 = OpAccessChain %100 %93 %3 %3
%102 = OpLoad %41 %101
%103 = OpLoad %6 %83
%104 = OpAccessChain %100 %93 %3 %103
%105 = OpLoad %41 %104
%107 = OpAccessChain %106 %93 %3 %3 %32
%108 = OpLoad %10 %107
%109 = OpLoad %6 %83
%110 = OpAccessChain %106 %93 %3 %3 %109
%111 = OpLoad %10 %110
%112 = OpLoad %6 %83
%113 = OpAccessChain %106 %93 %3 %112 %32
%114 = OpLoad %10 %113
%115 = OpLoad %6 %83
%116 = OpLoad %6 %83
%117 = OpAccessChain %106 %93 %3 %115 %116
%118 = OpLoad %10 %117
%119 = OpCompositeConstruct %41 %9 %9
%120 = OpCompositeConstruct %41 %11 %11
%121 = OpCompositeConstruct %41 %12 %12
%122 = OpCompositeConstruct %47 %119 %120 %121
%123 = OpCompositeConstruct %48 %122
OpStore %86 %123
%124 = OpLoad %6 %83
%125 = OpIAdd %6 %124 %8
OpStore %83 %125
%127 = OpCompositeConstruct %41 %13 %13
%128 = OpCompositeConstruct %41 %14 %14
%129 = OpCompositeConstruct %41 %15 %15
%130 = OpCompositeConstruct %47 %127 %128 %129
%131 = OpAccessChain %126 %86 %3
OpStore %131 %130
%133 = OpCompositeConstruct %41 %16 %16
%134 = OpAccessChain %132 %86 %3 %3
OpStore %134 %133
%135 = OpLoad %6 %83
%136 = OpCompositeConstruct %41 %17 %17
%137 = OpAccessChain %132 %86 %3 %135
OpStore %137 %136
%139 = OpAccessChain %138 %86 %3 %3 %32
OpStore %139 %18
%140 = OpLoad %6 %83
%141 = OpAccessChain %138 %86 %3 %3 %140
OpStore %141 %19
%142 = OpLoad %6 %83
%143 = OpAccessChain %138 %86 %3 %142 %32
OpStore %143 %20
%144 = OpLoad %6 %83
%145 = OpLoad %6 %83
%146 = OpAccessChain %138 %86 %3 %144 %145
OpStore %146 %21
OpReturn
OpFunctionEnd
%151 = OpFunction %2 None %89
%150 = OpLabel
%146 = OpVariable %83 Function %8
%147 = OpVariable %148 Function %149
%153 = OpAccessChain %152 %78 %3
OpBranch %154
%154 = OpLabel
%155 = OpLoad %6 %146
%156 = OpISub %6 %155 %8
OpStore %146 %156
%158 = OpAccessChain %157 %153 %3
%159 = OpLoad %51 %158
%161 = OpAccessChain %160 %153 %3 %3
%162 = OpLoad %50 %161
%163 = OpAccessChain %99 %153 %3 %3 %3
%164 = OpLoad %41 %163
%165 = OpLoad %6 %146
%166 = OpAccessChain %99 %153 %3 %3 %165
%167 = OpLoad %41 %166
%168 = OpAccessChain %105 %153 %3 %3 %3 %32
%169 = OpLoad %10 %168
%170 = OpLoad %6 %146
%171 = OpAccessChain %105 %153 %3 %3 %3 %170
%172 = OpLoad %10 %171
%173 = OpLoad %6 %146
%174 = OpAccessChain %105 %153 %3 %3 %173 %32
%175 = OpLoad %10 %174
%176 = OpLoad %6 %146
%177 = OpLoad %6 %146
%178 = OpAccessChain %105 %153 %3 %3 %176 %177
%179 = OpLoad %10 %178
%180 = OpCompositeConstruct %52 %64
OpStore %147 %180
%181 = OpLoad %6 %146
%182 = OpIAdd %6 %181 %8
OpStore %146 %182
%184 = OpAccessChain %183 %147 %3
OpStore %184 %64
%186 = OpCompositeConstruct %41 %23 %23
%187 = OpCompositeConstruct %41 %24 %24
%188 = OpCompositeConstruct %41 %13 %13
%189 = OpCompositeConstruct %41 %14 %14
%190 = OpCompositeConstruct %50 %186 %187 %188 %189
%191 = OpAccessChain %185 %147 %3 %3
OpStore %191 %190
%192 = OpCompositeConstruct %41 %16 %16
%193 = OpAccessChain %131 %147 %3 %3 %3
%153 = OpFunction %2 None %91
%152 = OpLabel
%147 = OpVariable %84 Function %148
%149 = OpVariable %150 Function %151
%155 = OpAccessChain %154 %79 %3
OpBranch %156
%156 = OpLabel
OpStore %147 %8
%157 = OpLoad %6 %147
%158 = OpISub %6 %157 %8
OpStore %147 %158
%160 = OpAccessChain %159 %155 %3
%161 = OpLoad %51 %160
%163 = OpAccessChain %162 %155 %3 %3
%164 = OpLoad %50 %163
%165 = OpAccessChain %100 %155 %3 %3 %3
%166 = OpLoad %41 %165
%167 = OpLoad %6 %147
%168 = OpAccessChain %100 %155 %3 %3 %167
%169 = OpLoad %41 %168
%170 = OpAccessChain %106 %155 %3 %3 %3 %32
%171 = OpLoad %10 %170
%172 = OpLoad %6 %147
%173 = OpAccessChain %106 %155 %3 %3 %3 %172
%174 = OpLoad %10 %173
%175 = OpLoad %6 %147
%176 = OpAccessChain %106 %155 %3 %3 %175 %32
%177 = OpLoad %10 %176
%178 = OpLoad %6 %147
%179 = OpLoad %6 %147
%180 = OpAccessChain %106 %155 %3 %3 %178 %179
%181 = OpLoad %10 %180
%182 = OpCompositeConstruct %52 %65
OpStore %149 %182
%183 = OpLoad %6 %147
%184 = OpIAdd %6 %183 %8
OpStore %147 %184
%186 = OpAccessChain %185 %149 %3
OpStore %186 %65
%188 = OpCompositeConstruct %41 %23 %23
%189 = OpCompositeConstruct %41 %24 %24
%190 = OpCompositeConstruct %41 %13 %13
%191 = OpCompositeConstruct %41 %14 %14
%192 = OpCompositeConstruct %50 %188 %189 %190 %191
%193 = OpAccessChain %187 %149 %3 %3
OpStore %193 %192
%194 = OpLoad %6 %146
%195 = OpCompositeConstruct %41 %17 %17
%196 = OpAccessChain %131 %147 %3 %3 %194
OpStore %196 %195
%197 = OpAccessChain %137 %147 %3 %3 %3 %32
OpStore %197 %18
%198 = OpLoad %6 %146
%199 = OpAccessChain %137 %147 %3 %3 %3 %198
OpStore %199 %19
%200 = OpLoad %6 %146
%201 = OpAccessChain %137 %147 %3 %3 %200 %32
OpStore %201 %20
%202 = OpLoad %6 %146
%203 = OpLoad %6 %146
%204 = OpAccessChain %137 %147 %3 %3 %202 %203
OpStore %204 %21
%194 = OpCompositeConstruct %41 %16 %16
%195 = OpAccessChain %132 %149 %3 %3 %3
OpStore %195 %194
%196 = OpLoad %6 %147
%197 = OpCompositeConstruct %41 %17 %17
%198 = OpAccessChain %132 %149 %3 %3 %196
OpStore %198 %197
%199 = OpAccessChain %138 %149 %3 %3 %3 %32
OpStore %199 %18
%200 = OpLoad %6 %147
%201 = OpAccessChain %138 %149 %3 %3 %3 %200
OpStore %201 %19
%202 = OpLoad %6 %147
%203 = OpAccessChain %138 %149 %3 %3 %202 %32
OpStore %203 %20
%204 = OpLoad %6 %147
%205 = OpLoad %6 %147
%206 = OpAccessChain %138 %149 %3 %3 %204 %205
OpStore %206 %21
OpReturn
OpFunctionEnd
%207 = OpFunction %10 None %208
%206 = OpFunctionParameter %53
%205 = OpLabel
OpBranch %209
%209 = OpLabel
%210 = OpLoad %10 %206
OpReturnValue %210
OpFunctionEnd
%213 = OpFunction %10 None %214
%212 = OpFunctionParameter %55
%209 = OpFunction %10 None %210
%208 = OpFunctionParameter %53
%207 = OpLabel
OpBranch %211
%211 = OpLabel
OpBranch %215
%215 = OpLabel
%216 = OpCompositeExtract %54 %212 4
%217 = OpCompositeExtract %10 %216 9
OpReturnValue %217
%212 = OpLoad %10 %208
OpReturnValue %212
OpFunctionEnd
%220 = OpFunction %2 None %221
%219 = OpFunctionParameter %59
%218 = OpLabel
OpBranch %222
%222 = OpLabel
OpStore %219 %34
%215 = OpFunction %10 None %216
%214 = OpFunctionParameter %55
%213 = OpLabel
OpBranch %217
%217 = OpLabel
%218 = OpCompositeExtract %54 %214 4
%219 = OpCompositeExtract %10 %218 9
OpReturnValue %219
OpFunctionEnd
%222 = OpFunction %2 None %223
%221 = OpFunctionParameter %60
%220 = OpLabel
OpBranch %224
%224 = OpLabel
OpStore %221 %34
OpReturn
OpFunctionEnd
%233 = OpFunction %2 None %89
%227 = OpLabel
%223 = OpVariable %53 Function %22
%224 = OpVariable %225 Function %226
%230 = OpLoad %4 %228
%234 = OpAccessChain %90 %72 %3
%235 = OpAccessChain %92 %75 %3
%236 = OpAccessChain %152 %78 %3
OpBranch %237
%237 = OpLabel
%238 = OpLoad %10 %223
OpStore %223 %9
%239 = OpFunctionCall %2 %88
%240 = OpFunctionCall %2 %151
%242 = OpAccessChain %241 %70 %3
%243 = OpLoad %38 %242
%245 = OpAccessChain %244 %70 %29
%246 = OpLoad %44 %245
%249 = OpAccessChain %248 %70 %3 %29 %3
%250 = OpLoad %10 %249
%252 = OpArrayLength %4 %70 4
%253 = OpISub %4 %252 %30
%256 = OpAccessChain %57 %70 %255 %253 %3
%257 = OpLoad %6 %256
%258 = OpLoad %49 %235
%259 = OpFunctionCall %10 %207 %223
%260 = OpConvertFToS %6 %250
%261 = OpCompositeConstruct %58 %257 %260 %31 %27 %26
OpStore %224 %261
%262 = OpIAdd %4 %230 %32
%263 = OpAccessChain %83 %224 %262
OpStore %263 %33
%264 = OpAccessChain %83 %224 %230
%265 = OpLoad %6 %264
%266 = OpFunctionCall %10 %213 %66
%268 = OpCompositeConstruct %267 %265 %265 %265 %265
%269 = OpConvertSToF %56 %268
%270 = OpMatrixTimesVector %39 %243 %269
%271 = OpCompositeConstruct %56 %270 %11
OpStore %231 %271
%236 = OpFunction %2 None %91
%230 = OpLabel
%225 = OpVariable %53 Function %226
%227 = OpVariable %228 Function %229
%233 = OpLoad %4 %231
%237 = OpAccessChain %92 %73 %3
%239 = OpAccessChain %238 %76 %3
%240 = OpAccessChain %154 %79 %3
OpBranch %241
%241 = OpLabel
OpStore %225 %22
%242 = OpLoad %10 %225
OpStore %225 %9
%243 = OpFunctionCall %2 %90
%244 = OpFunctionCall %2 %153
%246 = OpAccessChain %245 %71 %3
%247 = OpLoad %38 %246
%249 = OpAccessChain %248 %71 %29
%250 = OpLoad %44 %249
%253 = OpAccessChain %252 %71 %3 %29 %3
%254 = OpLoad %10 %253
%256 = OpArrayLength %4 %71 4
%257 = OpISub %4 %256 %30
%260 = OpAccessChain %57 %71 %259 %257 %3
%261 = OpLoad %6 %260
%262 = OpLoad %49 %239
%263 = OpFunctionCall %10 %209 %225
%264 = OpConvertFToS %6 %254
%265 = OpCompositeConstruct %58 %261 %264 %31 %27 %26
OpStore %227 %265
%266 = OpIAdd %4 %233 %32
%267 = OpAccessChain %84 %227 %266
OpStore %267 %33
%268 = OpAccessChain %84 %227 %233
%269 = OpLoad %6 %268
%270 = OpFunctionCall %10 %215 %67
%271 = OpCompositeConstruct %59 %269 %269 %269 %269
%272 = OpConvertSToF %56 %271
%273 = OpMatrixTimesVector %39 %247 %272
%274 = OpCompositeConstruct %56 %273 %11
OpStore %234 %274
OpReturn
OpFunctionEnd
%274 = OpFunction %2 None %89
%272 = OpLabel
%275 = OpAccessChain %92 %75 %3
OpBranch %276
%276 = OpLabel
%277 = OpAccessChain %248 %70 %3 %32 %30
OpStore %277 %9
%278 = OpCompositeConstruct %39 %22 %22 %22
%279 = OpCompositeConstruct %39 %9 %9 %9
%280 = OpCompositeConstruct %39 %11 %11 %11
%281 = OpCompositeConstruct %39 %12 %12 %12
%282 = OpCompositeConstruct %38 %278 %279 %280 %281
%283 = OpAccessChain %241 %70 %3
OpStore %283 %282
%284 = OpCompositeConstruct %43 %3 %3
%285 = OpCompositeConstruct %43 %32 %32
%286 = OpCompositeConstruct %44 %284 %285
%287 = OpAccessChain %244 %70 %29
OpStore %287 %286
%288 = OpAccessChain %57 %70 %255 %32 %3
OpStore %288 %8
OpStore %275 %67
%289 = OpCompositeConstruct %56 %22 %22 %22 %22
OpStore %273 %289
%277 = OpFunction %2 None %91
%275 = OpLabel
%278 = OpAccessChain %238 %76 %3
OpBranch %279
%279 = OpLabel
%280 = OpAccessChain %252 %71 %3 %32 %30
OpStore %280 %9
%281 = OpCompositeConstruct %39 %22 %22 %22
%282 = OpCompositeConstruct %39 %9 %9 %9
%283 = OpCompositeConstruct %39 %11 %11 %11
%284 = OpCompositeConstruct %39 %12 %12 %12
%285 = OpCompositeConstruct %38 %281 %282 %283 %284
%286 = OpAccessChain %245 %71 %3
OpStore %286 %285
%287 = OpCompositeConstruct %43 %3 %3
%288 = OpCompositeConstruct %43 %32 %32
%289 = OpCompositeConstruct %44 %287 %288
%290 = OpAccessChain %248 %71 %29
OpStore %290 %289
%291 = OpAccessChain %57 %71 %259 %32 %3
OpStore %291 %8
OpStore %278 %68
%292 = OpCompositeConstruct %56 %22 %22 %22 %22
OpStore %276 %292
OpReturn
OpFunctionEnd
%293 = OpFunction %2 None %89
%292 = OpLabel
%290 = OpVariable %83 Function %291
OpBranch %294
%294 = OpLabel
%296 = OpAccessChain %295 %70 %30
%297 = OpAtomicLoad %6 %296 %8 %298
%300 = OpAccessChain %295 %70 %30
%299 = OpAtomicIAdd %6 %300 %8 %298 %26
OpStore %290 %299
%302 = OpAccessChain %295 %70 %30
%301 = OpAtomicISub %6 %302 %8 %298 %26
OpStore %290 %301
%304 = OpAccessChain %295 %70 %30
%303 = OpAtomicAnd %6 %304 %8 %298 %26
OpStore %290 %303
%306 = OpAccessChain %295 %70 %30
%305 = OpAtomicOr %6 %306 %8 %298 %26
OpStore %290 %305
%308 = OpAccessChain %295 %70 %30
%307 = OpAtomicXor %6 %308 %8 %298 %26
OpStore %290 %307
%310 = OpAccessChain %295 %70 %30
%309 = OpAtomicSMin %6 %310 %8 %298 %26
OpStore %290 %309
%312 = OpAccessChain %295 %70 %30
%311 = OpAtomicSMax %6 %312 %8 %298 %26
OpStore %290 %311
%314 = OpAccessChain %295 %70 %30
%313 = OpAtomicExchange %6 %314 %8 %298 %26
OpStore %290 %313
%315 = OpAccessChain %295 %70 %30
OpAtomicStore %315 %8 %298 %297
%296 = OpFunction %2 None %91
%295 = OpLabel
%293 = OpVariable %84 Function %294
OpBranch %297
%297 = OpLabel
%299 = OpAccessChain %298 %71 %30
%300 = OpAtomicLoad %6 %299 %8 %301
%303 = OpAccessChain %298 %71 %30
%302 = OpAtomicIAdd %6 %303 %8 %301 %26
OpStore %293 %302
%305 = OpAccessChain %298 %71 %30
%304 = OpAtomicISub %6 %305 %8 %301 %26
OpStore %293 %304
%307 = OpAccessChain %298 %71 %30
%306 = OpAtomicAnd %6 %307 %8 %301 %26
OpStore %293 %306
%309 = OpAccessChain %298 %71 %30
%308 = OpAtomicOr %6 %309 %8 %301 %26
OpStore %293 %308
%311 = OpAccessChain %298 %71 %30
%310 = OpAtomicXor %6 %311 %8 %301 %26
OpStore %293 %310
%313 = OpAccessChain %298 %71 %30
%312 = OpAtomicSMin %6 %313 %8 %301 %26
OpStore %293 %312
%315 = OpAccessChain %298 %71 %30
%314 = OpAtomicSMax %6 %315 %8 %301 %26
OpStore %293 %314
%317 = OpAccessChain %298 %71 %30
%316 = OpAtomicExchange %6 %317 %8 %301 %26
OpStore %293 %316
%318 = OpAccessChain %298 %71 %30
OpAtomicStore %318 %8 %301 %300
OpReturn
OpFunctionEnd
%317 = OpFunction %2 None %89
%316 = OpLabel
OpBranch %318
%318 = OpLabel
%319 = OpFunctionCall %2 %220 %81
%320 = OpFunction %2 None %91
%319 = OpLabel
OpBranch %321
%321 = OpLabel
%322 = OpFunctionCall %2 %222 %82
OpReturn
OpFunctionEnd

View File

@ -1,15 +1,15 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 116
; Bound: 126
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %31 "test_atomic_compare_exchange_i32"
OpEntryPoint GLCompute %79 "test_atomic_compare_exchange_u32"
OpExecutionMode %31 LocalSize 1 1 1
OpExecutionMode %79 LocalSize 1 1 1
OpEntryPoint GLCompute %32 "test_atomic_compare_exchange_i32"
OpEntryPoint GLCompute %84 "test_atomic_compare_exchange_u32"
OpExecutionMode %32 LocalSize 1 1 1
OpExecutionMode %84 LocalSize 1 1 1
OpDecorate %12 ArrayStride 4
OpDecorate %13 ArrayStride 4
OpMemberDecorate %14 0 Offset 0
@ -28,16 +28,16 @@ OpMemberDecorate %20 0 Offset 0
%4 = OpTypeInt 32 0
%3 = OpConstant %4 128
%5 = OpConstant %4 0
%6 = OpConstant %4 1
%8 = OpTypeBool
%7 = OpConstantFalse %8
%10 = OpTypeFloat 32
%9 = OpConstant %10 1.0
%7 = OpTypeBool
%6 = OpConstantFalse %7
%9 = OpTypeFloat 32
%8 = OpConstant %9 1.0
%10 = OpConstant %4 1
%11 = OpTypeInt 32 1
%12 = OpTypeArray %11 %3
%13 = OpTypeArray %4 %3
%14 = OpTypeStruct %11 %8
%15 = OpTypeStruct %4 %8
%14 = OpTypeStruct %11 %7
%15 = OpTypeStruct %4 %7
%17 = OpTypeStruct %12
%18 = OpTypePointer StorageBuffer %17
%16 = OpVariable %18 StorageBuffer
@ -45,144 +45,164 @@ OpMemberDecorate %20 0 Offset 0
%21 = OpTypePointer StorageBuffer %20
%19 = OpVariable %21 StorageBuffer
%23 = OpTypePointer Function %4
%25 = OpTypePointer Function %11
%26 = OpConstantNull %11
%28 = OpTypePointer Function %8
%29 = OpConstantNull %8
%32 = OpTypeFunction %2
%33 = OpTypePointer StorageBuffer %12
%35 = OpTypePointer StorageBuffer %13
%46 = OpTypePointer StorageBuffer %11
%49 = OpConstant %11 1
%50 = OpConstant %4 64
%75 = OpConstantNull %4
%77 = OpConstantNull %8
%91 = OpTypePointer StorageBuffer %4
%31 = OpFunction %2 None %32
%30 = OpLabel
%22 = OpVariable %23 Function %5
%24 = OpVariable %25 Function %26
%27 = OpVariable %28 Function %29
%34 = OpAccessChain %33 %16 %5
%24 = OpConstantNull %4
%26 = OpTypePointer Function %11
%27 = OpConstantNull %11
%29 = OpTypePointer Function %7
%30 = OpConstantNull %7
%33 = OpTypeFunction %2
%34 = OpTypePointer StorageBuffer %12
%48 = OpTypePointer StorageBuffer %11
%51 = OpConstant %11 1
%52 = OpConstant %4 64
%78 = OpConstantNull %4
%80 = OpConstantNull %4
%82 = OpConstantNull %7
%85 = OpTypePointer StorageBuffer %13
%99 = OpTypePointer StorageBuffer %4
%32 = OpFunction %2 None %33
%31 = OpLabel
%22 = OpVariable %23 Function %24
%25 = OpVariable %26 Function %27
%28 = OpVariable %29 Function %30
%35 = OpAccessChain %34 %16 %5
OpBranch %36
%36 = OpLabel
OpStore %22 %5
OpBranch %37
%37 = OpLabel
OpLoopMerge %38 %40 None
OpBranch %39
%39 = OpLabel
%41 = OpLoad %4 %22
%42 = OpULessThan %8 %41 %3
%42 = OpULessThan %7 %41 %3
OpSelectionMerge %43 None
OpBranchConditional %42 %43 %44
%44 = OpLabel
OpBranch %38
%43 = OpLabel
%45 = OpLoad %4 %22
%47 = OpAccessChain %46 %34 %45
%48 = OpAtomicLoad %11 %47 %49 %50
OpStore %24 %48
OpStore %27 %7
OpBranch %51
%51 = OpLabel
OpLoopMerge %52 %54 None
OpBranch %45
%45 = OpLabel
%47 = OpLoad %4 %22
%49 = OpAccessChain %48 %35 %47
%50 = OpAtomicLoad %11 %49 %51 %52
OpStore %25 %50
OpStore %28 %6
OpBranch %53
%53 = OpLabel
%55 = OpLoad %8 %27
%56 = OpLogicalNot %8 %55
OpSelectionMerge %57 None
OpBranchConditional %56 %57 %58
%58 = OpLabel
OpBranch %52
%57 = OpLabel
%59 = OpLoad %11 %24
%60 = OpBitcast %10 %59
%61 = OpFAdd %10 %60 %9
%62 = OpBitcast %11 %61
%63 = OpLoad %4 %22
%64 = OpLoad %11 %24
%66 = OpAccessChain %46 %34 %63
%67 = OpAtomicCompareExchange %11 %66 %49 %50 %50 %62 %64
%68 = OpIEqual %8 %67 %64
%65 = OpCompositeConstruct %14 %67 %68
%69 = OpCompositeExtract %11 %65 0
OpStore %24 %69
%70 = OpCompositeExtract %8 %65 1
OpStore %27 %70
OpLoopMerge %54 %56 None
OpBranch %55
%55 = OpLabel
%57 = OpLoad %7 %28
%58 = OpLogicalNot %7 %57
OpSelectionMerge %59 None
OpBranchConditional %58 %59 %60
%60 = OpLabel
OpBranch %54
%59 = OpLabel
OpBranch %61
%61 = OpLabel
%63 = OpLoad %11 %25
%64 = OpBitcast %9 %63
%65 = OpFAdd %9 %64 %8
%66 = OpBitcast %11 %65
%67 = OpLoad %4 %22
%68 = OpLoad %11 %25
%70 = OpAccessChain %48 %35 %67
%71 = OpAtomicCompareExchange %11 %70 %51 %52 %52 %66 %68
%72 = OpIEqual %7 %71 %68
%69 = OpCompositeConstruct %14 %71 %72
%73 = OpCompositeExtract %11 %69 0
OpStore %25 %73
%74 = OpCompositeExtract %7 %69 1
OpStore %28 %74
OpBranch %62
%62 = OpLabel
OpBranch %56
%56 = OpLabel
OpBranch %53
%54 = OpLabel
OpBranch %51
%52 = OpLabel
OpBranch %46
%46 = OpLabel
OpBranch %40
%40 = OpLabel
%71 = OpLoad %4 %22
%72 = OpIAdd %4 %71 %6
OpStore %22 %72
%75 = OpLoad %4 %22
%76 = OpIAdd %4 %75 %10
OpStore %22 %76
OpBranch %37
%38 = OpLabel
OpReturn
OpFunctionEnd
%79 = OpFunction %2 None %32
%78 = OpLabel
%73 = OpVariable %23 Function %5
%74 = OpVariable %23 Function %75
%76 = OpVariable %28 Function %77
%80 = OpAccessChain %35 %19 %5
OpBranch %81
%81 = OpLabel
OpBranch %82
%82 = OpLabel
OpLoopMerge %83 %85 None
OpBranch %84
%84 = OpLabel
%86 = OpLoad %4 %73
%87 = OpULessThan %8 %86 %3
OpSelectionMerge %88 None
OpBranchConditional %87 %88 %89
%89 = OpLabel
OpBranch %83
%84 = OpFunction %2 None %33
%83 = OpLabel
%77 = OpVariable %23 Function %78
%79 = OpVariable %23 Function %80
%81 = OpVariable %29 Function %82
%86 = OpAccessChain %85 %19 %5
OpBranch %87
%87 = OpLabel
OpStore %77 %5
OpBranch %88
%88 = OpLabel
%90 = OpLoad %4 %73
%92 = OpAccessChain %91 %80 %90
%93 = OpAtomicLoad %4 %92 %49 %50
OpStore %74 %93
OpStore %76 %7
OpBranch %94
OpLoopMerge %89 %91 None
OpBranch %90
%90 = OpLabel
%92 = OpLoad %4 %77
%93 = OpULessThan %7 %92 %3
OpSelectionMerge %94 None
OpBranchConditional %93 %94 %95
%95 = OpLabel
OpBranch %89
%94 = OpLabel
OpLoopMerge %95 %97 None
OpBranch %96
%96 = OpLabel
%98 = OpLoad %8 %76
%99 = OpLogicalNot %8 %98
OpSelectionMerge %100 None
OpBranchConditional %99 %100 %101
%101 = OpLabel
OpBranch %95
%100 = OpLabel
%102 = OpLoad %4 %74
%103 = OpBitcast %10 %102
%104 = OpFAdd %10 %103 %9
%105 = OpBitcast %4 %104
%106 = OpLoad %4 %73
%107 = OpLoad %4 %74
%109 = OpAccessChain %91 %80 %106
%110 = OpAtomicCompareExchange %4 %109 %49 %50 %50 %105 %107
%111 = OpIEqual %8 %110 %107
%108 = OpCompositeConstruct %15 %110 %111
%112 = OpCompositeExtract %4 %108 0
OpStore %74 %112
%113 = OpCompositeExtract %8 %108 1
OpStore %76 %113
%98 = OpLoad %4 %77
%100 = OpAccessChain %99 %86 %98
%101 = OpAtomicLoad %4 %100 %51 %52
OpStore %79 %101
OpStore %81 %6
OpBranch %102
%102 = OpLabel
OpLoopMerge %103 %105 None
OpBranch %104
%104 = OpLabel
%106 = OpLoad %7 %81
%107 = OpLogicalNot %7 %106
OpSelectionMerge %108 None
OpBranchConditional %107 %108 %109
%109 = OpLabel
OpBranch %103
%108 = OpLabel
OpBranch %110
%110 = OpLabel
%112 = OpLoad %4 %79
%113 = OpBitcast %9 %112
%114 = OpFAdd %9 %113 %8
%115 = OpBitcast %4 %114
%116 = OpLoad %4 %77
%117 = OpLoad %4 %79
%119 = OpAccessChain %99 %86 %116
%120 = OpAtomicCompareExchange %4 %119 %51 %52 %52 %115 %117
%121 = OpIEqual %7 %120 %117
%118 = OpCompositeConstruct %15 %120 %121
%122 = OpCompositeExtract %4 %118 0
OpStore %79 %122
%123 = OpCompositeExtract %7 %118 1
OpStore %81 %123
OpBranch %111
%111 = OpLabel
OpBranch %105
%105 = OpLabel
OpBranch %102
%103 = OpLabel
OpBranch %97
%97 = OpLabel
OpBranch %94
%95 = OpLabel
OpBranch %85
%85 = OpLabel
%114 = OpLoad %4 %73
%115 = OpIAdd %4 %114 %6
OpStore %73 %115
OpBranch %82
%83 = OpLabel
OpBranch %91
%91 = OpLabel
%124 = OpLoad %4 %77
%125 = OpIAdd %4 %124 %10
OpStore %77 %125
OpBranch %88
%89 = OpLabel
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 159
; Bound: 161
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %48 "main"
OpExecutionMode %48 LocalSize 1 1 1
OpEntryPoint GLCompute %50 "main"
OpExecutionMode %50 LocalSize 1 1 1
%2 = OpTypeVoid
%4 = OpTypeInt 32 1
%3 = OpConstant %4 0
@ -25,199 +25,203 @@ OpExecutionMode %48 LocalSize 1 1 1
%17 = OpTypeVector %8 2
%18 = OpTypeVector %8 4
%20 = OpTypePointer Function %4
%22 = OpTypePointer Function %11
%23 = OpConstantNull %11
%25 = OpTypePointer Function %12
%26 = OpConstantNull %12
%28 = OpTypePointer Function %13
%29 = OpConstantNull %13
%31 = OpTypePointer Function %6
%33 = OpTypePointer Function %14
%34 = OpConstantNull %14
%36 = OpTypePointer Function %15
%37 = OpConstantNull %15
%39 = OpTypePointer Function %16
%40 = OpConstantNull %16
%42 = OpTypePointer Function %17
%43 = OpConstantNull %17
%45 = OpTypePointer Function %18
%46 = OpConstantNull %18
%49 = OpTypeFunction %2
%48 = OpFunction %2 None %49
%47 = OpLabel
%44 = OpVariable %45 Function %46
%35 = OpVariable %36 Function %37
%27 = OpVariable %28 Function %29
%19 = OpVariable %20 Function %3
%38 = OpVariable %39 Function %40
%30 = OpVariable %31 Function %5
%21 = OpVariable %22 Function %23
%41 = OpVariable %42 Function %43
%32 = OpVariable %33 Function %34
%24 = OpVariable %25 Function %26
OpBranch %50
%50 = OpLabel
%51 = OpCompositeConstruct %11 %3 %3
OpStore %21 %51
%52 = OpCompositeConstruct %12 %3 %3 %3
OpStore %24 %52
%53 = OpCompositeConstruct %13 %3 %3 %3 %3
OpStore %27 %53
%54 = OpCompositeConstruct %14 %5 %5
OpStore %32 %54
%55 = OpCompositeConstruct %15 %5 %5 %5
OpStore %35 %55
%56 = OpCompositeConstruct %16 %5 %5 %5 %5
OpStore %38 %56
%57 = OpCompositeConstruct %17 %7 %7
OpStore %41 %57
%58 = OpCompositeConstruct %18 %7 %7 %7 %7
OpStore %44 %58
%59 = OpLoad %18 %44
%60 = OpExtInst %6 %1 PackSnorm4x8 %59
OpStore %30 %60
%61 = OpLoad %18 %44
%62 = OpExtInst %6 %1 PackUnorm4x8 %61
OpStore %30 %62
%63 = OpLoad %17 %41
%64 = OpExtInst %6 %1 PackSnorm2x16 %63
OpStore %30 %64
%65 = OpLoad %17 %41
%66 = OpExtInst %6 %1 PackUnorm2x16 %65
OpStore %30 %66
%67 = OpLoad %17 %41
%68 = OpExtInst %6 %1 PackHalf2x16 %67
OpStore %30 %68
%69 = OpLoad %6 %30
%70 = OpExtInst %18 %1 UnpackSnorm4x8 %69
OpStore %44 %70
%71 = OpLoad %6 %30
%72 = OpExtInst %18 %1 UnpackUnorm4x8 %71
OpStore %44 %72
%73 = OpLoad %6 %30
%74 = OpExtInst %17 %1 UnpackSnorm2x16 %73
OpStore %41 %74
%75 = OpLoad %6 %30
%76 = OpExtInst %17 %1 UnpackUnorm2x16 %75
OpStore %41 %76
%77 = OpLoad %6 %30
%78 = OpExtInst %17 %1 UnpackHalf2x16 %77
OpStore %41 %78
%79 = OpLoad %4 %19
%80 = OpLoad %4 %19
%81 = OpBitFieldInsert %4 %79 %80 %9 %10
OpStore %19 %81
%82 = OpLoad %11 %21
%83 = OpLoad %11 %21
%84 = OpBitFieldInsert %11 %82 %83 %9 %10
OpStore %21 %84
%85 = OpLoad %12 %24
%86 = OpLoad %12 %24
%87 = OpBitFieldInsert %12 %85 %86 %9 %10
OpStore %24 %87
%88 = OpLoad %13 %27
%89 = OpLoad %13 %27
%90 = OpBitFieldInsert %13 %88 %89 %9 %10
OpStore %27 %90
%91 = OpLoad %6 %30
%92 = OpLoad %6 %30
%93 = OpBitFieldInsert %6 %91 %92 %9 %10
OpStore %30 %93
%94 = OpLoad %14 %32
%95 = OpLoad %14 %32
%96 = OpBitFieldInsert %14 %94 %95 %9 %10
OpStore %32 %96
%97 = OpLoad %15 %35
%98 = OpLoad %15 %35
%99 = OpBitFieldInsert %15 %97 %98 %9 %10
OpStore %35 %99
%100 = OpLoad %16 %38
%101 = OpLoad %16 %38
%102 = OpBitFieldInsert %16 %100 %101 %9 %10
OpStore %38 %102
%103 = OpLoad %4 %19
%104 = OpBitFieldSExtract %4 %103 %9 %10
OpStore %19 %104
%105 = OpLoad %11 %21
%106 = OpBitFieldSExtract %11 %105 %9 %10
OpStore %21 %106
%107 = OpLoad %12 %24
%108 = OpBitFieldSExtract %12 %107 %9 %10
OpStore %24 %108
%109 = OpLoad %13 %27
%110 = OpBitFieldSExtract %13 %109 %9 %10
OpStore %27 %110
%111 = OpLoad %6 %30
%112 = OpBitFieldUExtract %6 %111 %9 %10
OpStore %30 %112
%113 = OpLoad %14 %32
%114 = OpBitFieldUExtract %14 %113 %9 %10
OpStore %32 %114
%115 = OpLoad %15 %35
%116 = OpBitFieldUExtract %15 %115 %9 %10
OpStore %35 %116
%117 = OpLoad %16 %38
%118 = OpBitFieldUExtract %16 %117 %9 %10
OpStore %38 %118
%119 = OpLoad %4 %19
%120 = OpExtInst %4 %1 FindILsb %119
OpStore %19 %120
%121 = OpLoad %14 %32
%122 = OpExtInst %14 %1 FindILsb %121
OpStore %32 %122
%123 = OpLoad %12 %24
%124 = OpExtInst %12 %1 FindSMsb %123
OpStore %24 %124
%125 = OpLoad %6 %30
%126 = OpExtInst %6 %1 FindUMsb %125
OpStore %30 %126
%127 = OpLoad %4 %19
%128 = OpBitCount %4 %127
OpStore %19 %128
%129 = OpLoad %11 %21
%130 = OpBitCount %11 %129
OpStore %21 %130
%131 = OpLoad %12 %24
%132 = OpBitCount %12 %131
OpStore %24 %132
%133 = OpLoad %13 %27
%134 = OpBitCount %13 %133
OpStore %27 %134
%135 = OpLoad %6 %30
%136 = OpBitCount %6 %135
OpStore %30 %136
%137 = OpLoad %14 %32
%138 = OpBitCount %14 %137
OpStore %32 %138
%139 = OpLoad %15 %35
%140 = OpBitCount %15 %139
OpStore %35 %140
%141 = OpLoad %16 %38
%142 = OpBitCount %16 %141
OpStore %38 %142
%143 = OpLoad %4 %19
%144 = OpBitReverse %4 %143
OpStore %19 %144
%145 = OpLoad %11 %21
%146 = OpBitReverse %11 %145
OpStore %21 %146
%147 = OpLoad %12 %24
%148 = OpBitReverse %12 %147
OpStore %24 %148
%149 = OpLoad %13 %27
%150 = OpBitReverse %13 %149
OpStore %27 %150
%151 = OpLoad %6 %30
%152 = OpBitReverse %6 %151
OpStore %30 %152
%153 = OpLoad %14 %32
%154 = OpBitReverse %14 %153
OpStore %32 %154
%155 = OpLoad %15 %35
%156 = OpBitReverse %15 %155
OpStore %35 %156
%157 = OpLoad %16 %38
%158 = OpBitReverse %16 %157
OpStore %38 %158
%21 = OpConstantNull %4
%23 = OpTypePointer Function %11
%24 = OpConstantNull %11
%26 = OpTypePointer Function %12
%27 = OpConstantNull %12
%29 = OpTypePointer Function %13
%30 = OpConstantNull %13
%32 = OpTypePointer Function %6
%33 = OpConstantNull %6
%35 = OpTypePointer Function %14
%36 = OpConstantNull %14
%38 = OpTypePointer Function %15
%39 = OpConstantNull %15
%41 = OpTypePointer Function %16
%42 = OpConstantNull %16
%44 = OpTypePointer Function %17
%45 = OpConstantNull %17
%47 = OpTypePointer Function %18
%48 = OpConstantNull %18
%51 = OpTypeFunction %2
%50 = OpFunction %2 None %51
%49 = OpLabel
%46 = OpVariable %47 Function %48
%37 = OpVariable %38 Function %39
%28 = OpVariable %29 Function %30
%19 = OpVariable %20 Function %21
%40 = OpVariable %41 Function %42
%31 = OpVariable %32 Function %33
%22 = OpVariable %23 Function %24
%43 = OpVariable %44 Function %45
%34 = OpVariable %35 Function %36
%25 = OpVariable %26 Function %27
OpBranch %52
%52 = OpLabel
OpStore %19 %3
%53 = OpCompositeConstruct %11 %3 %3
OpStore %22 %53
%54 = OpCompositeConstruct %12 %3 %3 %3
OpStore %25 %54
%55 = OpCompositeConstruct %13 %3 %3 %3 %3
OpStore %28 %55
OpStore %31 %5
%56 = OpCompositeConstruct %14 %5 %5
OpStore %34 %56
%57 = OpCompositeConstruct %15 %5 %5 %5
OpStore %37 %57
%58 = OpCompositeConstruct %16 %5 %5 %5 %5
OpStore %40 %58
%59 = OpCompositeConstruct %17 %7 %7
OpStore %43 %59
%60 = OpCompositeConstruct %18 %7 %7 %7 %7
OpStore %46 %60
%61 = OpLoad %18 %46
%62 = OpExtInst %6 %1 PackSnorm4x8 %61
OpStore %31 %62
%63 = OpLoad %18 %46
%64 = OpExtInst %6 %1 PackUnorm4x8 %63
OpStore %31 %64
%65 = OpLoad %17 %43
%66 = OpExtInst %6 %1 PackSnorm2x16 %65
OpStore %31 %66
%67 = OpLoad %17 %43
%68 = OpExtInst %6 %1 PackUnorm2x16 %67
OpStore %31 %68
%69 = OpLoad %17 %43
%70 = OpExtInst %6 %1 PackHalf2x16 %69
OpStore %31 %70
%71 = OpLoad %6 %31
%72 = OpExtInst %18 %1 UnpackSnorm4x8 %71
OpStore %46 %72
%73 = OpLoad %6 %31
%74 = OpExtInst %18 %1 UnpackUnorm4x8 %73
OpStore %46 %74
%75 = OpLoad %6 %31
%76 = OpExtInst %17 %1 UnpackSnorm2x16 %75
OpStore %43 %76
%77 = OpLoad %6 %31
%78 = OpExtInst %17 %1 UnpackUnorm2x16 %77
OpStore %43 %78
%79 = OpLoad %6 %31
%80 = OpExtInst %17 %1 UnpackHalf2x16 %79
OpStore %43 %80
%81 = OpLoad %4 %19
%82 = OpLoad %4 %19
%83 = OpBitFieldInsert %4 %81 %82 %9 %10
OpStore %19 %83
%84 = OpLoad %11 %22
%85 = OpLoad %11 %22
%86 = OpBitFieldInsert %11 %84 %85 %9 %10
OpStore %22 %86
%87 = OpLoad %12 %25
%88 = OpLoad %12 %25
%89 = OpBitFieldInsert %12 %87 %88 %9 %10
OpStore %25 %89
%90 = OpLoad %13 %28
%91 = OpLoad %13 %28
%92 = OpBitFieldInsert %13 %90 %91 %9 %10
OpStore %28 %92
%93 = OpLoad %6 %31
%94 = OpLoad %6 %31
%95 = OpBitFieldInsert %6 %93 %94 %9 %10
OpStore %31 %95
%96 = OpLoad %14 %34
%97 = OpLoad %14 %34
%98 = OpBitFieldInsert %14 %96 %97 %9 %10
OpStore %34 %98
%99 = OpLoad %15 %37
%100 = OpLoad %15 %37
%101 = OpBitFieldInsert %15 %99 %100 %9 %10
OpStore %37 %101
%102 = OpLoad %16 %40
%103 = OpLoad %16 %40
%104 = OpBitFieldInsert %16 %102 %103 %9 %10
OpStore %40 %104
%105 = OpLoad %4 %19
%106 = OpBitFieldSExtract %4 %105 %9 %10
OpStore %19 %106
%107 = OpLoad %11 %22
%108 = OpBitFieldSExtract %11 %107 %9 %10
OpStore %22 %108
%109 = OpLoad %12 %25
%110 = OpBitFieldSExtract %12 %109 %9 %10
OpStore %25 %110
%111 = OpLoad %13 %28
%112 = OpBitFieldSExtract %13 %111 %9 %10
OpStore %28 %112
%113 = OpLoad %6 %31
%114 = OpBitFieldUExtract %6 %113 %9 %10
OpStore %31 %114
%115 = OpLoad %14 %34
%116 = OpBitFieldUExtract %14 %115 %9 %10
OpStore %34 %116
%117 = OpLoad %15 %37
%118 = OpBitFieldUExtract %15 %117 %9 %10
OpStore %37 %118
%119 = OpLoad %16 %40
%120 = OpBitFieldUExtract %16 %119 %9 %10
OpStore %40 %120
%121 = OpLoad %4 %19
%122 = OpExtInst %4 %1 FindILsb %121
OpStore %19 %122
%123 = OpLoad %14 %34
%124 = OpExtInst %14 %1 FindILsb %123
OpStore %34 %124
%125 = OpLoad %12 %25
%126 = OpExtInst %12 %1 FindSMsb %125
OpStore %25 %126
%127 = OpLoad %6 %31
%128 = OpExtInst %6 %1 FindUMsb %127
OpStore %31 %128
%129 = OpLoad %4 %19
%130 = OpBitCount %4 %129
OpStore %19 %130
%131 = OpLoad %11 %22
%132 = OpBitCount %11 %131
OpStore %22 %132
%133 = OpLoad %12 %25
%134 = OpBitCount %12 %133
OpStore %25 %134
%135 = OpLoad %13 %28
%136 = OpBitCount %13 %135
OpStore %28 %136
%137 = OpLoad %6 %31
%138 = OpBitCount %6 %137
OpStore %31 %138
%139 = OpLoad %14 %34
%140 = OpBitCount %14 %139
OpStore %34 %140
%141 = OpLoad %15 %37
%142 = OpBitCount %15 %141
OpStore %37 %142
%143 = OpLoad %16 %40
%144 = OpBitCount %16 %143
OpStore %40 %144
%145 = OpLoad %4 %19
%146 = OpBitReverse %4 %145
OpStore %19 %146
%147 = OpLoad %11 %22
%148 = OpBitReverse %11 %147
OpStore %22 %148
%149 = OpLoad %12 %25
%150 = OpBitReverse %12 %149
OpStore %25 %150
%151 = OpLoad %13 %28
%152 = OpBitReverse %13 %151
OpStore %28 %152
%153 = OpLoad %6 %31
%154 = OpBitReverse %6 %153
OpStore %31 %154
%155 = OpLoad %14 %34
%156 = OpBitReverse %14 %155
OpStore %34 %156
%157 = OpLoad %15 %37
%158 = OpBitReverse %15 %157
OpStore %37 %158
%159 = OpLoad %16 %40
%160 = OpBitReverse %16 %159
OpStore %40 %160
OpReturn
OpFunctionEnd

View File

@ -1,13 +1,13 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 213
; Bound: 216
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %51 "main" %48
OpExecutionMode %51 LocalSize 64 1 1
OpEntryPoint GLCompute %54 "main" %51
OpExecutionMode %54 LocalSize 64 1 1
OpSource GLSL 450
OpName %3 "NUM_PARTICLES"
OpMemberName %16 0 "pos"
@ -32,12 +32,12 @@ OpName %32 "cMass"
OpName %34 "cVel"
OpName %36 "colVel"
OpName %38 "cMassCount"
OpName %40 "cVelCount"
OpName %41 "pos"
OpName %43 "vel"
OpName %45 "i"
OpName %48 "global_invocation_id"
OpName %51 "main"
OpName %41 "cVelCount"
OpName %43 "pos"
OpName %45 "vel"
OpName %47 "i"
OpName %51 "global_invocation_id"
OpName %54 "main"
OpMemberDecorate %16 0 Offset 0
OpMemberDecorate %16 1 Offset 8
OpMemberDecorate %17 0 Offset 0
@ -60,7 +60,7 @@ OpDecorate %19 Block
OpDecorate %26 DescriptorSet 0
OpDecorate %26 Binding 2
OpDecorate %19 Block
OpDecorate %48 BuiltIn GlobalInvocationId
OpDecorate %51 BuiltIn GlobalInvocationId
%2 = OpTypeVoid
%4 = OpTypeInt 32 0
%3 = OpConstant %4 1500
@ -93,250 +93,256 @@ OpDecorate %48 BuiltIn GlobalInvocationId
%35 = OpConstantNull %15
%37 = OpConstantNull %15
%39 = OpTypePointer Function %8
%42 = OpConstantNull %15
%40 = OpConstantNull %8
%42 = OpConstantNull %8
%44 = OpConstantNull %15
%46 = OpTypePointer Function %4
%49 = OpTypePointer Input %20
%48 = OpVariable %49 Input
%52 = OpTypeFunction %2
%53 = OpTypePointer Uniform %17
%57 = OpTypeBool
%61 = OpTypePointer StorageBuffer %18
%62 = OpTypePointer StorageBuffer %16
%63 = OpTypePointer StorageBuffer %15
%92 = OpTypePointer Uniform %6
%106 = OpConstant %4 2
%120 = OpConstant %4 3
%155 = OpConstant %4 4
%161 = OpConstant %4 5
%167 = OpConstant %4 6
%184 = OpTypePointer Function %6
%51 = OpFunction %2 None %52
%47 = OpLabel
%45 = OpVariable %46 Function %9
%40 = OpVariable %39 Function %7
%46 = OpConstantNull %15
%48 = OpTypePointer Function %4
%49 = OpConstantNull %4
%52 = OpTypePointer Input %20
%51 = OpVariable %52 Input
%55 = OpTypeFunction %2
%56 = OpTypePointer Uniform %17
%60 = OpTypeBool
%64 = OpTypePointer StorageBuffer %18
%65 = OpTypePointer StorageBuffer %16
%66 = OpTypePointer StorageBuffer %15
%95 = OpTypePointer Uniform %6
%109 = OpConstant %4 2
%123 = OpConstant %4 3
%158 = OpConstant %4 4
%164 = OpConstant %4 5
%170 = OpConstant %4 6
%187 = OpTypePointer Function %6
%54 = OpFunction %2 None %55
%50 = OpLabel
%47 = OpVariable %48 Function %49
%41 = OpVariable %39 Function %42
%34 = OpVariable %28 Function %35
%27 = OpVariable %28 Function %29
%41 = OpVariable %28 Function %42
%43 = OpVariable %28 Function %44
%36 = OpVariable %28 Function %37
%30 = OpVariable %28 Function %31
%43 = OpVariable %28 Function %44
%38 = OpVariable %39 Function %7
%45 = OpVariable %28 Function %46
%38 = OpVariable %39 Function %40
%32 = OpVariable %28 Function %33
%50 = OpLoad %20 %48
%54 = OpAccessChain %53 %21 %9
OpBranch %55
%55 = OpLabel
%56 = OpCompositeExtract %4 %50 0
%58 = OpUGreaterThanEqual %57 %56 %3
OpSelectionMerge %59 None
OpBranchConditional %58 %60 %59
%60 = OpLabel
%53 = OpLoad %20 %51
%57 = OpAccessChain %56 %21 %9
OpBranch %58
%58 = OpLabel
%59 = OpCompositeExtract %4 %53 0
%61 = OpUGreaterThanEqual %60 %59 %3
OpSelectionMerge %62 None
OpBranchConditional %61 %63 %62
%63 = OpLabel
OpReturn
%59 = OpLabel
%64 = OpAccessChain %63 %24 %9 %56 %9
%65 = OpLoad %15 %64
OpStore %27 %65
%66 = OpAccessChain %63 %24 %9 %56 %11
%67 = OpLoad %15 %66
OpStore %30 %67
%68 = OpCompositeConstruct %15 %5 %5
OpStore %32 %68
%69 = OpCompositeConstruct %15 %5 %5
OpStore %34 %69
%70 = OpCompositeConstruct %15 %5 %5
OpStore %36 %70
OpBranch %71
%71 = OpLabel
OpLoopMerge %72 %74 None
OpBranch %73
%73 = OpLabel
%75 = OpLoad %4 %45
%76 = OpUGreaterThanEqual %57 %75 %3
OpSelectionMerge %77 None
OpBranchConditional %76 %78 %77
%78 = OpLabel
OpBranch %72
%77 = OpLabel
%79 = OpLoad %4 %45
%80 = OpIEqual %57 %79 %56
OpSelectionMerge %81 None
OpBranchConditional %80 %82 %81
%82 = OpLabel
OpBranch %74
%81 = OpLabel
%83 = OpLoad %4 %45
%84 = OpAccessChain %63 %24 %9 %83 %9
%85 = OpLoad %15 %84
OpStore %41 %85
%86 = OpLoad %4 %45
%87 = OpAccessChain %63 %24 %9 %86 %11
%88 = OpLoad %15 %87
OpStore %43 %88
%89 = OpLoad %15 %41
%90 = OpLoad %15 %27
%91 = OpExtInst %6 %1 Distance %89 %90
%93 = OpAccessChain %92 %54 %11
%94 = OpLoad %6 %93
%95 = OpFOrdLessThan %57 %91 %94
OpSelectionMerge %96 None
OpBranchConditional %95 %97 %96
%97 = OpLabel
%98 = OpLoad %15 %32
%99 = OpLoad %15 %41
%100 = OpFAdd %15 %98 %99
OpStore %32 %100
%101 = OpLoad %8 %38
%102 = OpIAdd %8 %101 %10
OpStore %38 %102
OpBranch %96
%96 = OpLabel
%103 = OpLoad %15 %41
%104 = OpLoad %15 %27
%105 = OpExtInst %6 %1 Distance %103 %104
%107 = OpAccessChain %92 %54 %106
%108 = OpLoad %6 %107
%109 = OpFOrdLessThan %57 %105 %108
OpSelectionMerge %110 None
OpBranchConditional %109 %111 %110
%111 = OpLabel
%112 = OpLoad %15 %36
%113 = OpLoad %15 %41
%114 = OpLoad %15 %27
%115 = OpFSub %15 %113 %114
%116 = OpFSub %15 %112 %115
OpStore %36 %116
OpBranch %110
%110 = OpLabel
%117 = OpLoad %15 %41
%118 = OpLoad %15 %27
%119 = OpExtInst %6 %1 Distance %117 %118
%121 = OpAccessChain %92 %54 %120
%122 = OpLoad %6 %121
%123 = OpFOrdLessThan %57 %119 %122
OpSelectionMerge %124 None
OpBranchConditional %123 %125 %124
%125 = OpLabel
%126 = OpLoad %15 %34
%127 = OpLoad %15 %43
%128 = OpFAdd %15 %126 %127
OpStore %34 %128
%129 = OpLoad %8 %40
%130 = OpIAdd %8 %129 %10
OpStore %40 %130
OpBranch %124
%124 = OpLabel
%62 = OpLabel
%67 = OpAccessChain %66 %24 %9 %59 %9
%68 = OpLoad %15 %67
OpStore %27 %68
%69 = OpAccessChain %66 %24 %9 %59 %11
%70 = OpLoad %15 %69
OpStore %30 %70
%71 = OpCompositeConstruct %15 %5 %5
OpStore %32 %71
%72 = OpCompositeConstruct %15 %5 %5
OpStore %34 %72
%73 = OpCompositeConstruct %15 %5 %5
OpStore %36 %73
OpStore %38 %7
OpStore %41 %7
OpStore %47 %9
OpBranch %74
%74 = OpLabel
%131 = OpLoad %4 %45
%132 = OpIAdd %4 %131 %11
OpStore %45 %132
OpBranch %71
%72 = OpLabel
%133 = OpLoad %8 %38
%134 = OpSGreaterThan %57 %133 %7
OpSelectionMerge %135 None
OpBranchConditional %134 %136 %135
%136 = OpLabel
%137 = OpLoad %15 %32
%138 = OpLoad %8 %38
%139 = OpConvertSToF %6 %138
%140 = OpCompositeConstruct %15 %139 %139
%141 = OpFDiv %15 %137 %140
%142 = OpLoad %15 %27
%143 = OpFSub %15 %141 %142
OpStore %32 %143
OpBranch %135
%135 = OpLabel
%144 = OpLoad %8 %40
%145 = OpSGreaterThan %57 %144 %7
OpSelectionMerge %146 None
OpBranchConditional %145 %147 %146
%147 = OpLabel
%148 = OpLoad %15 %34
%149 = OpLoad %8 %40
%150 = OpConvertSToF %6 %149
%151 = OpCompositeConstruct %15 %150 %150
%152 = OpFDiv %15 %148 %151
OpStore %34 %152
OpBranch %146
%146 = OpLabel
%153 = OpLoad %15 %30
%154 = OpLoad %15 %32
%156 = OpAccessChain %92 %54 %155
%157 = OpLoad %6 %156
%158 = OpVectorTimesScalar %15 %154 %157
%159 = OpFAdd %15 %153 %158
%160 = OpLoad %15 %36
%162 = OpAccessChain %92 %54 %161
%163 = OpLoad %6 %162
%164 = OpVectorTimesScalar %15 %160 %163
%165 = OpFAdd %15 %159 %164
%166 = OpLoad %15 %34
%168 = OpAccessChain %92 %54 %167
%169 = OpLoad %6 %168
%170 = OpVectorTimesScalar %15 %166 %169
%171 = OpFAdd %15 %165 %170
OpStore %30 %171
%172 = OpLoad %15 %30
%173 = OpExtInst %15 %1 Normalize %172
%174 = OpLoad %15 %30
%175 = OpExtInst %6 %1 Length %174
%176 = OpExtInst %6 %1 FClamp %175 %5 %12
%177 = OpVectorTimesScalar %15 %173 %176
OpStore %30 %177
%178 = OpLoad %15 %27
%179 = OpLoad %15 %30
%180 = OpAccessChain %92 %54 %9
%181 = OpLoad %6 %180
%182 = OpVectorTimesScalar %15 %179 %181
%183 = OpFAdd %15 %178 %182
OpStore %27 %183
%185 = OpAccessChain %184 %27 %9
%186 = OpLoad %6 %185
%187 = OpFOrdLessThan %57 %186 %13
OpSelectionMerge %188 None
OpBranchConditional %187 %189 %188
%189 = OpLabel
%190 = OpAccessChain %184 %27 %9
OpStore %190 %14
OpBranch %188
%188 = OpLabel
%191 = OpAccessChain %184 %27 %9
%192 = OpLoad %6 %191
%193 = OpFOrdGreaterThan %57 %192 %14
OpSelectionMerge %194 None
OpBranchConditional %193 %195 %194
%195 = OpLabel
%196 = OpAccessChain %184 %27 %9
OpStore %196 %13
OpBranch %194
%194 = OpLabel
%197 = OpAccessChain %184 %27 %11
%198 = OpLoad %6 %197
%199 = OpFOrdLessThan %57 %198 %13
OpSelectionMerge %200 None
OpBranchConditional %199 %201 %200
%201 = OpLabel
%202 = OpAccessChain %184 %27 %11
OpStore %202 %14
OpBranch %200
%200 = OpLabel
%203 = OpAccessChain %184 %27 %11
%204 = OpLoad %6 %203
%205 = OpFOrdGreaterThan %57 %204 %14
OpSelectionMerge %206 None
OpBranchConditional %205 %207 %206
%207 = OpLabel
%208 = OpAccessChain %184 %27 %11
OpStore %208 %13
OpBranch %206
%206 = OpLabel
%209 = OpLoad %15 %27
%210 = OpAccessChain %63 %26 %9 %56 %9
OpStore %210 %209
%211 = OpLoad %15 %30
%212 = OpAccessChain %63 %26 %9 %56 %11
OpStore %212 %211
OpLoopMerge %75 %77 None
OpBranch %76
%76 = OpLabel
%78 = OpLoad %4 %47
%79 = OpUGreaterThanEqual %60 %78 %3
OpSelectionMerge %80 None
OpBranchConditional %79 %81 %80
%81 = OpLabel
OpBranch %75
%80 = OpLabel
%82 = OpLoad %4 %47
%83 = OpIEqual %60 %82 %59
OpSelectionMerge %84 None
OpBranchConditional %83 %85 %84
%85 = OpLabel
OpBranch %77
%84 = OpLabel
%86 = OpLoad %4 %47
%87 = OpAccessChain %66 %24 %9 %86 %9
%88 = OpLoad %15 %87
OpStore %43 %88
%89 = OpLoad %4 %47
%90 = OpAccessChain %66 %24 %9 %89 %11
%91 = OpLoad %15 %90
OpStore %45 %91
%92 = OpLoad %15 %43
%93 = OpLoad %15 %27
%94 = OpExtInst %6 %1 Distance %92 %93
%96 = OpAccessChain %95 %57 %11
%97 = OpLoad %6 %96
%98 = OpFOrdLessThan %60 %94 %97
OpSelectionMerge %99 None
OpBranchConditional %98 %100 %99
%100 = OpLabel
%101 = OpLoad %15 %32
%102 = OpLoad %15 %43
%103 = OpFAdd %15 %101 %102
OpStore %32 %103
%104 = OpLoad %8 %38
%105 = OpIAdd %8 %104 %10
OpStore %38 %105
OpBranch %99
%99 = OpLabel
%106 = OpLoad %15 %43
%107 = OpLoad %15 %27
%108 = OpExtInst %6 %1 Distance %106 %107
%110 = OpAccessChain %95 %57 %109
%111 = OpLoad %6 %110
%112 = OpFOrdLessThan %60 %108 %111
OpSelectionMerge %113 None
OpBranchConditional %112 %114 %113
%114 = OpLabel
%115 = OpLoad %15 %36
%116 = OpLoad %15 %43
%117 = OpLoad %15 %27
%118 = OpFSub %15 %116 %117
%119 = OpFSub %15 %115 %118
OpStore %36 %119
OpBranch %113
%113 = OpLabel
%120 = OpLoad %15 %43
%121 = OpLoad %15 %27
%122 = OpExtInst %6 %1 Distance %120 %121
%124 = OpAccessChain %95 %57 %123
%125 = OpLoad %6 %124
%126 = OpFOrdLessThan %60 %122 %125
OpSelectionMerge %127 None
OpBranchConditional %126 %128 %127
%128 = OpLabel
%129 = OpLoad %15 %34
%130 = OpLoad %15 %45
%131 = OpFAdd %15 %129 %130
OpStore %34 %131
%132 = OpLoad %8 %41
%133 = OpIAdd %8 %132 %10
OpStore %41 %133
OpBranch %127
%127 = OpLabel
OpBranch %77
%77 = OpLabel
%134 = OpLoad %4 %47
%135 = OpIAdd %4 %134 %11
OpStore %47 %135
OpBranch %74
%75 = OpLabel
%136 = OpLoad %8 %38
%137 = OpSGreaterThan %60 %136 %7
OpSelectionMerge %138 None
OpBranchConditional %137 %139 %138
%139 = OpLabel
%140 = OpLoad %15 %32
%141 = OpLoad %8 %38
%142 = OpConvertSToF %6 %141
%143 = OpCompositeConstruct %15 %142 %142
%144 = OpFDiv %15 %140 %143
%145 = OpLoad %15 %27
%146 = OpFSub %15 %144 %145
OpStore %32 %146
OpBranch %138
%138 = OpLabel
%147 = OpLoad %8 %41
%148 = OpSGreaterThan %60 %147 %7
OpSelectionMerge %149 None
OpBranchConditional %148 %150 %149
%150 = OpLabel
%151 = OpLoad %15 %34
%152 = OpLoad %8 %41
%153 = OpConvertSToF %6 %152
%154 = OpCompositeConstruct %15 %153 %153
%155 = OpFDiv %15 %151 %154
OpStore %34 %155
OpBranch %149
%149 = OpLabel
%156 = OpLoad %15 %30
%157 = OpLoad %15 %32
%159 = OpAccessChain %95 %57 %158
%160 = OpLoad %6 %159
%161 = OpVectorTimesScalar %15 %157 %160
%162 = OpFAdd %15 %156 %161
%163 = OpLoad %15 %36
%165 = OpAccessChain %95 %57 %164
%166 = OpLoad %6 %165
%167 = OpVectorTimesScalar %15 %163 %166
%168 = OpFAdd %15 %162 %167
%169 = OpLoad %15 %34
%171 = OpAccessChain %95 %57 %170
%172 = OpLoad %6 %171
%173 = OpVectorTimesScalar %15 %169 %172
%174 = OpFAdd %15 %168 %173
OpStore %30 %174
%175 = OpLoad %15 %30
%176 = OpExtInst %15 %1 Normalize %175
%177 = OpLoad %15 %30
%178 = OpExtInst %6 %1 Length %177
%179 = OpExtInst %6 %1 FClamp %178 %5 %12
%180 = OpVectorTimesScalar %15 %176 %179
OpStore %30 %180
%181 = OpLoad %15 %27
%182 = OpLoad %15 %30
%183 = OpAccessChain %95 %57 %9
%184 = OpLoad %6 %183
%185 = OpVectorTimesScalar %15 %182 %184
%186 = OpFAdd %15 %181 %185
OpStore %27 %186
%188 = OpAccessChain %187 %27 %9
%189 = OpLoad %6 %188
%190 = OpFOrdLessThan %60 %189 %13
OpSelectionMerge %191 None
OpBranchConditional %190 %192 %191
%192 = OpLabel
%193 = OpAccessChain %187 %27 %9
OpStore %193 %14
OpBranch %191
%191 = OpLabel
%194 = OpAccessChain %187 %27 %9
%195 = OpLoad %6 %194
%196 = OpFOrdGreaterThan %60 %195 %14
OpSelectionMerge %197 None
OpBranchConditional %196 %198 %197
%198 = OpLabel
%199 = OpAccessChain %187 %27 %9
OpStore %199 %13
OpBranch %197
%197 = OpLabel
%200 = OpAccessChain %187 %27 %11
%201 = OpLoad %6 %200
%202 = OpFOrdLessThan %60 %201 %13
OpSelectionMerge %203 None
OpBranchConditional %202 %204 %203
%204 = OpLabel
%205 = OpAccessChain %187 %27 %11
OpStore %205 %14
OpBranch %203
%203 = OpLabel
%206 = OpAccessChain %187 %27 %11
%207 = OpLoad %6 %206
%208 = OpFOrdGreaterThan %60 %207 %14
OpSelectionMerge %209 None
OpBranchConditional %208 %210 %209
%210 = OpLabel
%211 = OpAccessChain %187 %27 %11
OpStore %211 %13
OpBranch %209
%209 = OpLabel
%212 = OpLoad %15 %27
%213 = OpAccessChain %66 %26 %9 %59 %9
OpStore %213 %212
%214 = OpLoad %15 %30
%215 = OpAccessChain %66 %26 %9 %59 %11
OpStore %215 %214
OpReturn
OpFunctionEnd

View File

@ -1,29 +1,29 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 60
; Bound: 63
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %49 "main" %46
OpExecutionMode %49 LocalSize 1 1 1
OpEntryPoint GLCompute %52 "main" %49
OpExecutionMode %52 LocalSize 1 1 1
OpSource GLSL 450
OpMemberName %9 0 "data"
OpName %9 "PrimeIndices"
OpName %11 "v_indices"
OpName %13 "n"
OpName %16 "i"
OpName %18 "n_base"
OpName %19 "collatz_iterations"
OpName %46 "global_id"
OpName %49 "main"
OpName %19 "n_base"
OpName %20 "collatz_iterations"
OpName %49 "global_id"
OpName %52 "main"
OpDecorate %8 ArrayStride 4
OpMemberDecorate %9 0 Offset 0
OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 0
OpDecorate %9 Block
OpDecorate %46 BuiltIn GlobalInvocationId
OpDecorate %49 BuiltIn GlobalInvocationId
%2 = OpTypeVoid
%4 = OpTypeInt 32 0
%3 = OpConstant %4 0
@ -37,71 +37,77 @@ OpDecorate %46 BuiltIn GlobalInvocationId
%11 = OpVariable %12 StorageBuffer
%14 = OpTypePointer Function %4
%15 = OpConstantNull %4
%20 = OpTypeFunction %4 %4
%27 = OpTypeBool
%47 = OpTypePointer Input %10
%46 = OpVariable %47 Input
%50 = OpTypeFunction %2
%52 = OpTypePointer StorageBuffer %8
%54 = OpTypePointer StorageBuffer %4
%19 = OpFunction %4 None %20
%18 = OpFunctionParameter %4
%17 = OpLabel
%17 = OpConstantNull %4
%21 = OpTypeFunction %4 %4
%28 = OpTypeBool
%50 = OpTypePointer Input %10
%49 = OpVariable %50 Input
%53 = OpTypeFunction %2
%55 = OpTypePointer StorageBuffer %8
%57 = OpTypePointer StorageBuffer %4
%20 = OpFunction %4 None %21
%19 = OpFunctionParameter %4
%18 = OpLabel
%13 = OpVariable %14 Function %15
%16 = OpVariable %14 Function %3
OpBranch %21
%21 = OpLabel
OpStore %13 %18
%16 = OpVariable %14 Function %17
OpBranch %22
%22 = OpLabel
OpLoopMerge %23 %25 None
OpBranch %24
%24 = OpLabel
%26 = OpLoad %4 %13
%28 = OpUGreaterThan %27 %26 %5
OpSelectionMerge %29 None
OpBranchConditional %28 %29 %30
%30 = OpLabel
OpStore %13 %19
OpStore %16 %3
OpBranch %23
%29 = OpLabel
%31 = OpLoad %4 %13
%32 = OpUMod %4 %31 %6
%33 = OpIEqual %27 %32 %3
OpSelectionMerge %34 None
OpBranchConditional %33 %35 %36
%35 = OpLabel
%37 = OpLoad %4 %13
%38 = OpUDiv %4 %37 %6
OpStore %13 %38
OpBranch %34
%36 = OpLabel
%39 = OpLoad %4 %13
%40 = OpIMul %4 %7 %39
%41 = OpIAdd %4 %40 %5
OpStore %13 %41
OpBranch %34
%34 = OpLabel
%42 = OpLoad %4 %16
%43 = OpIAdd %4 %42 %5
OpStore %16 %43
%23 = OpLabel
OpLoopMerge %24 %26 None
OpBranch %25
%25 = OpLabel
OpBranch %22
%23 = OpLabel
%44 = OpLoad %4 %16
OpReturnValue %44
%27 = OpLoad %4 %13
%29 = OpUGreaterThan %28 %27 %5
OpSelectionMerge %30 None
OpBranchConditional %29 %30 %31
%31 = OpLabel
OpBranch %24
%30 = OpLabel
OpBranch %32
%32 = OpLabel
%34 = OpLoad %4 %13
%35 = OpUMod %4 %34 %6
%36 = OpIEqual %28 %35 %3
OpSelectionMerge %37 None
OpBranchConditional %36 %38 %39
%38 = OpLabel
%40 = OpLoad %4 %13
%41 = OpUDiv %4 %40 %6
OpStore %13 %41
OpBranch %37
%39 = OpLabel
%42 = OpLoad %4 %13
%43 = OpIMul %4 %7 %42
%44 = OpIAdd %4 %43 %5
OpStore %13 %44
OpBranch %37
%37 = OpLabel
%45 = OpLoad %4 %16
%46 = OpIAdd %4 %45 %5
OpStore %16 %46
OpBranch %33
%33 = OpLabel
OpBranch %26
%26 = OpLabel
OpBranch %23
%24 = OpLabel
%47 = OpLoad %4 %16
OpReturnValue %47
OpFunctionEnd
%49 = OpFunction %2 None %50
%45 = OpLabel
%48 = OpLoad %10 %46
OpBranch %51
%51 = OpLabel
%53 = OpCompositeExtract %4 %48 0
%55 = OpCompositeExtract %4 %48 0
%56 = OpAccessChain %54 %11 %3 %55
%57 = OpLoad %4 %56
%58 = OpFunctionCall %4 %19 %57
%59 = OpAccessChain %54 %11 %3 %53
OpStore %59 %58
%52 = OpFunction %2 None %53
%48 = OpLabel
%51 = OpLoad %10 %49
OpBranch %54
%54 = OpLabel
%56 = OpCompositeExtract %4 %51 0
%58 = OpCompositeExtract %4 %51 0
%59 = OpAccessChain %57 %11 %3 %58
%60 = OpLoad %4 %59
%61 = OpFunctionCall %4 %20 %60
%62 = OpAccessChain %57 %11 %3 %56
OpStore %62 %61
OpReturn
OpFunctionEnd

View File

@ -7,18 +7,18 @@ OpCapability Float64
OpCapability Geometry
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %24 "main" %16 %19 %22
OpExecutionMode %24 OriginUpperLeft
OpEntryPoint Fragment %25 "main" %17 %20 %23
OpExecutionMode %25 OriginUpperLeft
OpMemberDecorate %8 0 Offset 0
OpMemberDecorate %8 1 Offset 16
OpMemberDecorate %10 0 Offset 0
OpMemberDecorate %10 1 Offset 16
OpDecorate %12 Block
OpMemberDecorate %12 0 Offset 0
OpDecorate %16 Location 0
OpDecorate %19 BuiltIn PrimitiveId
OpDecorate %19 Flat
OpDecorate %22 Location 0
OpDecorate %13 Block
OpMemberDecorate %13 0 Offset 0
OpDecorate %17 Location 0
OpDecorate %20 BuiltIn PrimitiveId
OpDecorate %20 Flat
OpDecorate %23 Location 0
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpConstant %4 1.0
@ -28,49 +28,49 @@ OpDecorate %22 Location 0
%8 = OpTypeStruct %5 %6
%9 = OpTypeVector %4 4
%10 = OpTypeStruct %9 %5
%12 = OpTypeStruct %8
%13 = OpTypePointer PushConstant %12
%11 = OpVariable %13 PushConstant
%17 = OpTypePointer Input %9
%16 = OpVariable %17 Input
%20 = OpTypePointer Input %5
%19 = OpVariable %20 Input
%23 = OpTypePointer Output %9
%22 = OpVariable %23 Output
%25 = OpTypeFunction %2
%26 = OpTypePointer PushConstant %8
%27 = OpConstant %5 0
%31 = OpTypePointer PushConstant %5
%34 = OpTypeBool
%40 = OpTypeVector %4 3
%24 = OpFunction %2 None %25
%14 = OpLabel
%18 = OpLoad %9 %16
%21 = OpLoad %5 %19
%15 = OpCompositeConstruct %10 %18 %21
%28 = OpAccessChain %26 %11 %27
OpBranch %29
%29 = OpLabel
%30 = OpCompositeExtract %5 %15 1
%32 = OpAccessChain %31 %28 %27
%33 = OpLoad %5 %32
%35 = OpIEqual %34 %30 %33
OpSelectionMerge %36 None
OpBranchConditional %35 %37 %38
%37 = OpLabel
%39 = OpCompositeExtract %9 %15 0
OpStore %22 %39
OpReturn
%11 = OpTypeVector %4 3
%13 = OpTypeStruct %8
%14 = OpTypePointer PushConstant %13
%12 = OpVariable %14 PushConstant
%18 = OpTypePointer Input %9
%17 = OpVariable %18 Input
%21 = OpTypePointer Input %5
%20 = OpVariable %21 Input
%24 = OpTypePointer Output %9
%23 = OpVariable %24 Output
%26 = OpTypeFunction %2
%27 = OpTypePointer PushConstant %8
%28 = OpConstant %5 0
%32 = OpTypePointer PushConstant %5
%35 = OpTypeBool
%25 = OpFunction %2 None %26
%15 = OpLabel
%19 = OpLoad %9 %17
%22 = OpLoad %5 %20
%16 = OpCompositeConstruct %10 %19 %22
%29 = OpAccessChain %27 %12 %28
OpBranch %30
%30 = OpLabel
%31 = OpCompositeExtract %5 %16 1
%33 = OpAccessChain %32 %29 %28
%34 = OpLoad %5 %33
%36 = OpIEqual %35 %31 %34
OpSelectionMerge %37 None
OpBranchConditional %36 %38 %39
%38 = OpLabel
%41 = OpCompositeConstruct %40 %3 %3 %3
%42 = OpCompositeExtract %9 %15 0
%43 = OpVectorShuffle %40 %42 %42 0 1 2
%44 = OpFSub %40 %41 %43
%45 = OpCompositeExtract %9 %15 0
%40 = OpCompositeExtract %9 %16 0
OpStore %23 %40
OpReturn
%39 = OpLabel
%41 = OpCompositeConstruct %11 %3 %3 %3
%42 = OpCompositeExtract %9 %16 0
%43 = OpVectorShuffle %11 %42 %42 0 1 2
%44 = OpFSub %11 %41 %43
%45 = OpCompositeExtract %9 %16 0
%46 = OpCompositeExtract %4 %45 3
%47 = OpCompositeConstruct %9 %44 %46
OpStore %22 %47
OpStore %23 %47
OpReturn
%36 = OpLabel
%37 = OpLabel
OpReturn
OpFunctionEnd

View File

@ -18,55 +18,55 @@ OpExecutionMode %74 LocalSize 1 1 1
%10 = OpConstant %7 4
%11 = OpConstant %7 2
%12 = OpTypeVector %4 2
%15 = OpTypeFunction %12
%23 = OpTypeFunction %7
%25 = OpTypeVector %7 2
%37 = OpTypeVector %9 3
%53 = OpTypeVector %7 4
%13 = OpTypeVector %7 2
%14 = OpTypeVector %9 3
%15 = OpTypeVector %7 4
%18 = OpTypeFunction %12
%26 = OpTypeFunction %7
%75 = OpTypeFunction %2
%29 = OpConstantNull %7
%41 = OpConstantNull %9
%31 = OpConstantNull %7
%42 = OpConstantNull %9
%57 = OpConstantNull %7
%14 = OpFunction %12 None %15
%13 = OpLabel
OpBranch %16
%17 = OpFunction %12 None %18
%16 = OpLabel
%17 = OpCompositeConstruct %12 %3 %3
%18 = OpCompositeConstruct %12 %5 %5
%19 = OpCompositeConstruct %12 %5 %5
%20 = OpExtInst %12 %1 Fma %17 %18 %19
OpReturnValue %20
OpBranch %19
%19 = OpLabel
%20 = OpCompositeConstruct %12 %3 %3
%21 = OpCompositeConstruct %12 %5 %5
%22 = OpCompositeConstruct %12 %5 %5
%23 = OpExtInst %12 %1 Fma %20 %21 %22
OpReturnValue %23
OpFunctionEnd
%22 = OpFunction %7 None %23
%21 = OpLabel
OpBranch %24
%25 = OpFunction %7 None %26
%24 = OpLabel
%26 = OpCompositeConstruct %25 %6 %6
%27 = OpCompositeConstruct %25 %6 %6
%30 = OpCompositeExtract %7 %26 0
%31 = OpCompositeExtract %7 %27 0
%32 = OpIMul %7 %30 %31
%33 = OpIAdd %7 %29 %32
%34 = OpCompositeExtract %7 %26 1
%35 = OpCompositeExtract %7 %27 1
%36 = OpIMul %7 %34 %35
%28 = OpIAdd %7 %33 %36
%38 = OpCompositeConstruct %37 %8 %8 %8
%39 = OpCompositeConstruct %37 %8 %8 %8
%42 = OpCompositeExtract %9 %38 0
OpBranch %27
%27 = OpLabel
%28 = OpCompositeConstruct %13 %6 %6
%29 = OpCompositeConstruct %13 %6 %6
%32 = OpCompositeExtract %7 %28 0
%33 = OpCompositeExtract %7 %29 0
%34 = OpIMul %7 %32 %33
%35 = OpIAdd %7 %31 %34
%36 = OpCompositeExtract %7 %28 1
%37 = OpCompositeExtract %7 %29 1
%38 = OpIMul %7 %36 %37
%30 = OpIAdd %7 %35 %38
%39 = OpCompositeConstruct %14 %8 %8 %8
%40 = OpCompositeConstruct %14 %8 %8 %8
%43 = OpCompositeExtract %9 %39 0
%44 = OpIMul %9 %42 %43
%45 = OpIAdd %9 %41 %44
%46 = OpCompositeExtract %9 %38 1
%44 = OpCompositeExtract %9 %40 0
%45 = OpIMul %9 %43 %44
%46 = OpIAdd %9 %42 %45
%47 = OpCompositeExtract %9 %39 1
%48 = OpIMul %9 %46 %47
%49 = OpIAdd %9 %45 %48
%50 = OpCompositeExtract %9 %38 2
%48 = OpCompositeExtract %9 %40 1
%49 = OpIMul %9 %47 %48
%50 = OpIAdd %9 %46 %49
%51 = OpCompositeExtract %9 %39 2
%52 = OpIMul %9 %50 %51
%40 = OpIAdd %9 %49 %52
%54 = OpCompositeConstruct %53 %10 %10 %10 %10
%55 = OpCompositeConstruct %53 %11 %11 %11 %11
%52 = OpCompositeExtract %9 %40 2
%53 = OpIMul %9 %51 %52
%41 = OpIAdd %9 %50 %53
%54 = OpCompositeConstruct %15 %10 %10 %10 %10
%55 = OpCompositeConstruct %15 %11 %11 %11 %11
%58 = OpCompositeExtract %7 %54 0
%59 = OpCompositeExtract %7 %55 0
%60 = OpIMul %7 %58 %59
@ -89,7 +89,7 @@ OpFunctionEnd
%73 = OpLabel
OpBranch %76
%76 = OpLabel
%77 = OpFunctionCall %12 %14
%78 = OpFunctionCall %7 %22
%77 = OpFunctionCall %12 %17
%78 = OpFunctionCall %7 %25
OpReturn
OpFunctionEnd

View File

@ -1,13 +1,13 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 169
; Bound: 172
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %114 "main"
OpExecutionMode %114 LocalSize 1 1 1
OpEntryPoint GLCompute %111 "main"
OpExecutionMode %111 LocalSize 1 1 1
OpDecorate %25 ArrayStride 4
OpMemberDecorate %27 0 Offset 0
OpMemberDecorate %27 1 Offset 12
@ -114,126 +114,132 @@ OpMemberDecorate %65 0 Offset 0
%66 = OpTypePointer Uniform %65
%64 = OpVariable %66 Uniform
%70 = OpTypeFunction %2 %26
%71 = OpTypePointer StorageBuffer %29
%72 = OpTypePointer Uniform %26
%73 = OpTypePointer StorageBuffer %27
%74 = OpTypePointer Uniform %35
%75 = OpTypePointer Uniform %31
%76 = OpTypePointer Uniform %38
%77 = OpTypePointer Uniform %32
%80 = OpTypePointer Function %8
%83 = OpTypeFunction %2
%84 = OpConstant %6 0
%87 = OpTypePointer StorageBuffer %26
%90 = OpTypePointer StorageBuffer %11
%110 = OpTypePointer Function %11
%112 = OpTypePointer Function %4
%124 = OpTypePointer Workgroup %11
%125 = OpTypePointer Uniform %37
%126 = OpTypePointer Uniform %36
%129 = OpTypePointer Uniform %34
%130 = OpTypePointer Uniform %33
%131 = OpTypePointer Uniform %30
%136 = OpConstant %6 7
%142 = OpConstant %6 6
%144 = OpTypePointer StorageBuffer %28
%145 = OpConstant %6 1
%148 = OpConstant %6 5
%150 = OpTypePointer Uniform %30
%151 = OpTypePointer Uniform %11
%152 = OpConstant %6 3
%155 = OpConstant %6 4
%157 = OpTypePointer StorageBuffer %11
%168 = OpConstant %6 256
%73 = OpTypePointer Function %8
%74 = OpConstantNull %8
%77 = OpTypeFunction %2
%78 = OpTypePointer StorageBuffer %27
%79 = OpConstant %6 0
%82 = OpTypePointer StorageBuffer %26
%85 = OpTypePointer StorageBuffer %11
%105 = OpTypePointer Function %11
%106 = OpConstantNull %11
%108 = OpTypePointer Function %4
%109 = OpConstantNull %4
%113 = OpTypePointer StorageBuffer %29
%115 = OpTypePointer Uniform %31
%117 = OpTypePointer Uniform %26
%119 = OpTypePointer Uniform %32
%121 = OpTypePointer Uniform %35
%123 = OpTypePointer Uniform %38
%127 = OpTypePointer Workgroup %11
%128 = OpTypePointer Uniform %37
%129 = OpTypePointer Uniform %36
%132 = OpTypePointer Uniform %34
%133 = OpTypePointer Uniform %33
%134 = OpTypePointer Uniform %30
%139 = OpConstant %6 7
%145 = OpConstant %6 6
%147 = OpTypePointer StorageBuffer %28
%148 = OpConstant %6 1
%151 = OpConstant %6 5
%153 = OpTypePointer Uniform %30
%154 = OpTypePointer Uniform %11
%155 = OpConstant %6 3
%158 = OpConstant %6 4
%160 = OpTypePointer StorageBuffer %11
%171 = OpConstant %6 256
%69 = OpFunction %2 None %70
%68 = OpFunctionParameter %26
%67 = OpLabel
OpBranch %78
%78 = OpLabel
OpBranch %71
%71 = OpLabel
OpReturn
OpFunctionEnd
%82 = OpFunction %2 None %83
%76 = OpFunction %2 None %77
%75 = OpLabel
%72 = OpVariable %73 Function %74
%80 = OpAccessChain %78 %46 %79
OpBranch %81
%81 = OpLabel
%79 = OpVariable %80 Function %12
%85 = OpAccessChain %73 %46 %84
OpBranch %86
%86 = OpLabel
%88 = OpCompositeConstruct %26 %10 %10 %10
%89 = OpAccessChain %87 %85 %84
OpStore %89 %88
%91 = OpAccessChain %90 %85 %84 %84
OpStore %91 %10
%92 = OpAccessChain %90 %85 %84 %84
OpStore %92 %14
%93 = OpLoad %8 %79
%94 = OpAccessChain %90 %85 %84 %93
OpStore %94 %15
%95 = OpLoad %27 %85
%96 = OpCompositeExtract %26 %95 0
%97 = OpCompositeExtract %26 %95 0
%98 = OpVectorShuffle %28 %97 %97 2 0
%99 = OpCompositeExtract %26 %95 0
%100 = OpFunctionCall %2 %69 %99
%101 = OpCompositeExtract %26 %95 0
%102 = OpVectorTimesMatrix %26 %101 %41
%103 = OpCompositeExtract %26 %95 0
%104 = OpMatrixTimesVector %26 %41 %103
%105 = OpCompositeExtract %26 %95 0
%106 = OpVectorTimesScalar %26 %105 %14
%107 = OpCompositeExtract %26 %95 0
%108 = OpVectorTimesScalar %26 %107 %14
%83 = OpCompositeConstruct %26 %10 %10 %10
%84 = OpAccessChain %82 %80 %79
OpStore %84 %83
OpStore %72 %12
%86 = OpAccessChain %85 %80 %79 %79
OpStore %86 %10
%87 = OpAccessChain %85 %80 %79 %79
OpStore %87 %14
%88 = OpLoad %8 %72
%89 = OpAccessChain %85 %80 %79 %88
OpStore %89 %15
%90 = OpLoad %27 %80
%91 = OpCompositeExtract %26 %90 0
%92 = OpCompositeExtract %26 %90 0
%93 = OpVectorShuffle %28 %92 %92 2 0
%94 = OpCompositeExtract %26 %90 0
%95 = OpFunctionCall %2 %69 %94
%96 = OpCompositeExtract %26 %90 0
%97 = OpVectorTimesMatrix %26 %96 %41
%98 = OpCompositeExtract %26 %90 0
%99 = OpMatrixTimesVector %26 %41 %98
%100 = OpCompositeExtract %26 %90 0
%101 = OpVectorTimesScalar %26 %100 %14
%102 = OpCompositeExtract %26 %90 0
%103 = OpVectorTimesScalar %26 %102 %14
OpReturn
OpFunctionEnd
%114 = OpFunction %2 None %83
%113 = OpLabel
%109 = OpVariable %110 Function %10
%111 = OpVariable %112 Function %24
%115 = OpAccessChain %73 %46 %84
%116 = OpAccessChain %71 %49 %84
%117 = OpAccessChain %75 %52 %84
%118 = OpAccessChain %72 %55 %84
%119 = OpAccessChain %77 %58 %84
%120 = OpAccessChain %74 %61 %84
%121 = OpAccessChain %76 %64 %84
OpBranch %122
%122 = OpLabel
%123 = OpFunctionCall %2 %82
%127 = OpAccessChain %126 %121 %84 %84
%128 = OpLoad %36 %127
%132 = OpAccessChain %131 %120 %84 %84 %84
%133 = OpLoad %30 %132
%134 = OpMatrixTimesVector %28 %128 %133
%135 = OpCompositeExtract %11 %134 0
%137 = OpAccessChain %124 %42 %136
OpStore %137 %135
%138 = OpLoad %32 %119
%139 = OpLoad %26 %118
%140 = OpMatrixTimesVector %28 %138 %139
%141 = OpCompositeExtract %11 %140 0
%143 = OpAccessChain %124 %42 %142
OpStore %143 %141
%146 = OpAccessChain %90 %116 %145 %145
%147 = OpLoad %11 %146
%149 = OpAccessChain %124 %42 %148
OpStore %149 %147
%153 = OpAccessChain %151 %117 %84 %152
%154 = OpLoad %11 %153
%156 = OpAccessChain %124 %42 %155
OpStore %156 %154
%158 = OpAccessChain %157 %115 %145
%159 = OpLoad %11 %158
%160 = OpAccessChain %124 %42 %152
OpStore %160 %159
%161 = OpAccessChain %90 %115 %84 %84
%111 = OpFunction %2 None %77
%110 = OpLabel
%104 = OpVariable %105 Function %106
%107 = OpVariable %108 Function %109
%112 = OpAccessChain %78 %46 %79
%114 = OpAccessChain %113 %49 %79
%116 = OpAccessChain %115 %52 %79
%118 = OpAccessChain %117 %55 %79
%120 = OpAccessChain %119 %58 %79
%122 = OpAccessChain %121 %61 %79
%124 = OpAccessChain %123 %64 %79
OpBranch %125
%125 = OpLabel
%126 = OpFunctionCall %2 %76
%130 = OpAccessChain %129 %124 %79 %79
%131 = OpLoad %36 %130
%135 = OpAccessChain %134 %122 %79 %79 %79
%136 = OpLoad %30 %135
%137 = OpMatrixTimesVector %28 %131 %136
%138 = OpCompositeExtract %11 %137 0
%140 = OpAccessChain %127 %42 %139
OpStore %140 %138
%141 = OpLoad %32 %120
%142 = OpLoad %26 %118
%143 = OpMatrixTimesVector %28 %141 %142
%144 = OpCompositeExtract %11 %143 0
%146 = OpAccessChain %127 %42 %145
OpStore %146 %144
%149 = OpAccessChain %85 %114 %148 %148
%150 = OpLoad %11 %149
%152 = OpAccessChain %127 %42 %151
OpStore %152 %150
%156 = OpAccessChain %154 %116 %79 %155
%157 = OpLoad %11 %156
%159 = OpAccessChain %127 %42 %158
OpStore %159 %157
%161 = OpAccessChain %160 %112 %148
%162 = OpLoad %11 %161
%163 = OpAccessChain %124 %42 %23
%163 = OpAccessChain %127 %42 %155
OpStore %163 %162
%164 = OpAccessChain %157 %115 %145
OpStore %164 %22
%165 = OpArrayLength %6 %49 0
%166 = OpConvertUToF %11 %165
%167 = OpAccessChain %124 %42 %145
OpStore %167 %166
OpAtomicStore %44 %9 %168 %23
%164 = OpAccessChain %85 %112 %79 %79
%165 = OpLoad %11 %164
%166 = OpAccessChain %127 %42 %23
OpStore %166 %165
%167 = OpAccessChain %160 %112 %148
OpStore %167 %22
%168 = OpArrayLength %6 %49 0
%169 = OpConvertUToF %11 %168
%170 = OpAccessChain %127 %42 %148
OpStore %170 %169
OpAtomicStore %44 %9 %171 %23
OpStore %104 %10
OpStore %107 %24
OpReturn
OpFunctionEnd

View File

@ -9,103 +9,103 @@ OpCapability Shader
OpCapability Sampled1D
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %80 "main" %77
OpEntryPoint GLCompute %155 "depth_load" %153
OpEntryPoint Vertex %176 "queries" %174
OpEntryPoint Vertex %228 "levels_queries" %227
OpEntryPoint Fragment %257 "texture_sample" %256
OpEntryPoint Fragment %286 "texture_sample_comparison" %284
OpEntryPoint GLCompute %84 "main" %81
OpEntryPoint GLCompute %157 "depth_load" %155
OpEntryPoint Vertex %178 "queries" %176
OpEntryPoint Vertex %230 "levels_queries" %229
OpEntryPoint Fragment %259 "texture_sample" %258
OpEntryPoint Fragment %287 "texture_sample_comparison" %285
OpEntryPoint Fragment %306 "gather" %305
OpEntryPoint Fragment %341 "depth_no_comparison" %340
OpExecutionMode %80 LocalSize 16 1 1
OpExecutionMode %155 LocalSize 16 1 1
OpExecutionMode %257 OriginUpperLeft
OpExecutionMode %286 OriginUpperLeft
OpExecutionMode %84 LocalSize 16 1 1
OpExecutionMode %157 LocalSize 16 1 1
OpExecutionMode %259 OriginUpperLeft
OpExecutionMode %287 OriginUpperLeft
OpExecutionMode %306 OriginUpperLeft
OpExecutionMode %341 OriginUpperLeft
OpSource GLSL 450
OpName %35 "image_mipmapped_src"
OpName %37 "image_multisampled_src"
OpName %39 "image_depth_multisampled_src"
OpName %41 "image_storage_src"
OpName %43 "image_array_src"
OpName %45 "image_dup_src"
OpName %47 "image_1d_src"
OpName %49 "image_dst"
OpName %51 "image_1d"
OpName %53 "image_2d"
OpName %55 "image_2d_u32"
OpName %56 "image_2d_i32"
OpName %58 "image_2d_array"
OpName %60 "image_cube"
OpName %62 "image_cube_array"
OpName %64 "image_3d"
OpName %66 "image_aa"
OpName %68 "sampler_reg"
OpName %70 "sampler_cmp"
OpName %72 "image_2d_depth"
OpName %74 "image_cube_depth"
OpName %77 "local_id"
OpName %80 "main"
OpName %153 "local_id"
OpName %155 "depth_load"
OpName %176 "queries"
OpName %228 "levels_queries"
OpName %257 "texture_sample"
OpName %286 "texture_sample_comparison"
OpName %39 "image_mipmapped_src"
OpName %41 "image_multisampled_src"
OpName %43 "image_depth_multisampled_src"
OpName %45 "image_storage_src"
OpName %47 "image_array_src"
OpName %49 "image_dup_src"
OpName %51 "image_1d_src"
OpName %53 "image_dst"
OpName %55 "image_1d"
OpName %57 "image_2d"
OpName %59 "image_2d_u32"
OpName %60 "image_2d_i32"
OpName %62 "image_2d_array"
OpName %64 "image_cube"
OpName %66 "image_cube_array"
OpName %68 "image_3d"
OpName %70 "image_aa"
OpName %72 "sampler_reg"
OpName %74 "sampler_cmp"
OpName %76 "image_2d_depth"
OpName %78 "image_cube_depth"
OpName %81 "local_id"
OpName %84 "main"
OpName %155 "local_id"
OpName %157 "depth_load"
OpName %178 "queries"
OpName %230 "levels_queries"
OpName %259 "texture_sample"
OpName %287 "texture_sample_comparison"
OpName %306 "gather"
OpName %341 "depth_no_comparison"
OpDecorate %35 DescriptorSet 0
OpDecorate %35 Binding 0
OpDecorate %37 DescriptorSet 0
OpDecorate %37 Binding 3
OpDecorate %39 DescriptorSet 0
OpDecorate %39 Binding 4
OpDecorate %41 NonWritable
OpDecorate %39 Binding 0
OpDecorate %41 DescriptorSet 0
OpDecorate %41 Binding 1
OpDecorate %41 Binding 3
OpDecorate %43 DescriptorSet 0
OpDecorate %43 Binding 5
OpDecorate %43 Binding 4
OpDecorate %45 NonWritable
OpDecorate %45 DescriptorSet 0
OpDecorate %45 Binding 6
OpDecorate %45 Binding 1
OpDecorate %47 DescriptorSet 0
OpDecorate %47 Binding 7
OpDecorate %49 NonReadable
OpDecorate %47 Binding 5
OpDecorate %49 NonWritable
OpDecorate %49 DescriptorSet 0
OpDecorate %49 Binding 2
OpDecorate %49 Binding 6
OpDecorate %51 DescriptorSet 0
OpDecorate %51 Binding 0
OpDecorate %51 Binding 7
OpDecorate %53 NonReadable
OpDecorate %53 DescriptorSet 0
OpDecorate %53 Binding 1
OpDecorate %53 Binding 2
OpDecorate %55 DescriptorSet 0
OpDecorate %55 Binding 2
OpDecorate %56 DescriptorSet 0
OpDecorate %56 Binding 3
OpDecorate %58 DescriptorSet 0
OpDecorate %58 Binding 4
OpDecorate %55 Binding 0
OpDecorate %57 DescriptorSet 0
OpDecorate %57 Binding 1
OpDecorate %59 DescriptorSet 0
OpDecorate %59 Binding 2
OpDecorate %60 DescriptorSet 0
OpDecorate %60 Binding 5
OpDecorate %60 Binding 3
OpDecorate %62 DescriptorSet 0
OpDecorate %62 Binding 6
OpDecorate %62 Binding 4
OpDecorate %64 DescriptorSet 0
OpDecorate %64 Binding 7
OpDecorate %64 Binding 5
OpDecorate %66 DescriptorSet 0
OpDecorate %66 Binding 8
OpDecorate %68 DescriptorSet 1
OpDecorate %68 Binding 0
OpDecorate %70 DescriptorSet 1
OpDecorate %70 Binding 1
OpDecorate %66 Binding 6
OpDecorate %68 DescriptorSet 0
OpDecorate %68 Binding 7
OpDecorate %70 DescriptorSet 0
OpDecorate %70 Binding 8
OpDecorate %72 DescriptorSet 1
OpDecorate %72 Binding 2
OpDecorate %72 Binding 0
OpDecorate %74 DescriptorSet 1
OpDecorate %74 Binding 3
OpDecorate %77 BuiltIn LocalInvocationId
OpDecorate %153 BuiltIn LocalInvocationId
OpDecorate %174 BuiltIn Position
OpDecorate %227 BuiltIn Position
OpDecorate %256 Location 0
OpDecorate %284 Location 0
OpDecorate %74 Binding 1
OpDecorate %76 DescriptorSet 1
OpDecorate %76 Binding 2
OpDecorate %78 DescriptorSet 1
OpDecorate %78 Binding 3
OpDecorate %81 BuiltIn LocalInvocationId
OpDecorate %155 BuiltIn LocalInvocationId
OpDecorate %176 BuiltIn Position
OpDecorate %229 BuiltIn Position
OpDecorate %258 Location 0
OpDecorate %285 Location 0
OpDecorate %305 Location 0
OpDecorate %340 Location 0
%2 = OpTypeVoid
@ -128,44 +128,44 @@ OpDecorate %340 Location 0
%19 = OpTypeImage %13 1D 0 0 0 1 Unknown
%20 = OpTypeVector %13 3
%21 = OpTypeVector %4 2
%22 = OpTypeImage %8 1D 0 0 0 1 Unknown
%23 = OpTypeImage %8 2D 0 0 0 1 Unknown
%24 = OpTypeImage %4 2D 0 0 0 1 Unknown
%25 = OpTypeImage %8 2D 0 1 0 1 Unknown
%26 = OpTypeImage %8 Cube 0 0 0 1 Unknown
%27 = OpTypeImage %8 Cube 0 1 0 1 Unknown
%28 = OpTypeImage %8 3D 0 0 0 1 Unknown
%29 = OpTypeImage %8 2D 0 0 1 1 Unknown
%30 = OpTypeVector %8 4
%31 = OpTypeSampler
%32 = OpTypeImage %8 2D 1 0 0 1 Unknown
%33 = OpTypeImage %8 Cube 1 0 0 1 Unknown
%34 = OpConstantComposite %21 %10 %6
%36 = OpTypePointer UniformConstant %12
%35 = OpVariable %36 UniformConstant
%38 = OpTypePointer UniformConstant %14
%37 = OpVariable %38 UniformConstant
%40 = OpTypePointer UniformConstant %15
%22 = OpTypeVector %13 2
%23 = OpTypeVector %13 4
%24 = OpTypeImage %8 1D 0 0 0 1 Unknown
%25 = OpTypeImage %8 2D 0 0 0 1 Unknown
%26 = OpTypeImage %4 2D 0 0 0 1 Unknown
%27 = OpTypeImage %8 2D 0 1 0 1 Unknown
%28 = OpTypeImage %8 Cube 0 0 0 1 Unknown
%29 = OpTypeImage %8 Cube 0 1 0 1 Unknown
%30 = OpTypeImage %8 3D 0 0 0 1 Unknown
%31 = OpTypeImage %8 2D 0 0 1 1 Unknown
%32 = OpTypeVector %8 4
%33 = OpTypeSampler
%34 = OpTypeVector %8 2
%35 = OpTypeImage %8 2D 1 0 0 1 Unknown
%36 = OpTypeImage %8 Cube 1 0 0 1 Unknown
%37 = OpTypeVector %8 3
%38 = OpConstantComposite %21 %10 %6
%40 = OpTypePointer UniformConstant %12
%39 = OpVariable %40 UniformConstant
%42 = OpTypePointer UniformConstant %16
%42 = OpTypePointer UniformConstant %14
%41 = OpVariable %42 UniformConstant
%44 = OpTypePointer UniformConstant %17
%44 = OpTypePointer UniformConstant %15
%43 = OpVariable %44 UniformConstant
%46 = OpTypePointer UniformConstant %18
%46 = OpTypePointer UniformConstant %16
%45 = OpVariable %46 UniformConstant
%48 = OpTypePointer UniformConstant %19
%48 = OpTypePointer UniformConstant %17
%47 = OpVariable %48 UniformConstant
%50 = OpTypePointer UniformConstant %18
%49 = OpVariable %50 UniformConstant
%52 = OpTypePointer UniformConstant %22
%52 = OpTypePointer UniformConstant %19
%51 = OpVariable %52 UniformConstant
%54 = OpTypePointer UniformConstant %23
%54 = OpTypePointer UniformConstant %18
%53 = OpVariable %54 UniformConstant
%55 = OpVariable %36 UniformConstant
%57 = OpTypePointer UniformConstant %24
%56 = OpVariable %57 UniformConstant
%59 = OpTypePointer UniformConstant %25
%58 = OpVariable %59 UniformConstant
%56 = OpTypePointer UniformConstant %24
%55 = OpVariable %56 UniformConstant
%58 = OpTypePointer UniformConstant %25
%57 = OpVariable %58 UniformConstant
%59 = OpVariable %40 UniformConstant
%61 = OpTypePointer UniformConstant %26
%60 = OpVariable %61 UniformConstant
%63 = OpTypePointer UniformConstant %27
@ -174,319 +174,319 @@ OpDecorate %340 Location 0
%64 = OpVariable %65 UniformConstant
%67 = OpTypePointer UniformConstant %29
%66 = OpVariable %67 UniformConstant
%69 = OpTypePointer UniformConstant %31
%69 = OpTypePointer UniformConstant %30
%68 = OpVariable %69 UniformConstant
%71 = OpTypePointer UniformConstant %31
%70 = OpVariable %71 UniformConstant
%73 = OpTypePointer UniformConstant %32
%73 = OpTypePointer UniformConstant %33
%72 = OpVariable %73 UniformConstant
%75 = OpTypePointer UniformConstant %33
%74 = OpVariable %75 UniformConstant
%78 = OpTypePointer Input %20
%77 = OpVariable %78 Input
%81 = OpTypeFunction %2
%90 = OpTypeVector %13 2
%98 = OpTypeVector %13 4
%109 = OpTypeVector %4 3
%153 = OpVariable %78 Input
%175 = OpTypePointer Output %30
%174 = OpVariable %175 Output
%185 = OpConstant %13 0
%227 = OpVariable %175 Output
%256 = OpVariable %175 Output
%262 = OpTypeVector %8 2
%265 = OpTypeSampledImage %22
%268 = OpTypeSampledImage %23
%285 = OpTypePointer Output %8
%284 = OpVariable %285 Output
%292 = OpTypeSampledImage %32
%297 = OpConstant %8 0.0
%298 = OpTypeVector %8 3
%300 = OpTypeSampledImage %33
%305 = OpVariable %175 Output
%77 = OpTypePointer UniformConstant %35
%76 = OpVariable %77 UniformConstant
%79 = OpTypePointer UniformConstant %36
%78 = OpVariable %79 UniformConstant
%82 = OpTypePointer Input %20
%81 = OpVariable %82 Input
%85 = OpTypeFunction %2
%111 = OpTypeVector %4 3
%155 = OpVariable %82 Input
%177 = OpTypePointer Output %32
%176 = OpVariable %177 Output
%187 = OpConstant %13 0
%229 = OpVariable %177 Output
%258 = OpVariable %177 Output
%266 = OpTypeSampledImage %24
%269 = OpTypeSampledImage %25
%286 = OpTypePointer Output %8
%285 = OpVariable %286 Output
%293 = OpTypeSampledImage %35
%298 = OpConstant %8 0.0
%300 = OpTypeSampledImage %36
%305 = OpVariable %177 Output
%317 = OpConstant %13 1
%320 = OpConstant %13 3
%325 = OpTypeSampledImage %12
%328 = OpTypeVector %4 4
%329 = OpTypeSampledImage %24
%340 = OpVariable %175 Output
%80 = OpFunction %2 None %81
%76 = OpLabel
%79 = OpLoad %20 %77
%82 = OpLoad %12 %35
%83 = OpLoad %14 %37
%84 = OpLoad %16 %41
%85 = OpLoad %17 %43
%86 = OpLoad %19 %47
%87 = OpLoad %18 %49
OpBranch %88
%88 = OpLabel
%89 = OpImageQuerySize %21 %84
%91 = OpVectorShuffle %90 %79 %79 0 1
%92 = OpBitcast %21 %91
%93 = OpIMul %21 %89 %92
%94 = OpCompositeConstruct %21 %3 %5
%95 = OpSRem %21 %93 %94
%96 = OpCompositeExtract %13 %79 2
%97 = OpBitcast %4 %96
%99 = OpImageFetch %98 %82 %95 Lod %97
%100 = OpCompositeExtract %13 %79 2
%101 = OpBitcast %4 %100
%102 = OpImageFetch %98 %83 %95 Sample %101
%103 = OpImageRead %98 %84 %95
%104 = OpCompositeExtract %13 %79 2
%105 = OpBitcast %4 %104
%106 = OpCompositeExtract %13 %79 2
%329 = OpTypeSampledImage %26
%340 = OpVariable %177 Output
%84 = OpFunction %2 None %85
%80 = OpLabel
%83 = OpLoad %20 %81
%86 = OpLoad %12 %39
%87 = OpLoad %14 %41
%88 = OpLoad %16 %45
%89 = OpLoad %17 %47
%90 = OpLoad %19 %51
%91 = OpLoad %18 %53
OpBranch %92
%92 = OpLabel
%93 = OpImageQuerySize %21 %88
%94 = OpVectorShuffle %22 %83 %83 0 1
%95 = OpBitcast %21 %94
%96 = OpIMul %21 %93 %95
%97 = OpCompositeConstruct %21 %3 %5
%98 = OpSRem %21 %96 %97
%99 = OpCompositeExtract %13 %83 2
%100 = OpBitcast %4 %99
%101 = OpImageFetch %23 %86 %98 Lod %100
%102 = OpCompositeExtract %13 %83 2
%103 = OpBitcast %4 %102
%104 = OpImageFetch %23 %87 %98 Sample %103
%105 = OpImageRead %23 %88 %98
%106 = OpCompositeExtract %13 %83 2
%107 = OpBitcast %4 %106
%108 = OpIAdd %4 %107 %6
%110 = OpCompositeConstruct %109 %95 %105
%111 = OpImageFetch %98 %85 %110 Lod %108
%112 = OpCompositeExtract %13 %79 0
%113 = OpBitcast %4 %112
%114 = OpCompositeExtract %13 %79 2
%108 = OpCompositeExtract %13 %83 2
%109 = OpBitcast %4 %108
%110 = OpIAdd %4 %109 %6
%112 = OpCompositeConstruct %111 %98 %107
%113 = OpImageFetch %23 %89 %112 Lod %110
%114 = OpCompositeExtract %13 %83 0
%115 = OpBitcast %4 %114
%116 = OpImageFetch %98 %86 %113 Lod %115
%117 = OpBitcast %90 %95
%118 = OpCompositeExtract %13 %79 2
%119 = OpBitcast %4 %118
%120 = OpImageFetch %98 %82 %117 Lod %119
%121 = OpBitcast %90 %95
%122 = OpCompositeExtract %13 %79 2
%123 = OpBitcast %4 %122
%124 = OpImageFetch %98 %83 %121 Sample %123
%125 = OpBitcast %90 %95
%126 = OpImageRead %98 %84 %125
%127 = OpBitcast %90 %95
%128 = OpCompositeExtract %13 %79 2
%129 = OpBitcast %4 %128
%130 = OpCompositeExtract %13 %79 2
%116 = OpCompositeExtract %13 %83 2
%117 = OpBitcast %4 %116
%118 = OpImageFetch %23 %90 %115 Lod %117
%119 = OpBitcast %22 %98
%120 = OpCompositeExtract %13 %83 2
%121 = OpBitcast %4 %120
%122 = OpImageFetch %23 %86 %119 Lod %121
%123 = OpBitcast %22 %98
%124 = OpCompositeExtract %13 %83 2
%125 = OpBitcast %4 %124
%126 = OpImageFetch %23 %87 %123 Sample %125
%127 = OpBitcast %22 %98
%128 = OpImageRead %23 %88 %127
%129 = OpBitcast %22 %98
%130 = OpCompositeExtract %13 %83 2
%131 = OpBitcast %4 %130
%132 = OpIAdd %4 %131 %6
%133 = OpBitcast %13 %129
%134 = OpCompositeConstruct %20 %127 %133
%135 = OpImageFetch %98 %85 %134 Lod %132
%136 = OpCompositeExtract %13 %79 0
%138 = OpCompositeExtract %13 %79 2
%139 = OpBitcast %4 %138
%140 = OpImageFetch %98 %86 %136 Lod %139
%141 = OpCompositeExtract %4 %95 0
%142 = OpIAdd %98 %99 %102
%143 = OpIAdd %98 %142 %103
%144 = OpIAdd %98 %143 %111
%145 = OpIAdd %98 %144 %116
OpImageWrite %87 %141 %145
%146 = OpCompositeExtract %4 %95 0
%147 = OpBitcast %13 %146
%148 = OpIAdd %98 %120 %124
%149 = OpIAdd %98 %148 %126
%150 = OpIAdd %98 %149 %135
%151 = OpIAdd %98 %150 %140
OpImageWrite %87 %147 %151
%132 = OpCompositeExtract %13 %83 2
%133 = OpBitcast %4 %132
%134 = OpIAdd %4 %133 %6
%135 = OpBitcast %13 %131
%136 = OpCompositeConstruct %20 %129 %135
%137 = OpImageFetch %23 %89 %136 Lod %134
%138 = OpCompositeExtract %13 %83 0
%140 = OpCompositeExtract %13 %83 2
%141 = OpBitcast %4 %140
%142 = OpImageFetch %23 %90 %138 Lod %141
%143 = OpCompositeExtract %4 %98 0
%144 = OpIAdd %23 %101 %104
%145 = OpIAdd %23 %144 %105
%146 = OpIAdd %23 %145 %113
%147 = OpIAdd %23 %146 %118
OpImageWrite %91 %143 %147
%148 = OpCompositeExtract %4 %98 0
%149 = OpBitcast %13 %148
%150 = OpIAdd %23 %122 %126
%151 = OpIAdd %23 %150 %128
%152 = OpIAdd %23 %151 %137
%153 = OpIAdd %23 %152 %142
OpImageWrite %91 %149 %153
OpReturn
OpFunctionEnd
%155 = OpFunction %2 None %81
%152 = OpLabel
%154 = OpLoad %20 %153
%156 = OpLoad %15 %39
%157 = OpLoad %16 %41
%158 = OpLoad %18 %49
OpBranch %159
%159 = OpLabel
%160 = OpImageQuerySize %21 %157
%161 = OpVectorShuffle %90 %154 %154 0 1
%162 = OpBitcast %21 %161
%163 = OpIMul %21 %160 %162
%164 = OpCompositeConstruct %21 %3 %5
%165 = OpSRem %21 %163 %164
%166 = OpCompositeExtract %13 %154 2
%167 = OpBitcast %4 %166
%168 = OpImageFetch %30 %156 %165 Sample %167
%169 = OpCompositeExtract %8 %168 0
%170 = OpCompositeExtract %4 %165 0
%171 = OpConvertFToU %13 %169
%172 = OpCompositeConstruct %98 %171 %171 %171 %171
OpImageWrite %158 %170 %172
%157 = OpFunction %2 None %85
%154 = OpLabel
%156 = OpLoad %20 %155
%158 = OpLoad %15 %43
%159 = OpLoad %16 %45
%160 = OpLoad %18 %53
OpBranch %161
%161 = OpLabel
%162 = OpImageQuerySize %21 %159
%163 = OpVectorShuffle %22 %156 %156 0 1
%164 = OpBitcast %21 %163
%165 = OpIMul %21 %162 %164
%166 = OpCompositeConstruct %21 %3 %5
%167 = OpSRem %21 %165 %166
%168 = OpCompositeExtract %13 %156 2
%169 = OpBitcast %4 %168
%170 = OpImageFetch %32 %158 %167 Sample %169
%171 = OpCompositeExtract %8 %170 0
%172 = OpCompositeExtract %4 %167 0
%173 = OpConvertFToU %13 %171
%174 = OpCompositeConstruct %23 %173 %173 %173 %173
OpImageWrite %160 %172 %174
OpReturn
OpFunctionEnd
%176 = OpFunction %2 None %81
%173 = OpLabel
%177 = OpLoad %22 %51
%178 = OpLoad %23 %53
%179 = OpLoad %25 %58
%180 = OpLoad %26 %60
%178 = OpFunction %2 None %85
%175 = OpLabel
%179 = OpLoad %24 %55
%180 = OpLoad %25 %57
%181 = OpLoad %27 %62
%182 = OpLoad %28 %64
%183 = OpLoad %29 %66
OpBranch %184
%184 = OpLabel
%186 = OpImageQuerySizeLod %4 %177 %185
%188 = OpImageQuerySizeLod %4 %177 %186
%189 = OpImageQuerySizeLod %21 %178 %185
%190 = OpImageQuerySizeLod %21 %178 %6
%191 = OpImageQuerySizeLod %109 %179 %185
%192 = OpVectorShuffle %21 %191 %191 0 1
%193 = OpImageQuerySizeLod %109 %179 %6
%184 = OpLoad %30 %68
%185 = OpLoad %31 %70
OpBranch %186
%186 = OpLabel
%188 = OpImageQuerySizeLod %4 %179 %187
%190 = OpImageQuerySizeLod %4 %179 %188
%191 = OpImageQuerySizeLod %21 %180 %187
%192 = OpImageQuerySizeLod %21 %180 %6
%193 = OpImageQuerySizeLod %111 %181 %187
%194 = OpVectorShuffle %21 %193 %193 0 1
%195 = OpImageQuerySizeLod %21 %180 %185
%196 = OpImageQuerySizeLod %21 %180 %6
%197 = OpImageQuerySizeLod %109 %181 %185
%198 = OpVectorShuffle %21 %197 %197 0 0
%199 = OpImageQuerySizeLod %109 %181 %6
%195 = OpImageQuerySizeLod %111 %181 %6
%196 = OpVectorShuffle %21 %195 %195 0 1
%197 = OpImageQuerySizeLod %21 %182 %187
%198 = OpImageQuerySizeLod %21 %182 %6
%199 = OpImageQuerySizeLod %111 %183 %187
%200 = OpVectorShuffle %21 %199 %199 0 0
%201 = OpImageQuerySizeLod %109 %182 %185
%202 = OpImageQuerySizeLod %109 %182 %6
%203 = OpImageQuerySize %21 %183
%204 = OpCompositeExtract %4 %189 1
%205 = OpIAdd %4 %186 %204
%206 = OpCompositeExtract %4 %190 1
%207 = OpIAdd %4 %205 %206
%201 = OpImageQuerySizeLod %111 %183 %6
%202 = OpVectorShuffle %21 %201 %201 0 0
%203 = OpImageQuerySizeLod %111 %184 %187
%204 = OpImageQuerySizeLod %111 %184 %6
%205 = OpImageQuerySize %21 %185
%206 = OpCompositeExtract %4 %191 1
%207 = OpIAdd %4 %188 %206
%208 = OpCompositeExtract %4 %192 1
%209 = OpIAdd %4 %207 %208
%210 = OpCompositeExtract %4 %194 1
%211 = OpIAdd %4 %209 %210
%212 = OpCompositeExtract %4 %195 1
%212 = OpCompositeExtract %4 %196 1
%213 = OpIAdd %4 %211 %212
%214 = OpCompositeExtract %4 %196 1
%214 = OpCompositeExtract %4 %197 1
%215 = OpIAdd %4 %213 %214
%216 = OpCompositeExtract %4 %198 1
%217 = OpIAdd %4 %215 %216
%218 = OpCompositeExtract %4 %200 1
%219 = OpIAdd %4 %217 %218
%220 = OpCompositeExtract %4 %201 2
%220 = OpCompositeExtract %4 %202 1
%221 = OpIAdd %4 %219 %220
%222 = OpCompositeExtract %4 %202 2
%222 = OpCompositeExtract %4 %203 2
%223 = OpIAdd %4 %221 %222
%224 = OpConvertSToF %8 %223
%225 = OpCompositeConstruct %30 %224 %224 %224 %224
OpStore %174 %225
%224 = OpCompositeExtract %4 %204 2
%225 = OpIAdd %4 %223 %224
%226 = OpConvertSToF %8 %225
%227 = OpCompositeConstruct %32 %226 %226 %226 %226
OpStore %176 %227
OpReturn
OpFunctionEnd
%228 = OpFunction %2 None %81
%226 = OpLabel
%229 = OpLoad %23 %53
%230 = OpLoad %25 %58
%231 = OpLoad %26 %60
%230 = OpFunction %2 None %85
%228 = OpLabel
%231 = OpLoad %25 %57
%232 = OpLoad %27 %62
%233 = OpLoad %28 %64
%234 = OpLoad %29 %66
OpBranch %235
%235 = OpLabel
%236 = OpImageQueryLevels %4 %229
%237 = OpImageQueryLevels %4 %230
%238 = OpImageQuerySizeLod %109 %230 %185
%239 = OpCompositeExtract %4 %238 2
%240 = OpImageQueryLevels %4 %231
%241 = OpImageQueryLevels %4 %232
%242 = OpImageQuerySizeLod %109 %232 %185
%243 = OpCompositeExtract %4 %242 2
%244 = OpImageQueryLevels %4 %233
%245 = OpImageQuerySamples %4 %234
%246 = OpIAdd %4 %239 %243
%247 = OpIAdd %4 %246 %245
%248 = OpIAdd %4 %247 %236
%249 = OpIAdd %4 %248 %237
%250 = OpIAdd %4 %249 %244
%251 = OpIAdd %4 %250 %240
%252 = OpIAdd %4 %251 %241
%253 = OpConvertSToF %8 %252
%254 = OpCompositeConstruct %30 %253 %253 %253 %253
OpStore %227 %254
%235 = OpLoad %30 %68
%236 = OpLoad %31 %70
OpBranch %237
%237 = OpLabel
%238 = OpImageQueryLevels %4 %231
%239 = OpImageQueryLevels %4 %232
%240 = OpImageQuerySizeLod %111 %232 %187
%241 = OpCompositeExtract %4 %240 2
%242 = OpImageQueryLevels %4 %233
%243 = OpImageQueryLevels %4 %234
%244 = OpImageQuerySizeLod %111 %234 %187
%245 = OpCompositeExtract %4 %244 2
%246 = OpImageQueryLevels %4 %235
%247 = OpImageQuerySamples %4 %236
%248 = OpIAdd %4 %241 %245
%249 = OpIAdd %4 %248 %247
%250 = OpIAdd %4 %249 %238
%251 = OpIAdd %4 %250 %239
%252 = OpIAdd %4 %251 %246
%253 = OpIAdd %4 %252 %242
%254 = OpIAdd %4 %253 %243
%255 = OpConvertSToF %8 %254
%256 = OpCompositeConstruct %32 %255 %255 %255 %255
OpStore %229 %256
OpReturn
OpFunctionEnd
%257 = OpFunction %2 None %81
%255 = OpLabel
%258 = OpLoad %22 %51
%259 = OpLoad %23 %53
%260 = OpLoad %31 %68
OpBranch %261
%261 = OpLabel
%263 = OpCompositeConstruct %262 %7 %7
%264 = OpCompositeExtract %8 %263 0
%266 = OpSampledImage %265 %258 %260
%267 = OpImageSampleImplicitLod %30 %266 %264
%269 = OpSampledImage %268 %259 %260
%270 = OpImageSampleImplicitLod %30 %269 %263
%271 = OpSampledImage %268 %259 %260
%272 = OpImageSampleImplicitLod %30 %271 %263 ConstOffset %34
%273 = OpSampledImage %268 %259 %260
%274 = OpImageSampleExplicitLod %30 %273 %263 Lod %9
%275 = OpSampledImage %268 %259 %260
%276 = OpImageSampleExplicitLod %30 %275 %263 Lod|ConstOffset %9 %34
%277 = OpSampledImage %268 %259 %260
%278 = OpImageSampleImplicitLod %30 %277 %263 Bias|ConstOffset %11 %34
%279 = OpFAdd %30 %267 %270
%280 = OpFAdd %30 %279 %272
%281 = OpFAdd %30 %280 %274
%282 = OpFAdd %30 %281 %276
OpStore %256 %282
%259 = OpFunction %2 None %85
%257 = OpLabel
%260 = OpLoad %24 %55
%261 = OpLoad %25 %57
%262 = OpLoad %33 %72
OpBranch %263
%263 = OpLabel
%264 = OpCompositeConstruct %34 %7 %7
%265 = OpCompositeExtract %8 %264 0
%267 = OpSampledImage %266 %260 %262
%268 = OpImageSampleImplicitLod %32 %267 %265
%270 = OpSampledImage %269 %261 %262
%271 = OpImageSampleImplicitLod %32 %270 %264
%272 = OpSampledImage %269 %261 %262
%273 = OpImageSampleImplicitLod %32 %272 %264 ConstOffset %38
%274 = OpSampledImage %269 %261 %262
%275 = OpImageSampleExplicitLod %32 %274 %264 Lod %9
%276 = OpSampledImage %269 %261 %262
%277 = OpImageSampleExplicitLod %32 %276 %264 Lod|ConstOffset %9 %38
%278 = OpSampledImage %269 %261 %262
%279 = OpImageSampleImplicitLod %32 %278 %264 Bias|ConstOffset %11 %38
%280 = OpFAdd %32 %268 %271
%281 = OpFAdd %32 %280 %273
%282 = OpFAdd %32 %281 %275
%283 = OpFAdd %32 %282 %277
OpStore %258 %283
OpReturn
OpFunctionEnd
%286 = OpFunction %2 None %81
%283 = OpLabel
%287 = OpLoad %31 %70
%288 = OpLoad %32 %72
%289 = OpLoad %33 %74
OpBranch %290
%290 = OpLabel
%291 = OpCompositeConstruct %262 %7 %7
%293 = OpSampledImage %292 %288 %287
%294 = OpImageSampleDrefImplicitLod %8 %293 %291 %7
%295 = OpSampledImage %292 %288 %287
%296 = OpImageSampleDrefExplicitLod %8 %295 %291 %7 Lod %297
%299 = OpCompositeConstruct %298 %7 %7 %7
%301 = OpSampledImage %300 %289 %287
%302 = OpImageSampleDrefExplicitLod %8 %301 %299 %7 Lod %297
%303 = OpFAdd %8 %294 %296
OpStore %284 %303
%287 = OpFunction %2 None %85
%284 = OpLabel
%288 = OpLoad %33 %74
%289 = OpLoad %35 %76
%290 = OpLoad %36 %78
OpBranch %291
%291 = OpLabel
%292 = OpCompositeConstruct %34 %7 %7
%294 = OpSampledImage %293 %289 %288
%295 = OpImageSampleDrefImplicitLod %8 %294 %292 %7
%296 = OpSampledImage %293 %289 %288
%297 = OpImageSampleDrefExplicitLod %8 %296 %292 %7 Lod %298
%299 = OpCompositeConstruct %37 %7 %7 %7
%301 = OpSampledImage %300 %290 %288
%302 = OpImageSampleDrefExplicitLod %8 %301 %299 %7 Lod %298
%303 = OpFAdd %8 %295 %297
OpStore %285 %303
OpReturn
OpFunctionEnd
%306 = OpFunction %2 None %81
%306 = OpFunction %2 None %85
%304 = OpLabel
%307 = OpLoad %23 %53
%308 = OpLoad %12 %55
%309 = OpLoad %24 %56
%310 = OpLoad %31 %68
%311 = OpLoad %31 %70
%312 = OpLoad %32 %72
%307 = OpLoad %25 %57
%308 = OpLoad %12 %59
%309 = OpLoad %26 %60
%310 = OpLoad %33 %72
%311 = OpLoad %33 %74
%312 = OpLoad %35 %76
OpBranch %313
%313 = OpLabel
%314 = OpCompositeConstruct %262 %7 %7
%315 = OpSampledImage %268 %307 %310
%316 = OpImageGather %30 %315 %314 %317
%318 = OpSampledImage %268 %307 %310
%319 = OpImageGather %30 %318 %314 %320 ConstOffset %34
%321 = OpSampledImage %292 %312 %311
%322 = OpImageDrefGather %30 %321 %314 %7
%323 = OpSampledImage %292 %312 %311
%324 = OpImageDrefGather %30 %323 %314 %7 ConstOffset %34
%314 = OpCompositeConstruct %34 %7 %7
%315 = OpSampledImage %269 %307 %310
%316 = OpImageGather %32 %315 %314 %317
%318 = OpSampledImage %269 %307 %310
%319 = OpImageGather %32 %318 %314 %320 ConstOffset %38
%321 = OpSampledImage %293 %312 %311
%322 = OpImageDrefGather %32 %321 %314 %7
%323 = OpSampledImage %293 %312 %311
%324 = OpImageDrefGather %32 %323 %314 %7 ConstOffset %38
%326 = OpSampledImage %325 %308 %310
%327 = OpImageGather %98 %326 %314 %185
%327 = OpImageGather %23 %326 %314 %187
%330 = OpSampledImage %329 %309 %310
%331 = OpImageGather %328 %330 %314 %185
%332 = OpConvertUToF %30 %327
%333 = OpConvertSToF %30 %331
%334 = OpFAdd %30 %332 %333
%335 = OpFAdd %30 %316 %319
%336 = OpFAdd %30 %335 %322
%337 = OpFAdd %30 %336 %324
%338 = OpFAdd %30 %337 %334
%331 = OpImageGather %328 %330 %314 %187
%332 = OpConvertUToF %32 %327
%333 = OpConvertSToF %32 %331
%334 = OpFAdd %32 %332 %333
%335 = OpFAdd %32 %316 %319
%336 = OpFAdd %32 %335 %322
%337 = OpFAdd %32 %336 %324
%338 = OpFAdd %32 %337 %334
OpStore %305 %338
OpReturn
OpFunctionEnd
%341 = OpFunction %2 None %81
%341 = OpFunction %2 None %85
%339 = OpLabel
%342 = OpLoad %31 %68
%343 = OpLoad %32 %72
%342 = OpLoad %33 %72
%343 = OpLoad %35 %76
OpBranch %344
%344 = OpLabel
%345 = OpCompositeConstruct %262 %7 %7
%346 = OpSampledImage %292 %343 %342
%347 = OpImageSampleImplicitLod %30 %346 %345
%345 = OpCompositeConstruct %34 %7 %7
%346 = OpSampledImage %293 %343 %342
%347 = OpImageSampleImplicitLod %32 %346 %345
%348 = OpCompositeExtract %8 %347 0
%349 = OpSampledImage %292 %343 %342
%350 = OpImageGather %30 %349 %345 %185
%351 = OpCompositeConstruct %30 %348 %348 %348 %348
%352 = OpFAdd %30 %351 %350
%349 = OpSampledImage %293 %343 %342
%350 = OpImageGather %32 %349 %345 %187
%351 = OpCompositeConstruct %32 %348 %348 %348 %348
%352 = OpFAdd %32 %351 %350
OpStore %340 %352
OpReturn
OpFunctionEnd

View File

@ -5,7 +5,7 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %34 "vertex_two_structs" %24 %28 %30 %32
OpEntryPoint Vertex %35 "vertex_two_structs" %25 %29 %31 %33
OpMemberDecorate %13 0 Offset 0
OpMemberDecorate %13 1 Offset 16
OpMemberDecorate %14 0 Offset 0
@ -14,11 +14,11 @@ OpMemberDecorate %14 2 Offset 8
OpDecorate %16 ArrayStride 4
OpMemberDecorate %18 0 Offset 0
OpMemberDecorate %19 0 Offset 0
OpDecorate %24 BuiltIn VertexIndex
OpDecorate %28 BuiltIn InstanceIndex
OpDecorate %30 Invariant
OpDecorate %30 BuiltIn Position
OpDecorate %32 BuiltIn PointSize
OpDecorate %25 BuiltIn VertexIndex
OpDecorate %29 BuiltIn InstanceIndex
OpDecorate %31 Invariant
OpDecorate %31 BuiltIn Position
OpDecorate %33 BuiltIn PointSize
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpConstant %4 1.0
@ -38,32 +38,33 @@ OpDecorate %32 BuiltIn PointSize
%18 = OpTypeStruct %6
%19 = OpTypeStruct %6
%21 = OpTypePointer Function %6
%25 = OpTypePointer Input %6
%24 = OpVariable %25 Input
%28 = OpVariable %25 Input
%31 = OpTypePointer Output %12
%30 = OpVariable %31 Output
%33 = OpTypePointer Output %4
%32 = OpVariable %33 Output
%35 = OpTypeFunction %2
%36 = OpTypePointer Workgroup %16
%34 = OpFunction %2 None %35
%22 = OpLabel
%20 = OpVariable %21 Function %11
%26 = OpLoad %6 %24
%23 = OpCompositeConstruct %18 %26
%29 = OpLoad %6 %28
%27 = OpCompositeConstruct %19 %29
OpStore %32 %3
%22 = OpConstantNull %6
%26 = OpTypePointer Input %6
%25 = OpVariable %26 Input
%29 = OpVariable %26 Input
%32 = OpTypePointer Output %12
%31 = OpVariable %32 Output
%34 = OpTypePointer Output %4
%33 = OpVariable %34 Output
%36 = OpTypeFunction %2
%35 = OpFunction %2 None %36
%23 = OpLabel
%20 = OpVariable %21 Function %22
%27 = OpLoad %6 %25
%24 = OpCompositeConstruct %18 %27
%30 = OpLoad %6 %29
%28 = OpCompositeConstruct %19 %30
OpStore %33 %3
OpBranch %37
%37 = OpLabel
%38 = OpCompositeExtract %6 %23 0
OpStore %20 %11
%38 = OpCompositeExtract %6 %24 0
%39 = OpConvertUToF %4 %38
%40 = OpCompositeExtract %6 %27 0
%40 = OpCompositeExtract %6 %28 0
%41 = OpConvertUToF %4 %40
%42 = OpLoad %6 %20
%43 = OpConvertUToF %4 %42
%44 = OpCompositeConstruct %12 %39 %41 %43 %7
OpStore %30 %44
OpStore %31 %44
OpReturn
OpFunctionEnd

View File

@ -5,7 +5,7 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %13 "main"
OpEntryPoint Vertex %14 "main"
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpConstant %4 1.0
@ -14,29 +14,29 @@ OpEntryPoint Vertex %13 "main"
%6 = OpConstant %7 0
%9 = OpTypeInt 32 0
%8 = OpConstant %9 0
%10 = OpTypeVector %7 2
%11 = OpConstantComposite %10 %6 %6
%14 = OpTypeFunction %2
%16 = OpTypeVector %4 4
%10 = OpTypeVector %4 4
%11 = OpTypeVector %7 2
%12 = OpConstantComposite %11 %6 %6
%15 = OpTypeFunction %2
%26 = OpConstantNull %7
%13 = OpFunction %2 None %14
%12 = OpLabel
OpBranch %15
%15 = OpLabel
%17 = OpCompositeConstruct %16 %5 %5 %5 %5
%14 = OpFunction %2 None %15
%13 = OpLabel
OpBranch %16
%16 = OpLabel
%17 = OpCompositeConstruct %10 %5 %5 %5 %5
%18 = OpExtInst %4 %1 Degrees %3
%19 = OpExtInst %4 %1 Radians %3
%20 = OpExtInst %16 %1 Degrees %17
%21 = OpExtInst %16 %1 Radians %17
%23 = OpCompositeConstruct %16 %5 %5 %5 %5
%24 = OpCompositeConstruct %16 %3 %3 %3 %3
%22 = OpExtInst %16 %1 FClamp %17 %23 %24
%27 = OpCompositeExtract %7 %11 0
%28 = OpCompositeExtract %7 %11 0
%20 = OpExtInst %10 %1 Degrees %17
%21 = OpExtInst %10 %1 Radians %17
%23 = OpCompositeConstruct %10 %5 %5 %5 %5
%24 = OpCompositeConstruct %10 %3 %3 %3 %3
%22 = OpExtInst %10 %1 FClamp %17 %23 %24
%27 = OpCompositeExtract %7 %12 0
%28 = OpCompositeExtract %7 %12 0
%29 = OpIMul %7 %27 %28
%30 = OpIAdd %7 %26 %29
%31 = OpCompositeExtract %7 %11 1
%32 = OpCompositeExtract %7 %11 1
%31 = OpCompositeExtract %7 %12 1
%32 = OpCompositeExtract %7 %12 1
%33 = OpIMul %7 %31 %32
%25 = OpIAdd %7 %30 %33
%34 = OpCopyObject %9 %8

View File

@ -1,16 +1,16 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 572
; Bound: 574
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %560 "main"
OpExecutionMode %560 LocalSize 1 1 1
OpMemberDecorate %39 0 Offset 0
OpMemberDecorate %39 1 Offset 16
OpDecorate %43 ArrayStride 32
OpDecorate %44 ArrayStride 4
OpEntryPoint GLCompute %562 "main"
OpExecutionMode %562 LocalSize 1 1 1
OpMemberDecorate %40 0 Offset 0
OpMemberDecorate %40 1 Offset 16
OpDecorate %44 ArrayStride 32
OpDecorate %45 ArrayStride 4
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpConstant %4 1.0
@ -48,41 +48,41 @@ OpDecorate %44 ArrayStride 4
%36 = OpTypeVector %10 4
%37 = OpTypeVector %4 2
%38 = OpTypeVector %4 3
%39 = OpTypeStruct %34 %8
%40 = OpTypeMatrix %37 2
%41 = OpTypeMatrix %34 4
%42 = OpTypeVector %20 2
%43 = OpTypeArray %39 %21
%44 = OpTypeArray %8 %22
%45 = OpTypeMatrix %38 2
%46 = OpTypeMatrix %38 3
%47 = OpTypeMatrix %38 4
%48 = OpTypeMatrix %34 3
%49 = OpTypeVector %8 3
%50 = OpConstantComposite %34 %3 %3 %3 %3
%51 = OpConstantComposite %34 %5 %5 %5 %5
%52 = OpConstantComposite %34 %6 %6 %6 %6
%53 = OpConstantComposite %35 %7 %7 %7 %7
%54 = OpConstantComposite %42 %19 %19
%55 = OpConstantComposite %37 %5 %5
%56 = OpConstantComposite %40 %55 %55
%57 = OpConstantComposite %34 %5 %5 %5 %5
%58 = OpConstantComposite %39 %57 %11
%59 = OpConstantComposite %43 %58 %58 %58
%60 = OpConstantComposite %38 %5 %5 %5
%61 = OpConstantComposite %45 %60 %60
%62 = OpConstantComposite %46 %60 %60 %60
%63 = OpConstantComposite %47 %60 %60 %60 %60
%64 = OpConstantComposite %48 %57 %57 %57
%65 = OpConstantComposite %49 %11 %11 %11
%68 = OpTypeFunction %34
%108 = OpTypePointer Function %37
%109 = OpConstantNull %37
%112 = OpTypeFunction %37
%128 = OpTypeFunction %38 %38
%130 = OpTypeVector %10 3
%137 = OpTypePointer Function %39
%138 = OpConstantNull %39
%39 = OpTypeVector %10 3
%40 = OpTypeStruct %34 %8
%41 = OpTypeMatrix %37 2
%42 = OpTypeMatrix %34 4
%43 = OpTypeVector %20 2
%44 = OpTypeArray %40 %21
%45 = OpTypeArray %8 %22
%46 = OpTypeMatrix %38 2
%47 = OpTypeMatrix %38 3
%48 = OpTypeMatrix %38 4
%49 = OpTypeMatrix %34 3
%50 = OpTypeVector %8 3
%51 = OpConstantComposite %34 %3 %3 %3 %3
%52 = OpConstantComposite %34 %5 %5 %5 %5
%53 = OpConstantComposite %34 %6 %6 %6 %6
%54 = OpConstantComposite %35 %7 %7 %7 %7
%55 = OpConstantComposite %43 %19 %19
%56 = OpConstantComposite %37 %5 %5
%57 = OpConstantComposite %41 %56 %56
%58 = OpConstantComposite %34 %5 %5 %5 %5
%59 = OpConstantComposite %40 %58 %11
%60 = OpConstantComposite %44 %59 %59 %59
%61 = OpConstantComposite %38 %5 %5 %5
%62 = OpConstantComposite %46 %61 %61
%63 = OpConstantComposite %47 %61 %61 %61
%64 = OpConstantComposite %48 %61 %61 %61 %61
%65 = OpConstantComposite %49 %58 %58 %58
%66 = OpConstantComposite %50 %11 %11 %11
%69 = OpTypeFunction %34
%109 = OpTypePointer Function %37
%110 = OpConstantNull %37
%113 = OpTypeFunction %37
%129 = OpTypeFunction %38 %38
%137 = OpTypePointer Function %40
%138 = OpConstantNull %40
%141 = OpTypeFunction %4
%166 = OpTypePointer Function %34
%167 = OpTypePointer Function %4
@ -91,83 +91,85 @@ OpDecorate %44 ArrayStride 4
%191 = OpTypeVector %8 2
%202 = OpTypeVector %20 3
%497 = OpTypePointer Function %8
%499 = OpTypePointer Function %49
%529 = OpTypePointer Function %8
%67 = OpFunction %34 None %68
%66 = OpLabel
OpBranch %69
%69 = OpLabel
%70 = OpSelect %8 %9 %7 %11
%72 = OpCompositeConstruct %36 %9 %9 %9 %9
%71 = OpSelect %34 %72 %50 %51
%73 = OpCompositeConstruct %36 %12 %12 %12 %12
%74 = OpSelect %34 %73 %51 %50
%75 = OpExtInst %34 %1 FMix %51 %50 %52
%77 = OpCompositeConstruct %34 %13 %13 %13 %13
%76 = OpExtInst %34 %1 FMix %51 %50 %77
%78 = OpCompositeExtract %8 %53 0
%79 = OpBitcast %4 %78
%80 = OpBitcast %34 %53
%81 = OpConvertFToS %35 %51
%82 = OpCompositeConstruct %35 %70 %70 %70 %70
%83 = OpIAdd %35 %82 %81
%84 = OpConvertSToF %34 %83
%85 = OpFAdd %34 %84 %71
%86 = OpFAdd %34 %85 %75
%498 = OpConstantNull %8
%500 = OpTypePointer Function %50
%501 = OpConstantNull %50
%531 = OpTypePointer Function %8
%68 = OpFunction %34 None %69
%67 = OpLabel
OpBranch %70
%70 = OpLabel
%71 = OpSelect %8 %9 %7 %11
%73 = OpCompositeConstruct %36 %9 %9 %9 %9
%72 = OpSelect %34 %73 %51 %52
%74 = OpCompositeConstruct %36 %12 %12 %12 %12
%75 = OpSelect %34 %74 %52 %51
%76 = OpExtInst %34 %1 FMix %52 %51 %53
%78 = OpCompositeConstruct %34 %13 %13 %13 %13
%77 = OpExtInst %34 %1 FMix %52 %51 %78
%79 = OpCompositeExtract %8 %54 0
%80 = OpBitcast %4 %79
%81 = OpBitcast %34 %54
%82 = OpConvertFToS %35 %52
%83 = OpCompositeConstruct %35 %71 %71 %71 %71
%84 = OpIAdd %35 %83 %82
%85 = OpConvertSToF %34 %84
%86 = OpFAdd %34 %85 %72
%87 = OpFAdd %34 %86 %76
%88 = OpCompositeConstruct %34 %79 %79 %79 %79
%89 = OpFAdd %34 %87 %88
%90 = OpFAdd %34 %89 %80
OpReturnValue %90
%88 = OpFAdd %34 %87 %77
%89 = OpCompositeConstruct %34 %80 %80 %80 %80
%90 = OpFAdd %34 %88 %89
%91 = OpFAdd %34 %90 %81
OpReturnValue %91
OpFunctionEnd
%92 = OpFunction %34 None %68
%91 = OpLabel
OpBranch %93
%93 = OpLabel
%94 = OpCompositeConstruct %37 %14 %14
%95 = OpCompositeConstruct %37 %3 %3
%96 = OpFAdd %37 %95 %94
%97 = OpCompositeConstruct %37 %15 %15
%98 = OpFSub %37 %96 %97
%99 = OpCompositeConstruct %37 %16 %16
%100 = OpFDiv %37 %98 %99
%101 = OpCompositeConstruct %35 %17 %17 %17 %17
%102 = OpCompositeConstruct %35 %18 %18 %18 %18
%103 = OpSRem %35 %101 %102
%104 = OpVectorShuffle %34 %100 %100 0 1 0 1
%105 = OpConvertSToF %34 %103
%106 = OpFAdd %34 %104 %105
OpReturnValue %106
%93 = OpFunction %34 None %69
%92 = OpLabel
OpBranch %94
%94 = OpLabel
%95 = OpCompositeConstruct %37 %14 %14
%96 = OpCompositeConstruct %37 %3 %3
%97 = OpFAdd %37 %96 %95
%98 = OpCompositeConstruct %37 %15 %15
%99 = OpFSub %37 %97 %98
%100 = OpCompositeConstruct %37 %16 %16
%101 = OpFDiv %37 %99 %100
%102 = OpCompositeConstruct %35 %17 %17 %17 %17
%103 = OpCompositeConstruct %35 %18 %18 %18 %18
%104 = OpSRem %35 %102 %103
%105 = OpVectorShuffle %34 %101 %101 0 1 0 1
%106 = OpConvertSToF %34 %104
%107 = OpFAdd %34 %105 %106
OpReturnValue %107
OpFunctionEnd
%111 = OpFunction %37 None %112
%110 = OpLabel
%107 = OpVariable %108 Function %109
OpBranch %113
%113 = OpLabel
%114 = OpCompositeConstruct %37 %14 %14
OpStore %107 %114
%115 = OpLoad %37 %107
%116 = OpCompositeConstruct %37 %3 %3
%117 = OpFAdd %37 %115 %116
OpStore %107 %117
%118 = OpLoad %37 %107
%119 = OpCompositeConstruct %37 %15 %15
%120 = OpFSub %37 %118 %119
OpStore %107 %120
%121 = OpLoad %37 %107
%122 = OpCompositeConstruct %37 %16 %16
%123 = OpFDiv %37 %121 %122
OpStore %107 %123
%124 = OpLoad %37 %107
OpReturnValue %124
%112 = OpFunction %37 None %113
%111 = OpLabel
%108 = OpVariable %109 Function %110
OpBranch %114
%114 = OpLabel
%115 = OpCompositeConstruct %37 %14 %14
OpStore %108 %115
%116 = OpLoad %37 %108
%117 = OpCompositeConstruct %37 %3 %3
%118 = OpFAdd %37 %116 %117
OpStore %108 %118
%119 = OpLoad %37 %108
%120 = OpCompositeConstruct %37 %15 %15
%121 = OpFSub %37 %119 %120
OpStore %108 %121
%122 = OpLoad %37 %108
%123 = OpCompositeConstruct %37 %16 %16
%124 = OpFDiv %37 %122 %123
OpStore %108 %124
%125 = OpLoad %37 %108
OpReturnValue %125
OpFunctionEnd
%127 = OpFunction %38 None %128
%126 = OpFunctionParameter %38
%125 = OpLabel
OpBranch %129
%129 = OpLabel
%128 = OpFunction %38 None %129
%127 = OpFunctionParameter %38
%126 = OpLabel
OpBranch %130
%130 = OpLabel
%131 = OpCompositeConstruct %38 %5 %5 %5
%132 = OpFUnordNotEqual %130 %126 %131
%132 = OpFUnordNotEqual %39 %127 %131
%133 = OpCompositeConstruct %38 %5 %5 %5
%134 = OpCompositeConstruct %38 %3 %3 %3
%135 = OpSelect %38 %132 %134 %133
@ -179,23 +181,23 @@ OpFunctionEnd
OpBranch %142
%142 = OpLabel
%143 = OpCompositeConstruct %34 %3 %3 %3 %3
%144 = OpCompositeConstruct %39 %143 %7
%144 = OpCompositeConstruct %40 %143 %7
OpStore %136 %144
%145 = OpCompositeConstruct %37 %3 %5
%146 = OpCompositeConstruct %37 %5 %3
%147 = OpCompositeConstruct %40 %145 %146
%147 = OpCompositeConstruct %41 %145 %146
%148 = OpCompositeConstruct %34 %3 %5 %5 %5
%149 = OpCompositeConstruct %34 %5 %3 %5 %5
%150 = OpCompositeConstruct %34 %5 %5 %3 %5
%151 = OpCompositeConstruct %34 %5 %5 %5 %3
%152 = OpCompositeConstruct %41 %148 %149 %150 %151
%153 = OpCompositeConstruct %42 %19 %19
%152 = OpCompositeConstruct %42 %148 %149 %150 %151
%153 = OpCompositeConstruct %43 %19 %19
%154 = OpCompositeConstruct %37 %5 %5
%155 = OpCompositeConstruct %37 %5 %5
%156 = OpCompositeConstruct %40 %154 %155
%157 = OpCompositeConstruct %44 %11 %7 %18 %21
%163 = OpCopyObject %45 %61
%165 = OpCopyObject %45 %61
%156 = OpCompositeConstruct %41 %154 %155
%157 = OpCompositeConstruct %45 %11 %7 %18 %21
%163 = OpCopyObject %46 %62
%165 = OpCopyObject %46 %62
%168 = OpAccessChain %167 %136 %19 %19
%169 = OpLoad %4 %168
OpReturnValue %169
@ -210,9 +212,9 @@ OpBranch %173
%178 = OpLogicalOr %10 %9 %12
%179 = OpLogicalAnd %10 %9 %12
%180 = OpLogicalOr %10 %9 %12
%181 = OpCompositeConstruct %130 %9 %9 %9
%182 = OpCompositeConstruct %130 %12 %12 %12
%183 = OpLogicalOr %130 %181 %182
%181 = OpCompositeConstruct %39 %9 %9 %9
%182 = OpCompositeConstruct %39 %12 %12 %12
%183 = OpLogicalOr %39 %181 %182
%184 = OpLogicalAnd %10 %9 %12
%185 = OpCompositeConstruct %36 %9 %9 %9 %9
%186 = OpCompositeConstruct %36 %12 %12 %12 %12
@ -293,12 +295,12 @@ OpBranch %190
%260 = OpCompositeConstruct %191 %7 %7
%261 = OpCompositeConstruct %191 %18 %18
%262 = OpIAdd %191 %261 %260
%263 = OpCompositeConstruct %42 %24 %24
%264 = OpCompositeConstruct %42 %25 %25
%265 = OpIAdd %42 %263 %264
%266 = OpCompositeConstruct %42 %25 %25
%267 = OpCompositeConstruct %42 %24 %24
%268 = OpIAdd %42 %267 %266
%263 = OpCompositeConstruct %43 %24 %24
%264 = OpCompositeConstruct %43 %25 %25
%265 = OpIAdd %43 %263 %264
%266 = OpCompositeConstruct %43 %25 %25
%267 = OpCompositeConstruct %43 %24 %24
%268 = OpIAdd %43 %267 %266
%269 = OpCompositeConstruct %37 %14 %14
%270 = OpCompositeConstruct %37 %3 %3
%271 = OpFAdd %37 %269 %270
@ -311,12 +313,12 @@ OpBranch %190
%278 = OpCompositeConstruct %191 %7 %7
%279 = OpCompositeConstruct %191 %18 %18
%280 = OpISub %191 %279 %278
%281 = OpCompositeConstruct %42 %24 %24
%282 = OpCompositeConstruct %42 %25 %25
%283 = OpISub %42 %281 %282
%284 = OpCompositeConstruct %42 %25 %25
%285 = OpCompositeConstruct %42 %24 %24
%286 = OpISub %42 %285 %284
%281 = OpCompositeConstruct %43 %24 %24
%282 = OpCompositeConstruct %43 %25 %25
%283 = OpISub %43 %281 %282
%284 = OpCompositeConstruct %43 %25 %25
%285 = OpCompositeConstruct %43 %24 %24
%286 = OpISub %43 %285 %284
%287 = OpCompositeConstruct %37 %14 %14
%288 = OpCompositeConstruct %37 %3 %3
%289 = OpFSub %37 %287 %288
@ -329,12 +331,12 @@ OpBranch %190
%296 = OpCompositeConstruct %191 %7 %7
%298 = OpCompositeConstruct %191 %18 %18
%297 = OpIMul %191 %296 %298
%299 = OpCompositeConstruct %42 %24 %24
%301 = OpCompositeConstruct %42 %25 %25
%300 = OpIMul %42 %299 %301
%302 = OpCompositeConstruct %42 %25 %25
%304 = OpCompositeConstruct %42 %24 %24
%303 = OpIMul %42 %302 %304
%299 = OpCompositeConstruct %43 %24 %24
%301 = OpCompositeConstruct %43 %25 %25
%300 = OpIMul %43 %299 %301
%302 = OpCompositeConstruct %43 %25 %25
%304 = OpCompositeConstruct %43 %24 %24
%303 = OpIMul %43 %302 %304
%305 = OpCompositeConstruct %37 %14 %14
%306 = OpVectorTimesScalar %37 %305 %3
%307 = OpCompositeConstruct %37 %3 %3
@ -345,12 +347,12 @@ OpBranch %190
%312 = OpCompositeConstruct %191 %7 %7
%313 = OpCompositeConstruct %191 %18 %18
%314 = OpSDiv %191 %313 %312
%315 = OpCompositeConstruct %42 %24 %24
%316 = OpCompositeConstruct %42 %25 %25
%317 = OpUDiv %42 %315 %316
%318 = OpCompositeConstruct %42 %25 %25
%319 = OpCompositeConstruct %42 %24 %24
%320 = OpUDiv %42 %319 %318
%315 = OpCompositeConstruct %43 %24 %24
%316 = OpCompositeConstruct %43 %25 %25
%317 = OpUDiv %43 %315 %316
%318 = OpCompositeConstruct %43 %25 %25
%319 = OpCompositeConstruct %43 %24 %24
%320 = OpUDiv %43 %319 %318
%321 = OpCompositeConstruct %37 %14 %14
%322 = OpCompositeConstruct %37 %3 %3
%323 = OpFDiv %37 %321 %322
@ -363,45 +365,45 @@ OpBranch %190
%330 = OpCompositeConstruct %191 %7 %7
%331 = OpCompositeConstruct %191 %18 %18
%332 = OpSRem %191 %331 %330
%333 = OpCompositeConstruct %42 %24 %24
%334 = OpCompositeConstruct %42 %25 %25
%335 = OpUMod %42 %333 %334
%336 = OpCompositeConstruct %42 %25 %25
%337 = OpCompositeConstruct %42 %24 %24
%338 = OpUMod %42 %337 %336
%333 = OpCompositeConstruct %43 %24 %24
%334 = OpCompositeConstruct %43 %25 %25
%335 = OpUMod %43 %333 %334
%336 = OpCompositeConstruct %43 %25 %25
%337 = OpCompositeConstruct %43 %24 %24
%338 = OpUMod %43 %337 %336
%339 = OpCompositeConstruct %37 %14 %14
%340 = OpCompositeConstruct %37 %3 %3
%341 = OpFRem %37 %339 %340
%342 = OpCompositeConstruct %37 %3 %3
%343 = OpCompositeConstruct %37 %14 %14
%344 = OpFRem %37 %343 %342
%346 = OpCompositeExtract %38 %62 0
%347 = OpCompositeExtract %38 %62 0
%346 = OpCompositeExtract %38 %63 0
%347 = OpCompositeExtract %38 %63 0
%348 = OpFAdd %38 %346 %347
%349 = OpCompositeExtract %38 %62 1
%350 = OpCompositeExtract %38 %62 1
%349 = OpCompositeExtract %38 %63 1
%350 = OpCompositeExtract %38 %63 1
%351 = OpFAdd %38 %349 %350
%352 = OpCompositeExtract %38 %62 2
%353 = OpCompositeExtract %38 %62 2
%352 = OpCompositeExtract %38 %63 2
%353 = OpCompositeExtract %38 %63 2
%354 = OpFAdd %38 %352 %353
%345 = OpCompositeConstruct %46 %348 %351 %354
%356 = OpCompositeExtract %38 %62 0
%357 = OpCompositeExtract %38 %62 0
%345 = OpCompositeConstruct %47 %348 %351 %354
%356 = OpCompositeExtract %38 %63 0
%357 = OpCompositeExtract %38 %63 0
%358 = OpFSub %38 %356 %357
%359 = OpCompositeExtract %38 %62 1
%360 = OpCompositeExtract %38 %62 1
%359 = OpCompositeExtract %38 %63 1
%360 = OpCompositeExtract %38 %63 1
%361 = OpFSub %38 %359 %360
%362 = OpCompositeExtract %38 %62 2
%363 = OpCompositeExtract %38 %62 2
%362 = OpCompositeExtract %38 %63 2
%363 = OpCompositeExtract %38 %63 2
%364 = OpFSub %38 %362 %363
%355 = OpCompositeConstruct %46 %358 %361 %364
%365 = OpMatrixTimesScalar %46 %62 %3
%366 = OpMatrixTimesScalar %46 %62 %14
%355 = OpCompositeConstruct %47 %358 %361 %364
%365 = OpMatrixTimesScalar %47 %63 %3
%366 = OpMatrixTimesScalar %47 %63 %14
%367 = OpCompositeConstruct %34 %3 %3 %3 %3
%368 = OpMatrixTimesVector %38 %63 %367
%368 = OpMatrixTimesVector %38 %64 %367
%369 = OpCompositeConstruct %38 %14 %14 %14
%370 = OpVectorTimesMatrix %34 %369 %63
%371 = OpMatrixTimesMatrix %46 %63 %64
%370 = OpVectorTimesMatrix %34 %369 %64
%371 = OpMatrixTimesMatrix %47 %64 %65
OpReturn
OpFunctionEnd
%373 = OpFunction %2 None %172
@ -441,7 +443,7 @@ OpBranch %374
%405 = OpShiftLeftLogical %8 %18 %25
%406 = OpShiftLeftLogical %20 %24 %25
%407 = OpCompositeConstruct %191 %18 %18
%408 = OpCompositeConstruct %42 %25 %25
%408 = OpCompositeConstruct %43 %25 %25
%409 = OpShiftLeftLogical %191 %407 %408
%410 = OpCompositeConstruct %202 %24 %24 %24
%411 = OpCompositeConstruct %202 %25 %25 %25
@ -449,7 +451,7 @@ OpBranch %374
%413 = OpShiftRightArithmetic %8 %18 %25
%414 = OpShiftRightLogical %20 %24 %25
%415 = OpCompositeConstruct %191 %18 %18
%416 = OpCompositeConstruct %42 %25 %25
%416 = OpCompositeConstruct %43 %25 %25
%417 = OpShiftRightArithmetic %191 %415 %416
%418 = OpCompositeConstruct %202 %24 %24 %24
%419 = OpCompositeConstruct %202 %25 %25 %25
@ -468,7 +470,7 @@ OpBranch %423
%429 = OpIEqual %175 %427 %428
%430 = OpCompositeConstruct %202 %24 %24 %24
%431 = OpCompositeConstruct %202 %25 %25 %25
%432 = OpIEqual %130 %430 %431
%432 = OpIEqual %39 %430 %431
%433 = OpCompositeConstruct %34 %14 %14 %14 %14
%434 = OpCompositeConstruct %34 %3 %3 %3 %3
%435 = OpFOrdEqual %36 %433 %434
@ -480,7 +482,7 @@ OpBranch %423
%441 = OpINotEqual %175 %439 %440
%442 = OpCompositeConstruct %202 %24 %24 %24
%443 = OpCompositeConstruct %202 %25 %25 %25
%444 = OpINotEqual %130 %442 %443
%444 = OpINotEqual %39 %442 %443
%445 = OpCompositeConstruct %34 %14 %14 %14 %14
%446 = OpCompositeConstruct %34 %3 %3 %3 %3
%447 = OpFOrdNotEqual %36 %445 %446
@ -492,7 +494,7 @@ OpBranch %423
%453 = OpSLessThan %175 %451 %452
%454 = OpCompositeConstruct %202 %24 %24 %24
%455 = OpCompositeConstruct %202 %25 %25 %25
%456 = OpULessThan %130 %454 %455
%456 = OpULessThan %39 %454 %455
%457 = OpCompositeConstruct %34 %14 %14 %14 %14
%458 = OpCompositeConstruct %34 %3 %3 %3 %3
%459 = OpFOrdLessThan %36 %457 %458
@ -504,7 +506,7 @@ OpBranch %423
%465 = OpSLessThanEqual %175 %463 %464
%466 = OpCompositeConstruct %202 %24 %24 %24
%467 = OpCompositeConstruct %202 %25 %25 %25
%468 = OpULessThanEqual %130 %466 %467
%468 = OpULessThanEqual %39 %466 %467
%469 = OpCompositeConstruct %34 %14 %14 %14 %14
%470 = OpCompositeConstruct %34 %3 %3 %3 %3
%471 = OpFOrdLessThanEqual %36 %469 %470
@ -516,7 +518,7 @@ OpBranch %423
%477 = OpSGreaterThan %175 %475 %476
%478 = OpCompositeConstruct %202 %24 %24 %24
%479 = OpCompositeConstruct %202 %25 %25 %25
%480 = OpUGreaterThan %130 %478 %479
%480 = OpUGreaterThan %39 %478 %479
%481 = OpCompositeConstruct %34 %14 %14 %14 %14
%482 = OpCompositeConstruct %34 %3 %3 %3 %3
%483 = OpFOrdGreaterThan %36 %481 %482
@ -528,105 +530,107 @@ OpBranch %423
%489 = OpSGreaterThanEqual %175 %487 %488
%490 = OpCompositeConstruct %202 %24 %24 %24
%491 = OpCompositeConstruct %202 %25 %25 %25
%492 = OpUGreaterThanEqual %130 %490 %491
%492 = OpUGreaterThanEqual %39 %490 %491
%493 = OpCompositeConstruct %34 %14 %14 %14 %14
%494 = OpCompositeConstruct %34 %3 %3 %3 %3
%495 = OpFOrdGreaterThanEqual %36 %493 %494
OpReturn
OpFunctionEnd
%501 = OpFunction %2 None %172
%500 = OpLabel
%496 = OpVariable %497 Function %7
%498 = OpVariable %499 Function %65
OpBranch %502
%503 = OpFunction %2 None %172
%502 = OpLabel
%503 = OpLoad %8 %496
%504 = OpIAdd %8 %503 %7
OpStore %496 %504
%496 = OpVariable %497 Function %498
%499 = OpVariable %500 Function %501
OpBranch %504
%504 = OpLabel
OpStore %496 %7
%505 = OpLoad %8 %496
%506 = OpISub %8 %505 %7
%506 = OpIAdd %8 %505 %7
OpStore %496 %506
%507 = OpLoad %8 %496
%508 = OpLoad %8 %496
%509 = OpIMul %8 %507 %508
OpStore %496 %509
%508 = OpISub %8 %507 %7
OpStore %496 %508
%509 = OpLoad %8 %496
%510 = OpLoad %8 %496
%511 = OpLoad %8 %496
%512 = OpSDiv %8 %510 %511
OpStore %496 %512
%511 = OpIMul %8 %510 %509
OpStore %496 %511
%512 = OpLoad %8 %496
%513 = OpLoad %8 %496
%514 = OpSRem %8 %513 %7
%514 = OpSDiv %8 %513 %512
OpStore %496 %514
%515 = OpLoad %8 %496
%516 = OpBitwiseAnd %8 %515 %11
%516 = OpSRem %8 %515 %7
OpStore %496 %516
%517 = OpLoad %8 %496
%518 = OpBitwiseOr %8 %517 %11
%518 = OpBitwiseAnd %8 %517 %11
OpStore %496 %518
%519 = OpLoad %8 %496
%520 = OpBitwiseXor %8 %519 %11
%520 = OpBitwiseOr %8 %519 %11
OpStore %496 %520
%521 = OpLoad %8 %496
%522 = OpShiftLeftLogical %8 %521 %24
%522 = OpBitwiseXor %8 %521 %11
OpStore %496 %522
%523 = OpLoad %8 %496
%524 = OpShiftRightArithmetic %8 %523 %25
%524 = OpShiftLeftLogical %8 %523 %24
OpStore %496 %524
%525 = OpLoad %8 %496
%526 = OpIAdd %8 %525 %7
%526 = OpShiftRightArithmetic %8 %525 %25
OpStore %496 %526
%527 = OpLoad %8 %496
%528 = OpISub %8 %527 %7
%528 = OpIAdd %8 %527 %7
OpStore %496 %528
%530 = OpAccessChain %529 %498 %25
%531 = OpLoad %8 %530
%532 = OpIAdd %8 %531 %7
%533 = OpAccessChain %529 %498 %25
OpStore %533 %532
%534 = OpAccessChain %529 %498 %25
%535 = OpLoad %8 %534
%536 = OpISub %8 %535 %7
%537 = OpAccessChain %529 %498 %25
OpStore %537 %536
%529 = OpLoad %8 %496
%530 = OpISub %8 %529 %7
OpStore %496 %530
OpStore %499 %66
%532 = OpAccessChain %531 %499 %25
%533 = OpLoad %8 %532
%534 = OpIAdd %8 %533 %7
%535 = OpAccessChain %531 %499 %25
OpStore %535 %534
%536 = OpAccessChain %531 %499 %25
%537 = OpLoad %8 %536
%538 = OpISub %8 %537 %7
%539 = OpAccessChain %531 %499 %25
OpStore %539 %538
OpReturn
OpFunctionEnd
%539 = OpFunction %2 None %172
%538 = OpLabel
OpBranch %540
%541 = OpFunction %2 None %172
%540 = OpLabel
%541 = OpSNegate %8 %27
%542 = OpSNegate %8 %28
%543 = OpSNegate %8 %29
%544 = OpSNegate %8 %543
%545 = OpSNegate %8 %30
OpBranch %542
%542 = OpLabel
%543 = OpSNegate %8 %27
%544 = OpSNegate %8 %28
%545 = OpSNegate %8 %29
%546 = OpSNegate %8 %545
%547 = OpSNegate %8 %31
%547 = OpSNegate %8 %30
%548 = OpSNegate %8 %547
%549 = OpSNegate %8 %548
%549 = OpSNegate %8 %31
%550 = OpSNegate %8 %549
%551 = OpSNegate %8 %32
%551 = OpSNegate %8 %550
%552 = OpSNegate %8 %551
%553 = OpSNegate %8 %552
%553 = OpSNegate %8 %32
%554 = OpSNegate %8 %553
%555 = OpSNegate %8 %33
%555 = OpSNegate %8 %554
%556 = OpSNegate %8 %555
%557 = OpSNegate %8 %556
%557 = OpSNegate %8 %33
%558 = OpSNegate %8 %557
%559 = OpSNegate %8 %558
%560 = OpSNegate %8 %559
OpReturn
OpFunctionEnd
%560 = OpFunction %2 None %172
%559 = OpLabel
OpBranch %561
%562 = OpFunction %2 None %172
%561 = OpLabel
%562 = OpFunctionCall %34 %67
%563 = OpFunctionCall %34 %92
%564 = OpVectorShuffle %38 %50 %50 0 1 2
%565 = OpFunctionCall %38 %127 %564
%566 = OpFunctionCall %4 %140
%567 = OpFunctionCall %2 %171
%568 = OpFunctionCall %2 %189
%569 = OpFunctionCall %2 %373
%570 = OpFunctionCall %2 %422
%571 = OpFunctionCall %2 %501
OpBranch %563
%563 = OpLabel
%564 = OpFunctionCall %34 %68
%565 = OpFunctionCall %34 %93
%566 = OpVectorShuffle %38 %51 %51 0 1 2
%567 = OpFunctionCall %38 %128 %566
%568 = OpFunctionCall %4 %140
%569 = OpFunctionCall %2 %171
%570 = OpFunctionCall %2 %189
%571 = OpFunctionCall %2 %373
%572 = OpFunctionCall %2 %422
%573 = OpFunctionCall %2 %503
OpReturn
OpFunctionEnd

View File

@ -1,16 +1,16 @@
; SPIR-V
; Version: 1.2
; Generator: rspirv
; Bound: 262
; Bound: 270
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %94 "vs_main" %84 %87 %89 %91 %93
OpEntryPoint Vertex %90 "vs_main" %80 %83 %85 %87 %89
OpEntryPoint Fragment %148 "fs_main" %139 %142 %145 %147
OpEntryPoint Fragment %212 "fs_main_without_storage" %205 %207 %209 %211
OpEntryPoint Fragment %217 "fs_main_without_storage" %210 %212 %214 %216
OpExecutionMode %148 OriginUpperLeft
OpExecutionMode %212 OriginUpperLeft
OpExecutionMode %217 OriginUpperLeft
OpSource GLSL 450
OpName %11 "c_max_lights"
OpMemberName %18 0 "view_proj"
@ -37,25 +37,25 @@ OpName %45 "sampler_shadow"
OpName %48 "light_id"
OpName %49 "homogeneous_coords"
OpName %50 "fetch_shadow"
OpName %80 "out"
OpName %84 "position"
OpName %87 "normal"
OpName %89 "proj_position"
OpName %91 "world_normal"
OpName %93 "world_position"
OpName %94 "vs_main"
OpName %134 "color"
OpName %135 "i"
OpName %76 "out"
OpName %80 "position"
OpName %83 "normal"
OpName %85 "proj_position"
OpName %87 "world_normal"
OpName %89 "world_position"
OpName %90 "vs_main"
OpName %132 "color"
OpName %134 "i"
OpName %139 "proj_position"
OpName %142 "world_normal"
OpName %145 "world_position"
OpName %148 "fs_main"
OpName %201 "color"
OpName %202 "i"
OpName %205 "proj_position"
OpName %207 "world_normal"
OpName %209 "world_position"
OpName %212 "fs_main_without_storage"
OpName %204 "color"
OpName %206 "i"
OpName %210 "proj_position"
OpName %212 "world_normal"
OpName %214 "world_position"
OpName %217 "fs_main_without_storage"
OpMemberDecorate %18 0 Offset 0
OpMemberDecorate %18 0 ColMajor
OpMemberDecorate %18 0 MatrixStride 16
@ -95,19 +95,19 @@ OpDecorate %43 DescriptorSet 0
OpDecorate %43 Binding 2
OpDecorate %45 DescriptorSet 0
OpDecorate %45 Binding 3
OpDecorate %84 Location 0
OpDecorate %87 Location 1
OpDecorate %89 BuiltIn Position
OpDecorate %91 Location 0
OpDecorate %93 Location 1
OpDecorate %80 Location 0
OpDecorate %83 Location 1
OpDecorate %85 BuiltIn Position
OpDecorate %87 Location 0
OpDecorate %89 Location 1
OpDecorate %139 BuiltIn FragCoord
OpDecorate %142 Location 0
OpDecorate %145 Location 1
OpDecorate %147 Location 0
OpDecorate %205 BuiltIn FragCoord
OpDecorate %207 Location 0
OpDecorate %209 Location 1
OpDecorate %211 Location 0
OpDecorate %210 BuiltIn FragCoord
OpDecorate %212 Location 0
OpDecorate %214 Location 1
OpDecorate %216 Location 0
%2 = OpTypeVoid
%4 = OpTypeInt 32 1
%3 = OpConstant %4 10
@ -154,261 +154,277 @@ OpDecorate %211 Location 0
%46 = OpTypePointer UniformConstant %28
%45 = OpVariable %46 UniformConstant
%51 = OpTypeFunction %6 %12 %16
%54 = OpTypePointer Uniform %19
%55 = OpTypePointer Uniform %18
%56 = OpTypePointer Uniform %26
%57 = OpTypePointer StorageBuffer %25
%60 = OpTypeBool
%75 = OpTypeSampledImage %27
%81 = OpTypePointer Function %21
%82 = OpConstantNull %21
%85 = OpTypePointer Input %22
%84 = OpVariable %85 Input
%87 = OpVariable %85 Input
%90 = OpTypePointer Output %16
%89 = OpVariable %90 Output
%92 = OpTypePointer Output %20
%91 = OpVariable %92 Output
%93 = OpVariable %90 Output
%95 = OpTypeFunction %2
%99 = OpTypePointer Uniform %15
%106 = OpTypePointer Function %20
%114 = OpTypeVector %4 3
%119 = OpTypePointer Function %16
%120 = OpConstant %12 2
%128 = OpTypePointer Output %6
%136 = OpTypePointer Function %12
%56 = OpTypeBool
%71 = OpTypeSampledImage %27
%77 = OpTypePointer Function %21
%78 = OpConstantNull %21
%81 = OpTypePointer Input %22
%80 = OpVariable %81 Input
%83 = OpVariable %81 Input
%86 = OpTypePointer Output %16
%85 = OpVariable %86 Output
%88 = OpTypePointer Output %20
%87 = OpVariable %88 Output
%89 = OpVariable %86 Output
%91 = OpTypeFunction %2
%92 = OpTypePointer Uniform %18
%94 = OpTypePointer Uniform %19
%97 = OpTypePointer Uniform %15
%104 = OpTypePointer Function %20
%112 = OpTypeVector %4 3
%117 = OpTypePointer Function %16
%118 = OpConstant %12 2
%126 = OpTypePointer Output %6
%133 = OpConstantNull %20
%135 = OpTypePointer Function %12
%136 = OpConstantNull %12
%140 = OpTypePointer Input %16
%139 = OpVariable %140 Input
%143 = OpTypePointer Input %20
%142 = OpVariable %143 Input
%145 = OpVariable %140 Input
%147 = OpVariable %90 Output
%162 = OpTypePointer Uniform %17
%163 = OpTypePointer Uniform %12
%171 = OpTypePointer StorageBuffer %24
%197 = OpTypePointer Uniform %16
%205 = OpVariable %140 Input
%207 = OpVariable %143 Input
%209 = OpVariable %140 Input
%211 = OpVariable %90 Output
%233 = OpTypePointer Uniform %24
%147 = OpVariable %86 Output
%151 = OpTypePointer StorageBuffer %25
%163 = OpTypePointer Uniform %17
%164 = OpTypePointer Uniform %12
%174 = OpTypePointer StorageBuffer %24
%200 = OpTypePointer Uniform %16
%205 = OpConstantNull %20
%207 = OpConstantNull %12
%210 = OpVariable %140 Input
%212 = OpVariable %143 Input
%214 = OpVariable %140 Input
%216 = OpVariable %86 Output
%220 = OpTypePointer Uniform %26
%241 = OpTypePointer Uniform %24
%50 = OpFunction %6 None %51
%48 = OpFunctionParameter %12
%49 = OpFunctionParameter %16
%47 = OpLabel
%52 = OpLoad %27 %43
%53 = OpLoad %28 %45
OpBranch %58
%58 = OpLabel
%59 = OpCompositeExtract %6 %49 3
%61 = OpFOrdLessThanEqual %60 %59 %5
OpSelectionMerge %62 None
OpBranchConditional %61 %63 %62
%63 = OpLabel
OpBranch %54
%54 = OpLabel
%55 = OpCompositeExtract %6 %49 3
%57 = OpFOrdLessThanEqual %56 %55 %5
OpSelectionMerge %58 None
OpBranchConditional %57 %59 %58
%59 = OpLabel
OpReturnValue %7
%62 = OpLabel
%64 = OpCompositeConstruct %29 %8 %9
%65 = OpCompositeExtract %6 %49 3
%66 = OpFDiv %6 %7 %65
%67 = OpVectorShuffle %29 %49 %49 0 1
%68 = OpFMul %29 %67 %64
%69 = OpVectorTimesScalar %29 %68 %66
%70 = OpCompositeConstruct %29 %8 %8
%71 = OpFAdd %29 %69 %70
%72 = OpBitcast %4 %48
%73 = OpCompositeExtract %6 %49 2
%74 = OpFMul %6 %73 %66
%76 = OpConvertUToF %6 %72
%77 = OpCompositeConstruct %20 %71 %76
%78 = OpSampledImage %75 %52 %53
%79 = OpImageSampleDrefExplicitLod %6 %78 %77 %74 Lod %5
OpReturnValue %79
%58 = OpLabel
%60 = OpCompositeConstruct %29 %8 %9
%61 = OpCompositeExtract %6 %49 3
%62 = OpFDiv %6 %7 %61
%63 = OpVectorShuffle %29 %49 %49 0 1
%64 = OpFMul %29 %63 %60
%65 = OpVectorTimesScalar %29 %64 %62
%66 = OpCompositeConstruct %29 %8 %8
%67 = OpFAdd %29 %65 %66
%68 = OpBitcast %4 %48
%69 = OpCompositeExtract %6 %49 2
%70 = OpFMul %6 %69 %62
%72 = OpConvertUToF %6 %68
%73 = OpCompositeConstruct %20 %67 %72
%74 = OpSampledImage %71 %52 %53
%75 = OpImageSampleDrefExplicitLod %6 %74 %73 %70 Lod %5
OpReturnValue %75
OpFunctionEnd
%94 = OpFunction %2 None %95
%83 = OpLabel
%80 = OpVariable %81 Function %82
%86 = OpLoad %22 %84
%88 = OpLoad %22 %87
%96 = OpAccessChain %55 %31 %13
%97 = OpAccessChain %54 %34 %13
OpBranch %98
%98 = OpLabel
%100 = OpAccessChain %99 %97 %13
%90 = OpFunction %2 None %91
%79 = OpLabel
%76 = OpVariable %77 Function %78
%82 = OpLoad %22 %80
%84 = OpLoad %22 %83
%93 = OpAccessChain %92 %31 %13
%95 = OpAccessChain %94 %34 %13
OpBranch %96
%96 = OpLabel
%98 = OpAccessChain %97 %95 %13
%99 = OpLoad %15 %98
%100 = OpAccessChain %97 %95 %13
%101 = OpLoad %15 %100
%102 = OpAccessChain %99 %97 %13
%103 = OpLoad %15 %102
%104 = OpConvertSToF %16 %86
%105 = OpMatrixTimesVector %16 %103 %104
%107 = OpCompositeExtract %16 %101 0
%102 = OpConvertSToF %16 %82
%103 = OpMatrixTimesVector %16 %101 %102
%105 = OpCompositeExtract %16 %99 0
%106 = OpVectorShuffle %20 %105 %105 0 1 2
%107 = OpCompositeExtract %16 %99 1
%108 = OpVectorShuffle %20 %107 %107 0 1 2
%109 = OpCompositeExtract %16 %101 1
%109 = OpCompositeExtract %16 %99 2
%110 = OpVectorShuffle %20 %109 %109 0 1 2
%111 = OpCompositeExtract %16 %101 2
%112 = OpVectorShuffle %20 %111 %111 0 1 2
%113 = OpCompositeConstruct %23 %108 %110 %112
%115 = OpVectorShuffle %114 %88 %88 0 1 2
%116 = OpConvertSToF %20 %115
%117 = OpMatrixTimesVector %20 %113 %116
%118 = OpAccessChain %106 %80 %14
OpStore %118 %117
%121 = OpAccessChain %119 %80 %120
OpStore %121 %105
%122 = OpAccessChain %99 %96 %13
%123 = OpLoad %15 %122
%124 = OpMatrixTimesVector %16 %123 %105
%125 = OpAccessChain %119 %80 %13
OpStore %125 %124
%126 = OpLoad %21 %80
%127 = OpCompositeExtract %16 %126 0
OpStore %89 %127
%129 = OpAccessChain %128 %89 %14
%130 = OpLoad %6 %129
%131 = OpFNegate %6 %130
OpStore %129 %131
%132 = OpCompositeExtract %20 %126 1
OpStore %91 %132
%133 = OpCompositeExtract %16 %126 2
OpStore %93 %133
%111 = OpCompositeConstruct %23 %106 %108 %110
%113 = OpVectorShuffle %112 %84 %84 0 1 2
%114 = OpConvertSToF %20 %113
%115 = OpMatrixTimesVector %20 %111 %114
%116 = OpAccessChain %104 %76 %14
OpStore %116 %115
%119 = OpAccessChain %117 %76 %118
OpStore %119 %103
%120 = OpAccessChain %97 %93 %13
%121 = OpLoad %15 %120
%122 = OpMatrixTimesVector %16 %121 %103
%123 = OpAccessChain %117 %76 %13
OpStore %123 %122
%124 = OpLoad %21 %76
%125 = OpCompositeExtract %16 %124 0
OpStore %85 %125
%127 = OpAccessChain %126 %85 %14
%128 = OpLoad %6 %127
%129 = OpFNegate %6 %128
OpStore %127 %129
%130 = OpCompositeExtract %20 %124 1
OpStore %87 %130
%131 = OpCompositeExtract %16 %124 2
OpStore %89 %131
OpReturn
OpFunctionEnd
%148 = OpFunction %2 None %95
%148 = OpFunction %2 None %91
%137 = OpLabel
%134 = OpVariable %106 Function %30
%135 = OpVariable %136 Function %13
%132 = OpVariable %104 Function %133
%134 = OpVariable %135 Function %136
%141 = OpLoad %16 %139
%144 = OpLoad %20 %142
%146 = OpLoad %16 %145
%138 = OpCompositeConstruct %21 %141 %144 %146
%149 = OpAccessChain %55 %31 %13
%150 = OpAccessChain %54 %34 %13
%151 = OpAccessChain %57 %37 %13
%152 = OpLoad %27 %43
%153 = OpLoad %28 %45
OpBranch %154
%154 = OpLabel
%155 = OpCompositeExtract %20 %138 1
%156 = OpExtInst %20 %1 Normalize %155
OpBranch %157
%157 = OpLabel
OpLoopMerge %158 %160 None
OpBranch %159
%159 = OpLabel
%161 = OpLoad %12 %135
%164 = OpAccessChain %163 %149 %14 %13
%165 = OpLoad %12 %164
%166 = OpExtInst %12 %1 UMin %165 %11
%167 = OpULessThan %60 %161 %166
OpSelectionMerge %168 None
OpBranchConditional %167 %168 %169
%169 = OpLabel
%149 = OpAccessChain %92 %31 %13
%150 = OpAccessChain %94 %34 %13
%152 = OpAccessChain %151 %37 %13
%153 = OpLoad %27 %43
%154 = OpLoad %28 %45
OpBranch %155
%155 = OpLabel
%156 = OpCompositeExtract %20 %138 1
%157 = OpExtInst %20 %1 Normalize %156
OpStore %132 %30
OpStore %134 %13
OpBranch %158
%168 = OpLabel
%170 = OpLoad %12 %135
%172 = OpAccessChain %171 %151 %170
%173 = OpLoad %24 %172
%174 = OpLoad %12 %135
%175 = OpCompositeExtract %15 %173 0
%176 = OpCompositeExtract %16 %138 2
%177 = OpMatrixTimesVector %16 %175 %176
%178 = OpFunctionCall %6 %50 %174 %177
%179 = OpCompositeExtract %16 %173 1
%180 = OpVectorShuffle %20 %179 %179 0 1 2
%181 = OpCompositeExtract %16 %138 2
%182 = OpVectorShuffle %20 %181 %181 0 1 2
%183 = OpFSub %20 %180 %182
%184 = OpExtInst %20 %1 Normalize %183
%185 = OpDot %6 %156 %184
%186 = OpExtInst %6 %1 FMax %5 %185
%187 = OpLoad %20 %134
%188 = OpFMul %6 %178 %186
%189 = OpCompositeExtract %16 %173 2
%190 = OpVectorShuffle %20 %189 %189 0 1 2
%191 = OpVectorTimesScalar %20 %190 %188
%192 = OpFAdd %20 %187 %191
OpStore %134 %192
%158 = OpLabel
OpLoopMerge %159 %161 None
OpBranch %160
%160 = OpLabel
%193 = OpLoad %12 %135
%194 = OpIAdd %12 %193 %14
OpStore %135 %194
OpBranch %157
%158 = OpLabel
%195 = OpLoad %20 %134
%196 = OpCompositeConstruct %16 %195 %7
%198 = OpAccessChain %197 %150 %14
%199 = OpLoad %16 %198
%200 = OpFMul %16 %196 %199
OpStore %147 %200
%162 = OpLoad %12 %134
%165 = OpAccessChain %164 %149 %14 %13
%166 = OpLoad %12 %165
%167 = OpExtInst %12 %1 UMin %166 %11
%168 = OpULessThan %56 %162 %167
OpSelectionMerge %169 None
OpBranchConditional %168 %169 %170
%170 = OpLabel
OpBranch %159
%169 = OpLabel
OpBranch %171
%171 = OpLabel
%173 = OpLoad %12 %134
%175 = OpAccessChain %174 %152 %173
%176 = OpLoad %24 %175
%177 = OpLoad %12 %134
%178 = OpCompositeExtract %15 %176 0
%179 = OpCompositeExtract %16 %138 2
%180 = OpMatrixTimesVector %16 %178 %179
%181 = OpFunctionCall %6 %50 %177 %180
%182 = OpCompositeExtract %16 %176 1
%183 = OpVectorShuffle %20 %182 %182 0 1 2
%184 = OpCompositeExtract %16 %138 2
%185 = OpVectorShuffle %20 %184 %184 0 1 2
%186 = OpFSub %20 %183 %185
%187 = OpExtInst %20 %1 Normalize %186
%188 = OpDot %6 %157 %187
%189 = OpExtInst %6 %1 FMax %5 %188
%190 = OpFMul %6 %181 %189
%191 = OpCompositeExtract %16 %176 2
%192 = OpVectorShuffle %20 %191 %191 0 1 2
%193 = OpVectorTimesScalar %20 %192 %190
%194 = OpLoad %20 %132
%195 = OpFAdd %20 %194 %193
OpStore %132 %195
OpBranch %172
%172 = OpLabel
OpBranch %161
%161 = OpLabel
%196 = OpLoad %12 %134
%197 = OpIAdd %12 %196 %14
OpStore %134 %197
OpBranch %158
%159 = OpLabel
%198 = OpLoad %20 %132
%199 = OpCompositeConstruct %16 %198 %7
%201 = OpAccessChain %200 %150 %14
%202 = OpLoad %16 %201
%203 = OpFMul %16 %199 %202
OpStore %147 %203
OpReturn
OpFunctionEnd
%212 = OpFunction %2 None %95
%203 = OpLabel
%201 = OpVariable %106 Function %30
%202 = OpVariable %136 Function %13
%206 = OpLoad %16 %205
%208 = OpLoad %20 %207
%210 = OpLoad %16 %209
%204 = OpCompositeConstruct %21 %206 %208 %210
%213 = OpAccessChain %55 %31 %13
%214 = OpAccessChain %54 %34 %13
%215 = OpAccessChain %56 %40 %13
%216 = OpLoad %27 %43
%217 = OpLoad %28 %45
OpBranch %218
%218 = OpLabel
%219 = OpCompositeExtract %20 %204 1
%220 = OpExtInst %20 %1 Normalize %219
OpBranch %221
%221 = OpLabel
OpLoopMerge %222 %224 None
OpBranch %223
%223 = OpLabel
%225 = OpLoad %12 %202
%226 = OpAccessChain %163 %213 %14 %13
%227 = OpLoad %12 %226
%228 = OpExtInst %12 %1 UMin %227 %11
%229 = OpULessThan %60 %225 %228
OpSelectionMerge %230 None
OpBranchConditional %229 %230 %231
%231 = OpLabel
OpBranch %222
%230 = OpLabel
%232 = OpLoad %12 %202
%234 = OpAccessChain %233 %215 %232
%235 = OpLoad %24 %234
%236 = OpLoad %12 %202
%237 = OpCompositeExtract %15 %235 0
%238 = OpCompositeExtract %16 %204 2
%239 = OpMatrixTimesVector %16 %237 %238
%240 = OpFunctionCall %6 %50 %236 %239
%241 = OpCompositeExtract %16 %235 1
%242 = OpVectorShuffle %20 %241 %241 0 1 2
%243 = OpCompositeExtract %16 %204 2
%244 = OpVectorShuffle %20 %243 %243 0 1 2
%245 = OpFSub %20 %242 %244
%246 = OpExtInst %20 %1 Normalize %245
%247 = OpDot %6 %220 %246
%248 = OpExtInst %6 %1 FMax %5 %247
%249 = OpLoad %20 %201
%250 = OpFMul %6 %240 %248
%251 = OpCompositeExtract %16 %235 2
%252 = OpVectorShuffle %20 %251 %251 0 1 2
%253 = OpVectorTimesScalar %20 %252 %250
%254 = OpFAdd %20 %249 %253
OpStore %201 %254
%217 = OpFunction %2 None %91
%208 = OpLabel
%204 = OpVariable %104 Function %205
%206 = OpVariable %135 Function %207
%211 = OpLoad %16 %210
%213 = OpLoad %20 %212
%215 = OpLoad %16 %214
%209 = OpCompositeConstruct %21 %211 %213 %215
%218 = OpAccessChain %92 %31 %13
%219 = OpAccessChain %94 %34 %13
%221 = OpAccessChain %220 %40 %13
%222 = OpLoad %27 %43
%223 = OpLoad %28 %45
OpBranch %224
%224 = OpLabel
%255 = OpLoad %12 %202
%256 = OpIAdd %12 %255 %14
OpStore %202 %256
OpBranch %221
%222 = OpLabel
%257 = OpLoad %20 %201
%258 = OpCompositeConstruct %16 %257 %7
%259 = OpAccessChain %197 %214 %14
%260 = OpLoad %16 %259
%261 = OpFMul %16 %258 %260
OpStore %211 %261
%225 = OpCompositeExtract %20 %209 1
%226 = OpExtInst %20 %1 Normalize %225
OpStore %204 %30
OpStore %206 %13
OpBranch %227
%227 = OpLabel
OpLoopMerge %228 %230 None
OpBranch %229
%229 = OpLabel
%231 = OpLoad %12 %206
%232 = OpAccessChain %164 %218 %14 %13
%233 = OpLoad %12 %232
%234 = OpExtInst %12 %1 UMin %233 %11
%235 = OpULessThan %56 %231 %234
OpSelectionMerge %236 None
OpBranchConditional %235 %236 %237
%237 = OpLabel
OpBranch %228
%236 = OpLabel
OpBranch %238
%238 = OpLabel
%240 = OpLoad %12 %206
%242 = OpAccessChain %241 %221 %240
%243 = OpLoad %24 %242
%244 = OpLoad %12 %206
%245 = OpCompositeExtract %15 %243 0
%246 = OpCompositeExtract %16 %209 2
%247 = OpMatrixTimesVector %16 %245 %246
%248 = OpFunctionCall %6 %50 %244 %247
%249 = OpCompositeExtract %16 %243 1
%250 = OpVectorShuffle %20 %249 %249 0 1 2
%251 = OpCompositeExtract %16 %209 2
%252 = OpVectorShuffle %20 %251 %251 0 1 2
%253 = OpFSub %20 %250 %252
%254 = OpExtInst %20 %1 Normalize %253
%255 = OpDot %6 %226 %254
%256 = OpExtInst %6 %1 FMax %5 %255
%257 = OpFMul %6 %248 %256
%258 = OpCompositeExtract %16 %243 2
%259 = OpVectorShuffle %20 %258 %258 0 1 2
%260 = OpVectorTimesScalar %20 %259 %257
%261 = OpLoad %20 %204
%262 = OpFAdd %20 %261 %260
OpStore %204 %262
OpBranch %239
%239 = OpLabel
OpBranch %230
%230 = OpLabel
%263 = OpLoad %12 %206
%264 = OpIAdd %12 %263 %14
OpStore %206 %264
OpBranch %227
%228 = OpLabel
%265 = OpLoad %20 %204
%266 = OpCompositeConstruct %16 %265 %7
%267 = OpAccessChain %200 %219 %14
%268 = OpLoad %16 %267
%269 = OpFMul %16 %266 %268
OpStore %216 %269
OpReturn
OpFunctionEnd

View File

@ -36,82 +36,84 @@ var<uniform> nested_mat_cx2_: MatCx2InArray;
var<workgroup> val: u32;
fn test_matrix_within_struct_accesses() {
var idx: i32 = 1;
var idx: i32;
var t: Baz;
let _e6 = idx;
idx = (_e6 - 1);
idx = 1;
let _e2 = idx;
idx = (_e2 - 1);
_ = baz.m;
_ = baz.m[0];
let _e16 = idx;
_ = baz.m[_e16];
let _e15 = idx;
_ = baz.m[_e15];
_ = baz.m[0][1];
let _e28 = idx;
_ = baz.m[0][_e28];
let _e32 = idx;
_ = baz.m[_e32][1];
let _e38 = idx;
let _e40 = idx;
_ = baz.m[_e38][_e40];
let _e29 = idx;
_ = baz.m[0][_e29];
let _e34 = idx;
_ = baz.m[_e34][1];
let _e41 = idx;
let _e43 = idx;
_ = baz.m[_e41][_e43];
t = Baz(mat3x2<f32>(vec2<f32>(1.0), vec2<f32>(2.0), vec2<f32>(3.0)));
let _e52 = idx;
idx = (_e52 + 1);
let _e55 = idx;
idx = (_e55 + 1);
t.m = mat3x2<f32>(vec2<f32>(6.0), vec2<f32>(5.0), vec2<f32>(4.0));
t.m[0] = vec2<f32>(9.0);
let _e69 = idx;
t.m[_e69] = vec2<f32>(90.0);
let _e72 = idx;
t.m[_e72] = vec2<f32>(90.0);
t.m[0][1] = 10.0;
let _e82 = idx;
t.m[0][_e82] = 20.0;
let _e86 = idx;
t.m[_e86][1] = 30.0;
let _e92 = idx;
let _e94 = idx;
t.m[_e92][_e94] = 40.0;
let _e85 = idx;
t.m[0][_e85] = 20.0;
let _e89 = idx;
t.m[_e89][1] = 30.0;
let _e95 = idx;
let _e97 = idx;
t.m[_e95][_e97] = 40.0;
return;
}
fn test_matrix_within_array_within_struct_accesses() {
var idx_1: i32 = 1;
var idx_1: i32;
var t_1: MatCx2InArray;
let _e7 = idx_1;
idx_1 = (_e7 - 1);
idx_1 = 1;
let _e2 = idx_1;
idx_1 = (_e2 - 1);
_ = nested_mat_cx2_.am;
_ = nested_mat_cx2_.am[0];
_ = nested_mat_cx2_.am[0][0];
let _e25 = idx_1;
_ = nested_mat_cx2_.am[0][_e25];
let _e24 = idx_1;
_ = nested_mat_cx2_.am[0][_e24];
_ = nested_mat_cx2_.am[0][0][1];
let _e41 = idx_1;
_ = nested_mat_cx2_.am[0][0][_e41];
let _e47 = idx_1;
_ = nested_mat_cx2_.am[0][_e47][1];
let _e55 = idx_1;
let _e57 = idx_1;
_ = nested_mat_cx2_.am[0][_e55][_e57];
let _e42 = idx_1;
_ = nested_mat_cx2_.am[0][0][_e42];
let _e49 = idx_1;
_ = nested_mat_cx2_.am[0][_e49][1];
let _e58 = idx_1;
let _e60 = idx_1;
_ = nested_mat_cx2_.am[0][_e58][_e60];
t_1 = MatCx2InArray(array<mat4x2<f32>,2>(mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0)), mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0))));
let _e63 = idx_1;
idx_1 = (_e63 + 1);
let _e66 = idx_1;
idx_1 = (_e66 + 1);
t_1.am = array<mat4x2<f32>,2>(mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0)), mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0)));
t_1.am[0] = mat4x2<f32>(vec2<f32>(8.0), vec2<f32>(7.0), vec2<f32>(6.0), vec2<f32>(5.0));
t_1.am[0][0] = vec2<f32>(9.0);
let _e90 = idx_1;
t_1.am[0][_e90] = vec2<f32>(90.0);
let _e93 = idx_1;
t_1.am[0][_e93] = vec2<f32>(90.0);
t_1.am[0][0][1] = 10.0;
let _e107 = idx_1;
t_1.am[0][0][_e107] = 20.0;
let _e113 = idx_1;
t_1.am[0][_e113][1] = 30.0;
let _e121 = idx_1;
let _e123 = idx_1;
t_1.am[0][_e121][_e123] = 40.0;
let _e110 = idx_1;
t_1.am[0][0][_e110] = 20.0;
let _e116 = idx_1;
t_1.am[0][_e116][1] = 30.0;
let _e124 = idx_1;
let _e126 = idx_1;
t_1.am[0][_e124][_e126] = 40.0;
return;
}
fn read_from_private(foo_1: ptr<function, f32>) -> f32 {
let _e6 = (*foo_1);
return _e6;
let _e1 = (*foo_1);
return _e1;
}
fn test_arr_as_arg(a: array<array<f32,10>,5>) -> f32 {
@ -125,9 +127,10 @@ fn assign_through_ptr_fn(p: ptr<workgroup, u32>) {
@vertex
fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
var foo: f32 = 0.0;
var c: array<i32,5>;
var foo: f32;
var c2_: array<i32,5>;
foo = 0.0;
let baz_1 = foo;
foo = 1.0;
test_matrix_within_struct_accesses();
@ -136,13 +139,13 @@ fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
let arr = bar.arr;
let b = bar._matrix[3][0];
let a_1 = bar.data[(arrayLength((&bar.data)) - 2u)].value;
let c_1 = qux;
let c = qux;
let data_pointer = (&bar.data[0].value);
let _e32 = read_from_private((&foo));
c = array<i32,5>(a_1, i32(b), 3, 4, 5);
c[(vi + 1u)] = 42;
let value = c[vi];
let _e46 = test_arr_as_arg(array<array<f32,10>,5>(array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
let _e34 = read_from_private((&foo));
c2_ = array<i32,5>(a_1, i32(b), 3, 4, 5);
c2_[(vi + 1u)] = 42;
let value = c2_[vi];
let _e48 = test_arr_as_arg(array<array<f32,10>,5>(array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
return vec4<f32>((_matrix * vec4<f32>(vec4<i32>(value))), 2.0);
}
@ -161,22 +164,22 @@ fn atomics() {
var tmp: i32;
let value_1 = atomicLoad((&bar.atom));
let _e10 = atomicAdd((&bar.atom), 5);
tmp = _e10;
let _e13 = atomicSub((&bar.atom), 5);
tmp = _e13;
let _e16 = atomicAnd((&bar.atom), 5);
tmp = _e16;
let _e7 = atomicAdd((&bar.atom), 5);
tmp = _e7;
let _e11 = atomicSub((&bar.atom), 5);
tmp = _e11;
let _e15 = atomicAnd((&bar.atom), 5);
tmp = _e15;
let _e19 = atomicOr((&bar.atom), 5);
tmp = _e19;
let _e22 = atomicXor((&bar.atom), 5);
tmp = _e22;
let _e25 = atomicMin((&bar.atom), 5);
tmp = _e25;
let _e28 = atomicMax((&bar.atom), 5);
tmp = _e28;
let _e31 = atomicExchange((&bar.atom), 5);
let _e23 = atomicXor((&bar.atom), 5);
tmp = _e23;
let _e27 = atomicMin((&bar.atom), 5);
tmp = _e27;
let _e31 = atomicMax((&bar.atom), 5);
tmp = _e31;
let _e35 = atomicExchange((&bar.atom), 5);
tmp = _e35;
atomicStore((&bar.atom), value_1);
return;
}

View File

@ -8,7 +8,7 @@ struct gen___atomic_compare_exchange_result_1 {
exchanged: bool,
}
let SIZE: u32 = 128u;
const SIZE: u32 = 128u;
@group(0) @binding(0)
var<storage, read_write> arr_i32_: array<atomic<i32>,SIZE>;
@ -17,37 +17,42 @@ var<storage, read_write> arr_u32_: array<atomic<u32>,SIZE>;
@compute @workgroup_size(1, 1, 1)
fn test_atomic_compare_exchange_i32_() {
var i: u32 = 0u;
var i: u32;
var old: i32;
var exchanged: bool;
i = 0u;
loop {
let _e5 = i;
if (_e5 < SIZE) {
let _e2 = i;
if (_e2 < SIZE) {
} else {
break;
}
let _e10 = i;
let _e12 = atomicLoad((&arr_i32_[_e10]));
old = _e12;
exchanged = false;
loop {
let _e16 = exchanged;
if !(_e16) {
} else {
break;
{
let _e6 = i;
let _e8 = atomicLoad((&arr_i32_[_e6]));
old = _e8;
exchanged = false;
loop {
let _e12 = exchanged;
if !(_e12) {
} else {
break;
}
{
let _e14 = old;
let new_ = bitcast<i32>((bitcast<f32>(_e14) + 1.0));
let _e20 = i;
let _e22 = old;
let _e23 = atomicCompareExchangeWeak((&arr_i32_[_e20]), _e22, new_);
old = _e23.old_value;
exchanged = _e23.exchanged;
}
}
let _e18 = old;
let new_ = bitcast<i32>((bitcast<f32>(_e18) + 1.0));
let _e23 = i;
let _e25 = old;
let _e26 = atomicCompareExchangeWeak((&arr_i32_[_e23]), _e25, new_);
old = _e26.old_value;
exchanged = _e26.exchanged;
}
continuing {
let _e7 = i;
i = (_e7 + 1u);
let _e26 = i;
i = (_e26 + 1u);
}
}
return;
@ -55,37 +60,42 @@ fn test_atomic_compare_exchange_i32_() {
@compute @workgroup_size(1, 1, 1)
fn test_atomic_compare_exchange_u32_() {
var i_1: u32 = 0u;
var i_1: u32;
var old_1: u32;
var exchanged_1: bool;
i_1 = 0u;
loop {
let _e5 = i_1;
if (_e5 < SIZE) {
let _e2 = i_1;
if (_e2 < SIZE) {
} else {
break;
}
let _e10 = i_1;
let _e12 = atomicLoad((&arr_u32_[_e10]));
old_1 = _e12;
exchanged_1 = false;
loop {
let _e16 = exchanged_1;
if !(_e16) {
} else {
break;
{
let _e6 = i_1;
let _e8 = atomicLoad((&arr_u32_[_e6]));
old_1 = _e8;
exchanged_1 = false;
loop {
let _e12 = exchanged_1;
if !(_e12) {
} else {
break;
}
{
let _e14 = old_1;
let new_1 = bitcast<u32>((bitcast<f32>(_e14) + 1.0));
let _e20 = i_1;
let _e22 = old_1;
let _e23 = atomicCompareExchangeWeak((&arr_u32_[_e20]), _e22, new_1);
old_1 = _e23.old_value;
exchanged_1 = _e23.exchanged;
}
}
let _e18 = old_1;
let new_1 = bitcast<u32>((bitcast<f32>(_e18) + 1.0));
let _e23 = i_1;
let _e25 = old_1;
let _e26 = atomicCompareExchangeWeak((&arr_u32_[_e23]), _e25, new_1);
old_1 = _e26.old_value;
exchanged_1 = _e26.exchanged;
}
continuing {
let _e7 = i_1;
i_1 = (_e7 + 1u);
let _e26 = i_1;
i_1 = (_e26 + 1u);
}
}
return;

View File

@ -27,144 +27,146 @@ var<uniform> uni: UniformIndex;
@fragment
fn main(fragment_in: FragmentIn) -> @location(0) vec4<f32> {
var i1_: i32 = 0;
var i1_: i32;
var i2_: vec2<i32>;
var v1_: f32 = 0.0;
var v1_: f32;
var v4_: vec4<f32>;
let uniform_index = uni.index;
let non_uniform_index = fragment_in.index;
i1_ = 0;
i2_ = vec2<i32>(0);
v1_ = 0.0;
v4_ = vec4<f32>(0.0);
let uv = vec2<f32>(0.0);
let pix = vec2<i32>(0);
let _e27 = i2_;
let _e30 = textureDimensions(texture_array_unbounded[0]);
i2_ = (_e27 + _e30);
let _e32 = i2_;
let _e34 = textureDimensions(texture_array_unbounded[uniform_index]);
i2_ = (_e32 + _e34);
let _e36 = i2_;
let _e38 = textureDimensions(texture_array_unbounded[non_uniform_index]);
i2_ = (_e36 + _e38);
let _e40 = v4_;
let _e45 = textureGather(0, texture_array_bounded[0], samp[0], uv);
v4_ = (_e40 + _e45);
let _e47 = v4_;
let _e50 = textureGather(0, texture_array_bounded[uniform_index], samp[uniform_index], uv);
v4_ = (_e47 + _e50);
let _e52 = v4_;
let _e22 = textureDimensions(texture_array_unbounded[0]);
let _e23 = i2_;
i2_ = (_e23 + _e22);
let _e27 = textureDimensions(texture_array_unbounded[uniform_index]);
let _e28 = i2_;
i2_ = (_e28 + _e27);
let _e32 = textureDimensions(texture_array_unbounded[non_uniform_index]);
let _e33 = i2_;
i2_ = (_e33 + _e32);
let _e41 = textureGather(0, texture_array_bounded[0], samp[0], uv);
let _e42 = v4_;
v4_ = (_e42 + _e41);
let _e48 = textureGather(0, texture_array_bounded[uniform_index], samp[uniform_index], uv);
let _e49 = v4_;
v4_ = (_e49 + _e48);
let _e55 = textureGather(0, texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv);
v4_ = (_e52 + _e55);
let _e57 = v4_;
let _e63 = textureGatherCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
v4_ = (_e57 + _e63);
let _e65 = v4_;
let _e69 = textureGatherCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
v4_ = (_e65 + _e69);
let _e71 = v4_;
let _e75 = textureGatherCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
v4_ = (_e71 + _e75);
let _e77 = v4_;
let _e81 = textureLoad(texture_array_unbounded[0], pix, 0);
v4_ = (_e77 + _e81);
let _e83 = v4_;
let _e86 = textureLoad(texture_array_unbounded[uniform_index], pix, 0);
v4_ = (_e83 + _e86);
let _e88 = v4_;
let _e91 = textureLoad(texture_array_unbounded[non_uniform_index], pix, 0);
v4_ = (_e88 + _e91);
let _e93 = i1_;
let _e96 = textureNumLayers(texture_array_2darray[0]);
i1_ = (_e93 + _e96);
let _e98 = i1_;
let _e100 = textureNumLayers(texture_array_2darray[uniform_index]);
i1_ = (_e98 + _e100);
let _e102 = i1_;
let _e104 = textureNumLayers(texture_array_2darray[non_uniform_index]);
i1_ = (_e102 + _e104);
let _e106 = i1_;
let _e109 = textureNumLevels(texture_array_bounded[0]);
i1_ = (_e106 + _e109);
let _e111 = i1_;
let _e113 = textureNumLevels(texture_array_bounded[uniform_index]);
i1_ = (_e111 + _e113);
let _e115 = i1_;
let _e117 = textureNumLevels(texture_array_bounded[non_uniform_index]);
i1_ = (_e115 + _e117);
let _e119 = i1_;
let _e122 = textureNumSamples(texture_array_multisampled[0]);
i1_ = (_e119 + _e122);
let _e124 = i1_;
let _e126 = textureNumSamples(texture_array_multisampled[uniform_index]);
i1_ = (_e124 + _e126);
let _e56 = v4_;
v4_ = (_e56 + _e55);
let _e65 = textureGatherCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
let _e66 = v4_;
v4_ = (_e66 + _e65);
let _e73 = textureGatherCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
let _e74 = v4_;
v4_ = (_e74 + _e73);
let _e81 = textureGatherCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
let _e82 = v4_;
v4_ = (_e82 + _e81);
let _e88 = textureLoad(texture_array_unbounded[0], pix, 0);
let _e89 = v4_;
v4_ = (_e89 + _e88);
let _e94 = textureLoad(texture_array_unbounded[uniform_index], pix, 0);
let _e95 = v4_;
v4_ = (_e95 + _e94);
let _e100 = textureLoad(texture_array_unbounded[non_uniform_index], pix, 0);
let _e101 = v4_;
v4_ = (_e101 + _e100);
let _e106 = textureNumLayers(texture_array_2darray[0]);
let _e107 = i1_;
i1_ = (_e107 + _e106);
let _e111 = textureNumLayers(texture_array_2darray[uniform_index]);
let _e112 = i1_;
i1_ = (_e112 + _e111);
let _e116 = textureNumLayers(texture_array_2darray[non_uniform_index]);
let _e117 = i1_;
i1_ = (_e117 + _e116);
let _e122 = textureNumLevels(texture_array_bounded[0]);
let _e123 = i1_;
i1_ = (_e123 + _e122);
let _e127 = textureNumLevels(texture_array_bounded[uniform_index]);
let _e128 = i1_;
let _e130 = textureNumSamples(texture_array_multisampled[non_uniform_index]);
i1_ = (_e128 + _e130);
let _e132 = v4_;
let _e137 = textureSample(texture_array_bounded[0], samp[0], uv);
v4_ = (_e132 + _e137);
let _e139 = v4_;
let _e142 = textureSample(texture_array_bounded[uniform_index], samp[uniform_index], uv);
v4_ = (_e139 + _e142);
let _e144 = v4_;
let _e147 = textureSample(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv);
v4_ = (_e144 + _e147);
let _e149 = v4_;
let _e155 = textureSampleBias(texture_array_bounded[0], samp[0], uv, 0.0);
v4_ = (_e149 + _e155);
let _e157 = v4_;
let _e161 = textureSampleBias(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
v4_ = (_e157 + _e161);
let _e163 = v4_;
let _e167 = textureSampleBias(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
v4_ = (_e163 + _e167);
let _e169 = v1_;
let _e175 = textureSampleCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
v1_ = (_e169 + _e175);
let _e177 = v1_;
let _e181 = textureSampleCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
v1_ = (_e177 + _e181);
let _e183 = v1_;
let _e187 = textureSampleCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
v1_ = (_e183 + _e187);
let _e189 = v1_;
let _e195 = textureSampleCompareLevel(texture_array_depth[0], samp_comp[0], uv, 0.0);
v1_ = (_e189 + _e195);
let _e197 = v1_;
let _e201 = textureSampleCompareLevel(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
v1_ = (_e197 + _e201);
let _e203 = v1_;
let _e207 = textureSampleCompareLevel(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
v1_ = (_e203 + _e207);
let _e209 = v4_;
let _e214 = textureSampleGrad(texture_array_bounded[0], samp[0], uv, uv, uv);
v4_ = (_e209 + _e214);
let _e216 = v4_;
let _e219 = textureSampleGrad(texture_array_bounded[uniform_index], samp[uniform_index], uv, uv, uv);
v4_ = (_e216 + _e219);
let _e221 = v4_;
let _e224 = textureSampleGrad(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, uv, uv);
v4_ = (_e221 + _e224);
let _e226 = v4_;
let _e232 = textureSampleLevel(texture_array_bounded[0], samp[0], uv, 0.0);
v4_ = (_e226 + _e232);
let _e234 = v4_;
let _e238 = textureSampleLevel(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
v4_ = (_e234 + _e238);
let _e240 = v4_;
let _e244 = textureSampleLevel(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
v4_ = (_e240 + _e244);
let _e248 = v4_;
textureStore(texture_array_storage[0], pix, _e248);
let _e250 = v4_;
textureStore(texture_array_storage[uniform_index], pix, _e250);
let _e252 = v4_;
textureStore(texture_array_storage[non_uniform_index], pix, _e252);
let _e253 = i2_;
let _e254 = i1_;
let v2_ = vec2<f32>((_e253 + vec2<i32>(_e254)));
let _e258 = v4_;
let _e265 = v1_;
return ((_e258 + vec4<f32>(v2_.x, v2_.y, v2_.x, v2_.y)) + vec4<f32>(_e265));
i1_ = (_e128 + _e127);
let _e132 = textureNumLevels(texture_array_bounded[non_uniform_index]);
let _e133 = i1_;
i1_ = (_e133 + _e132);
let _e138 = textureNumSamples(texture_array_multisampled[0]);
let _e139 = i1_;
i1_ = (_e139 + _e138);
let _e143 = textureNumSamples(texture_array_multisampled[uniform_index]);
let _e144 = i1_;
i1_ = (_e144 + _e143);
let _e148 = textureNumSamples(texture_array_multisampled[non_uniform_index]);
let _e149 = i1_;
i1_ = (_e149 + _e148);
let _e157 = textureSample(texture_array_bounded[0], samp[0], uv);
let _e158 = v4_;
v4_ = (_e158 + _e157);
let _e164 = textureSample(texture_array_bounded[uniform_index], samp[uniform_index], uv);
let _e165 = v4_;
v4_ = (_e165 + _e164);
let _e171 = textureSample(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv);
let _e172 = v4_;
v4_ = (_e172 + _e171);
let _e181 = textureSampleBias(texture_array_bounded[0], samp[0], uv, 0.0);
let _e182 = v4_;
v4_ = (_e182 + _e181);
let _e189 = textureSampleBias(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
let _e190 = v4_;
v4_ = (_e190 + _e189);
let _e197 = textureSampleBias(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
let _e198 = v4_;
v4_ = (_e198 + _e197);
let _e207 = textureSampleCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
let _e208 = v1_;
v1_ = (_e208 + _e207);
let _e215 = textureSampleCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
let _e216 = v1_;
v1_ = (_e216 + _e215);
let _e223 = textureSampleCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
let _e224 = v1_;
v1_ = (_e224 + _e223);
let _e233 = textureSampleCompareLevel(texture_array_depth[0], samp_comp[0], uv, 0.0);
let _e234 = v1_;
v1_ = (_e234 + _e233);
let _e241 = textureSampleCompareLevel(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
let _e242 = v1_;
v1_ = (_e242 + _e241);
let _e249 = textureSampleCompareLevel(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
let _e250 = v1_;
v1_ = (_e250 + _e249);
let _e258 = textureSampleGrad(texture_array_bounded[0], samp[0], uv, uv, uv);
let _e259 = v4_;
v4_ = (_e259 + _e258);
let _e265 = textureSampleGrad(texture_array_bounded[uniform_index], samp[uniform_index], uv, uv, uv);
let _e266 = v4_;
v4_ = (_e266 + _e265);
let _e272 = textureSampleGrad(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, uv, uv);
let _e273 = v4_;
v4_ = (_e273 + _e272);
let _e282 = textureSampleLevel(texture_array_bounded[0], samp[0], uv, 0.0);
let _e283 = v4_;
v4_ = (_e283 + _e282);
let _e290 = textureSampleLevel(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
let _e291 = v4_;
v4_ = (_e291 + _e290);
let _e298 = textureSampleLevel(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
let _e299 = v4_;
v4_ = (_e299 + _e298);
let _e304 = v4_;
textureStore(texture_array_storage[0], pix, _e304);
let _e307 = v4_;
textureStore(texture_array_storage[uniform_index], pix, _e307);
let _e310 = v4_;
textureStore(texture_array_storage[non_uniform_index], pix, _e310);
let _e311 = i2_;
let _e312 = i1_;
let v2_ = vec2<f32>((_e311 + vec2<i32>(_e312)));
let _e316 = v4_;
let _e323 = v1_;
return ((_e316 + vec4<f32>(v2_.x, v2_.y, v2_.x, v2_.y)) + vec4<f32>(_e323));
}

View File

@ -1,19 +1,21 @@
@compute @workgroup_size(1, 1, 1)
fn main() {
var i: i32 = 0;
var i: i32;
var i2_: vec2<i32>;
var i3_: vec3<i32>;
var i4_: vec4<i32>;
var u: u32 = 0u;
var u: u32;
var u2_: vec2<u32>;
var u3_: vec3<u32>;
var u4_: vec4<u32>;
var f2_: vec2<f32>;
var f4_: vec4<f32>;
i = 0;
i2_ = vec2<i32>(0);
i3_ = vec3<i32>(0);
i4_ = vec4<i32>(0);
u = 0u;
u2_ = vec2<u32>(0u);
u3_ = vec3<u32>(0u);
u4_ = vec4<u32>(0u);

View File

@ -17,7 +17,7 @@ struct Particles {
particles: array<Particle>,
}
let NUM_PARTICLES: u32 = 1500u;
const NUM_PARTICLES: u32 = 1500u;
@group(0) @binding(0)
var<uniform> params: SimParams;
@ -33,119 +33,122 @@ fn main(@builtin(global_invocation_id) global_invocation_id: vec3<u32>) {
var cMass: vec2<f32>;
var cVel: vec2<f32>;
var colVel: vec2<f32>;
var cMassCount: i32 = 0;
var cVelCount: i32 = 0;
var cMassCount: i32;
var cVelCount: i32;
var pos: vec2<f32>;
var vel: vec2<f32>;
var i: u32 = 0u;
var i: u32;
let index = global_invocation_id.x;
if (index >= NUM_PARTICLES) {
return;
}
let _e10 = particlesSrc.particles[index].pos;
vPos = _e10;
let _e15 = particlesSrc.particles[index].vel;
vVel = _e15;
let _e8 = particlesSrc.particles[index].pos;
vPos = _e8;
let _e14 = particlesSrc.particles[index].vel;
vVel = _e14;
cMass = vec2<f32>(0.0, 0.0);
cVel = vec2<f32>(0.0, 0.0);
colVel = vec2<f32>(0.0, 0.0);
cMassCount = 0;
cVelCount = 0;
i = 0u;
loop {
let _e37 = i;
if (_e37 >= NUM_PARTICLES) {
let _e36 = i;
if (_e36 >= NUM_PARTICLES) {
break;
}
let _e39 = i;
if (_e39 == index) {
continue;
}
let _e42 = i;
let _e45 = particlesSrc.particles[_e42].pos;
pos = _e45;
let _e47 = i;
let _e50 = particlesSrc.particles[_e47].vel;
vel = _e50;
let _e51 = pos;
let _e52 = vPos;
let _e55 = params.rule1Distance;
if (distance(_e51, _e52) < _e55) {
let _e57 = cMass;
let _e58 = pos;
cMass = (_e57 + _e58);
let _e60 = cMassCount;
cMassCount = (_e60 + 1);
let _e43 = i;
let _e46 = particlesSrc.particles[_e43].pos;
pos = _e46;
let _e49 = i;
let _e52 = particlesSrc.particles[_e49].vel;
vel = _e52;
let _e53 = pos;
let _e54 = vPos;
let _e58 = params.rule1Distance;
if (distance(_e53, _e54) < _e58) {
let _e60 = cMass;
let _e61 = pos;
cMass = (_e60 + _e61);
let _e63 = cMassCount;
cMassCount = (_e63 + 1);
}
let _e63 = pos;
let _e64 = vPos;
let _e67 = params.rule2Distance;
if (distance(_e63, _e64) < _e67) {
let _e69 = colVel;
let _e70 = pos;
let _e71 = vPos;
colVel = (_e69 - (_e70 - _e71));
let _e66 = pos;
let _e67 = vPos;
let _e71 = params.rule2Distance;
if (distance(_e66, _e67) < _e71) {
let _e73 = colVel;
let _e74 = pos;
let _e75 = vPos;
colVel = (_e73 - (_e74 - _e75));
}
let _e74 = pos;
let _e75 = vPos;
let _e78 = params.rule3Distance;
if (distance(_e74, _e75) < _e78) {
let _e80 = cVel;
let _e81 = vel;
cVel = (_e80 + _e81);
let _e83 = cVelCount;
cVelCount = (_e83 + 1);
let _e78 = pos;
let _e79 = vPos;
let _e83 = params.rule3Distance;
if (distance(_e78, _e79) < _e83) {
let _e85 = cVel;
let _e86 = vel;
cVel = (_e85 + _e86);
let _e88 = cVelCount;
cVelCount = (_e88 + 1);
}
continuing {
let _e86 = i;
i = (_e86 + 1u);
let _e91 = i;
i = (_e91 + 1u);
}
}
let _e89 = cMassCount;
if (_e89 > 0) {
let _e92 = cMass;
let _e93 = cMassCount;
let _e97 = vPos;
cMass = ((_e92 / vec2<f32>(f32(_e93))) - _e97);
let _e94 = cMassCount;
if (_e94 > 0) {
let _e97 = cMass;
let _e98 = cMassCount;
let _e102 = vPos;
cMass = ((_e97 / vec2<f32>(f32(_e98))) - _e102);
}
let _e99 = cVelCount;
if (_e99 > 0) {
let _e102 = cVel;
let _e103 = cVelCount;
cVel = (_e102 / vec2<f32>(f32(_e103)));
let _e104 = cVelCount;
if (_e104 > 0) {
let _e107 = cVel;
let _e108 = cVelCount;
cVel = (_e107 / vec2<f32>(f32(_e108)));
}
let _e107 = vVel;
let _e108 = cMass;
let _e110 = params.rule1Scale;
let _e113 = colVel;
let _e115 = params.rule2Scale;
let _e118 = cVel;
let _e120 = params.rule3Scale;
vVel = (((_e107 + (_e108 * _e110)) + (_e113 * _e115)) + (_e118 * _e120));
let _e123 = vVel;
let _e125 = vVel;
vVel = (normalize(_e123) * clamp(length(_e125), 0.0, 0.10000000149011612));
let _e131 = vPos;
let _e132 = vVel;
let _e134 = params.deltaT;
vPos = (_e131 + (_e132 * _e134));
let _e138 = vPos.x;
if (_e138 < -1.0) {
let _e112 = vVel;
let _e113 = cMass;
let _e116 = params.rule1Scale;
let _e119 = colVel;
let _e122 = params.rule2Scale;
let _e125 = cVel;
let _e128 = params.rule3Scale;
vVel = (((_e112 + (_e113 * _e116)) + (_e119 * _e122)) + (_e125 * _e128));
let _e131 = vVel;
let _e133 = vVel;
vVel = (normalize(_e131) * clamp(length(_e133), 0.0, 0.10000000149011612));
let _e139 = vPos;
let _e140 = vVel;
let _e143 = params.deltaT;
vPos = (_e139 + (_e140 * _e143));
let _e147 = vPos.x;
if (_e147 < -1.0) {
vPos.x = 1.0;
}
let _e144 = vPos.x;
if (_e144 > 1.0) {
let _e153 = vPos.x;
if (_e153 > 1.0) {
vPos.x = -1.0;
}
let _e150 = vPos.y;
if (_e150 < -1.0) {
let _e159 = vPos.y;
if (_e159 < -1.0) {
vPos.y = 1.0;
}
let _e156 = vPos.y;
if (_e156 > 1.0) {
let _e165 = vPos.y;
if (_e165 > 1.0) {
vPos.y = -1.0;
}
let _e164 = vPos;
particlesDst.particles[index].pos = _e164;
let _e168 = vVel;
particlesDst.particles[index].vel = _e168;
let _e174 = vPos;
particlesDst.particles[index].pos = _e174;
let _e179 = vVel;
particlesDst.particles[index].vel = _e179;
return;
}

View File

@ -7,34 +7,37 @@ var<storage, read_write> v_indices: PrimeIndices;
fn collatz_iterations(n_base: u32) -> u32 {
var n: u32;
var i: u32 = 0u;
var i: u32;
n = n_base;
i = 0u;
loop {
let _e5 = n;
if (_e5 > 1u) {
let _e4 = n;
if (_e4 > 1u) {
} else {
break;
}
let _e8 = n;
if ((_e8 % 2u) == 0u) {
let _e13 = n;
n = (_e13 / 2u);
} else {
let _e17 = n;
n = ((3u * _e17) + 1u);
{
let _e7 = n;
if ((_e7 % 2u) == 0u) {
let _e12 = n;
n = (_e12 / 2u);
} else {
let _e16 = n;
n = ((3u * _e16) + 1u);
}
let _e20 = i;
i = (_e20 + 1u);
}
let _e21 = i;
i = (_e21 + 1u);
}
let _e24 = i;
return _e24;
let _e23 = i;
return _e23;
}
@compute @workgroup_size(1, 1, 1)
fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
let _e8 = v_indices.data[global_id.x];
let _e9 = collatz_iterations(_e8);
v_indices.data[global_id.x] = _e9;
let _e9 = v_indices.data[global_id.x];
let _e10 = collatz_iterations(_e9);
v_indices.data[global_id.x] = _e10;
return;
}

View File

@ -1,14 +1,14 @@
struct Foo {
struct FooStruct {
v3_: vec3<f32>,
v1_: f32,
}
let Foo_2: bool = true;
const Foo_1: bool = true;
var<workgroup> wg: array<f32,10u>;
var<workgroup> at_1: atomic<u32>;
@group(0) @binding(1)
var<storage, read_write> alignment: Foo;
var<storage, read_write> alignment: FooStruct;
@group(0) @binding(2)
var<storage> dummy: array<vec2<f32>>;
@group(0) @binding(3)
@ -27,13 +27,14 @@ fn test_msl_packed_vec3_as_arg(arg: vec3<f32>) {
}
fn test_msl_packed_vec3_() {
var idx: i32 = 1;
var idx: i32;
alignment.v3_ = vec3<f32>(1.0);
idx = 1;
alignment.v3_.x = 1.0;
alignment.v3_.x = 2.0;
let _e23 = idx;
alignment.v3_[_e23] = 3.0;
let _e17 = idx;
alignment.v3_[_e17] = 3.0;
let data = alignment;
_ = data.v3_;
_ = data.v3_.zx;
@ -46,26 +47,28 @@ fn test_msl_packed_vec3_() {
@compute @workgroup_size(1, 1, 1)
fn main() {
var Foo_1: f32 = 1.0;
var at: bool = true;
var Foo: f32;
var at: bool;
test_msl_packed_vec3_();
let _e16 = global_nested_arrays_of_matrices_4x2_[0][0];
let _e23 = global_nested_arrays_of_matrices_2x4_[0][0][0];
wg[7] = (_e16 * _e23).x;
let _e28 = global_mat;
let _e29 = global_vec;
wg[6] = (_e28 * _e29).x;
let _e37 = dummy[1].y;
wg[5] = _e37;
let _e8 = global_nested_arrays_of_matrices_4x2_[0][0];
let _e16 = global_nested_arrays_of_matrices_2x4_[0][0][0];
wg[7] = (_e8 * _e16).x;
let _e23 = global_mat;
let _e25 = global_vec;
wg[6] = (_e23 * _e25).x;
let _e35 = dummy[1].y;
wg[5] = _e35;
let _e43 = float_vecs[0].w;
wg[4] = _e43;
let _e47 = alignment.v1_;
wg[3] = _e47;
let _e52 = alignment.v3_.x;
wg[2] = _e52;
let _e49 = alignment.v1_;
wg[3] = _e49;
let _e56 = alignment.v3_.x;
wg[2] = _e56;
alignment.v1_ = 4.0;
wg[1] = f32(arrayLength((&dummy)));
atomicStore((&at_1), 2u);
Foo = 1.0;
at = true;
return;
}

View File

@ -40,8 +40,9 @@ fn compute(@builtin(global_invocation_id) global_id: vec3<u32>, @builtin(local_i
@vertex
fn vertex_two_structs(in1_: Input1_, in2_: Input2_) -> @builtin(position) @invariant vec4<f32> {
var index: u32 = 2u;
var index: u32;
let _e9: u32 = index;
return vec4<f32>(f32(in1_.index), f32(in2_.index), f32(_e9), 0.0);
index = 2u;
let _e8: u32 = index;
return vec4<f32>(f32(in1_.index), f32(in2_.index), f32(_e8), 0.0);
}

View File

@ -20,17 +20,20 @@ fn loopLexicalScope(a_2: bool) {
}
fn forLexicalScope(a_3: f32) {
var a_4: i32 = 0;
var a_4: i32;
a_4 = 0;
loop {
let _e4 = a_4;
if (_e4 < 1) {
} else {
break;
}
{
}
continuing {
let _e7 = a_4;
a_4 = (_e7 + 1);
let _e8 = a_4;
a_4 = (_e8 + 1);
}
}
let test_4 = (false == true);
@ -42,6 +45,8 @@ fn whileLexicalScope(a_5: i32) {
} else {
break;
}
{
}
}
let test_5 = (a_5 == 1);
}

View File

@ -0,0 +1,26 @@
struct S {
x: i32,
}
const Value: i32 = 1;
@group(0) @binding(0)
var Texture: texture_2d<f32>;
@group(0) @binding(1)
var Sampler: sampler;
fn returns() -> S {
return S(Value);
}
fn statement() {
return;
}
fn call() {
statement();
let _e0 = returns();
let vf = f32(Value);
let s = textureSample(Texture, Sampler, vec2<f32>(vf));
}

View File

@ -3,10 +3,10 @@ struct Foo {
b: i32,
}
let v_f32_one: vec4<f32> = vec4<f32>(1.0, 1.0, 1.0, 1.0);
let v_f32_zero: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
let v_f32_half: vec4<f32> = vec4<f32>(0.5, 0.5, 0.5, 0.5);
let v_i32_one: vec4<i32> = vec4<i32>(1, 1, 1, 1);
const v_f32_one: vec4<f32> = vec4<f32>(1.0, 1.0, 1.0, 1.0);
const v_f32_zero: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
const v_f32_half: vec4<f32> = vec4<f32>(0.5, 0.5, 0.5, 0.5);
const v_i32_one: vec4<i32> = vec4<i32>(1, 1, 1, 1);
fn builtins() -> vec4<f32> {
let s1_ = select(0, 1, true);
let s2_ = select(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), true);
@ -29,14 +29,14 @@ fn splat_assignment() -> vec2<f32> {
var a: vec2<f32>;
a = vec2<f32>(2.0);
let _e7 = a;
a = (_e7 + vec2<f32>(1.0));
let _e11 = a;
a = (_e11 - vec2<f32>(3.0));
let _e4 = a;
a = (_e4 + vec2<f32>(1.0));
let _e8 = a;
a = (_e8 - vec2<f32>(3.0));
let _e12 = a;
a = (_e12 / vec2<f32>(4.0));
let _e15 = a;
a = (_e15 / vec2<f32>(4.0));
let _e19 = a;
return _e19;
return _e15;
}
fn bool_cast(x: vec3<f32>) -> vec3<f32> {
@ -61,8 +61,8 @@ fn constructors() -> f32 {
_ = mat2x3<f32>(mat2x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
_ = bitcast<vec2<u32>>(vec2<u32>(0u, 0u));
_ = mat2x3<f32>(mat2x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
let _e75 = foo.a.x;
return _e75;
let _e71 = foo.a.x;
return _e71;
}
fn logical() {
@ -215,39 +215,41 @@ fn comparison() {
}
fn assignment() {
var a_1: i32 = 1;
var vec0_: vec3<i32> = vec3<i32>(0, 0, 0);
var a_1: i32;
var vec0_: vec3<i32>;
a_1 = 1;
let _e3 = a_1;
a_1 = (_e3 + 1);
let _e6 = a_1;
a_1 = (_e6 + 1);
a_1 = (_e6 - 1);
let _e8 = a_1;
let _e9 = a_1;
a_1 = (_e9 - 1);
a_1 = (_e9 * _e8);
let _e11 = a_1;
let _e12 = a_1;
let _e13 = a_1;
a_1 = (_e12 * _e13);
a_1 = (_e12 / _e11);
let _e15 = a_1;
let _e16 = a_1;
a_1 = (_e15 / _e16);
a_1 = (_e15 % 1);
let _e18 = a_1;
a_1 = (_e18 % 1);
a_1 = (_e18 & 0);
let _e21 = a_1;
a_1 = (_e21 & 0);
a_1 = (_e21 | 0);
let _e24 = a_1;
a_1 = (_e24 | 0);
a_1 = (_e24 ^ 0);
let _e27 = a_1;
a_1 = (_e27 ^ 0);
a_1 = (_e27 << 2u);
let _e30 = a_1;
a_1 = (_e30 << 2u);
let _e33 = a_1;
a_1 = (_e33 >> 1u);
let _e36 = a_1;
a_1 = (_e36 + 1);
let _e39 = a_1;
a_1 = (_e39 - 1);
let _e46 = vec0_.y;
vec0_.y = (_e46 + 1);
let _e51 = vec0_.y;
vec0_.y = (_e51 - 1);
a_1 = (_e30 >> 1u);
let _e32 = a_1;
a_1 = (_e32 + 1);
let _e35 = a_1;
a_1 = (_e35 - 1);
vec0_ = vec3<i32>(0, 0, 0);
let _e42 = vec0_.y;
vec0_.y = (_e42 + 1);
let _e47 = vec0_.y;
vec0_.y = (_e47 - 1);
return;
}
@ -263,10 +265,10 @@ fn negation_avoids_prefix_decrement() {
@compute @workgroup_size(1, 1, 1)
fn main() {
let _e4 = builtins();
let _e5 = splat();
let _e7 = bool_cast(vec4<f32>(1.0, 1.0, 1.0, 1.0).xyz);
let _e8 = constructors();
let _e0 = builtins();
let _e1 = splat();
let _e4 = bool_cast(vec4<f32>(1.0, 1.0, 1.0, 1.0).xyz);
let _e5 = constructors();
logical();
arithmetic();
bit();

View File

@ -26,8 +26,8 @@ var<uniform> input3_: Test3_;
@vertex
fn vertex() -> @builtin(position) vec4<f32> {
let _e6 = input1_.b;
let _e9 = input2_.b;
let _e4 = input1_.b;
let _e8 = input2_.b;
let _e12 = input3_.b;
return (((vec4<f32>(1.0) * _e6) * _e9) * _e12);
return (((vec4<f32>(1.0) * _e4) * _e8) * _e12);
}

View File

@ -3,7 +3,7 @@ struct VertexOutput {
@builtin(position) position: vec4<f32>,
}
let c_scale: f32 = 1.2000000476837158;
const c_scale: f32 = 1.2000000476837158;
@group(0) @binding(0)
var u_texture: texture_2d<f32>;

View File

@ -20,8 +20,8 @@ struct Light {
color: vec4<f32>,
}
let c_ambient: vec3<f32> = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
let c_max_lights: u32 = 10u;
const c_ambient: vec3<f32> = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
const c_max_lights: u32 = 10u;
@group(0) @binding(0)
var<uniform> u_globals: Globals;
@ -43,8 +43,8 @@ fn fetch_shadow(light_id: u32, homogeneous_coords: vec4<f32>) -> f32 {
let flip_correction = vec2<f32>(0.5, -0.5);
let proj_correction = (1.0 / homogeneous_coords.w);
let light_local = (((homogeneous_coords.xy * flip_correction) * proj_correction) + vec2<f32>(0.5, 0.5));
let _e28 = textureSampleCompareLevel(t_shadow, sampler_shadow, light_local, i32(light_id), (homogeneous_coords.z * proj_correction));
return _e28;
let _e24 = textureSampleCompareLevel(t_shadow, sampler_shadow, light_local, i32(light_id), (homogeneous_coords.z * proj_correction));
return _e24;
}
@vertex
@ -56,70 +56,78 @@ fn vs_main(@location(0) position: vec4<i32>, @location(1) normal: vec4<i32>) ->
let world_pos = (_e7 * vec4<f32>(position));
out.world_normal = (mat3x3<f32>(w[0].xyz, w[1].xyz, w[2].xyz) * vec3<f32>(normal.xyz));
out.world_position = world_pos;
let _e25 = u_globals.view_proj;
out.proj_position = (_e25 * world_pos);
let _e27 = out;
return _e27;
let _e26 = u_globals.view_proj;
out.proj_position = (_e26 * world_pos);
let _e28 = out;
return _e28;
}
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
var color: vec3<f32> = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
var i: u32 = 0u;
var color: vec3<f32>;
var i: u32;
let normal_1 = normalize(in.world_normal);
color = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i = 0u;
loop {
let _e14 = i;
let _e17 = u_globals.num_lights.x;
if (_e14 < min(_e17, c_max_lights)) {
let _e7 = i;
let _e11 = u_globals.num_lights.x;
if (_e7 < min(_e11, c_max_lights)) {
} else {
break;
}
let _e23 = i;
let light = s_lights[_e23];
let _e26 = i;
let _e30 = fetch_shadow(_e26, (light.proj * in.world_position));
let light_dir = normalize((light.pos.xyz - in.world_position.xyz));
let diffuse = max(0.0, dot(normal_1, light_dir));
let _e40 = color;
color = (_e40 + ((_e30 * diffuse) * light.color.xyz));
{
let _e16 = i;
let light = s_lights[_e16];
let _e19 = i;
let _e23 = fetch_shadow(_e19, (light.proj * in.world_position));
let light_dir = normalize((light.pos.xyz - in.world_position.xyz));
let diffuse = max(0.0, dot(normal_1, light_dir));
let _e37 = color;
color = (_e37 + ((_e23 * diffuse) * light.color.xyz));
}
continuing {
let _e20 = i;
i = (_e20 + 1u);
let _e39 = i;
i = (_e39 + 1u);
}
}
let _e46 = color;
let _e50 = u_entity.color;
return (vec4<f32>(_e46, 1.0) * _e50);
let _e42 = color;
let _e47 = u_entity.color;
return (vec4<f32>(_e42, 1.0) * _e47);
}
@fragment
fn fs_main_without_storage(in_1: VertexOutput) -> @location(0) vec4<f32> {
var color_1: vec3<f32> = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
var i_1: u32 = 0u;
var color_1: vec3<f32>;
var i_1: u32;
let normal_2 = normalize(in_1.world_normal);
color_1 = vec3<f32>(0.05000000074505806, 0.05000000074505806, 0.05000000074505806);
i_1 = 0u;
loop {
let _e14 = i_1;
let _e17 = u_globals.num_lights.x;
if (_e14 < min(_e17, c_max_lights)) {
let _e7 = i_1;
let _e11 = u_globals.num_lights.x;
if (_e7 < min(_e11, c_max_lights)) {
} else {
break;
}
let _e23 = i_1;
let light_1 = u_lights[_e23];
let _e26 = i_1;
let _e30 = fetch_shadow(_e26, (light_1.proj * in_1.world_position));
let light_dir_1 = normalize((light_1.pos.xyz - in_1.world_position.xyz));
let diffuse_1 = max(0.0, dot(normal_2, light_dir_1));
let _e40 = color_1;
color_1 = (_e40 + ((_e30 * diffuse_1) * light_1.color.xyz));
{
let _e16 = i_1;
let light_1 = u_lights[_e16];
let _e19 = i_1;
let _e23 = fetch_shadow(_e19, (light_1.proj * in_1.world_position));
let light_dir_1 = normalize((light_1.pos.xyz - in_1.world_position.xyz));
let diffuse_1 = max(0.0, dot(normal_2, light_dir_1));
let _e37 = color_1;
color_1 = (_e37 + ((_e23 * diffuse_1) * light_1.color.xyz));
}
continuing {
let _e20 = i_1;
i_1 = (_e20 + 1u);
let _e39 = i_1;
i_1 = (_e39 + 1u);
}
}
let _e46 = color_1;
let _e50 = u_entity.color;
return (vec4<f32>(_e46, 1.0) * _e50);
let _e42 = color_1;
let _e47 = u_entity.color;
return (vec4<f32>(_e42, 1.0) * _e47);
}

View File

@ -22,20 +22,20 @@ fn vs_main(@builtin(vertex_index) vertex_index: u32) -> VertexOutput {
tmp1_ = (i32(vertex_index) / 2);
tmp2_ = (i32(vertex_index) & 1);
let _e10 = tmp1_;
let _e16 = tmp2_;
let pos = vec4<f32>(((f32(_e10) * 4.0) - 1.0), ((f32(_e16) * 4.0) - 1.0), 0.0, 1.0);
let _e9 = tmp1_;
let _e15 = tmp2_;
let pos = vec4<f32>(((f32(_e9) * 4.0) - 1.0), ((f32(_e15) * 4.0) - 1.0), 0.0, 1.0);
let _e27 = r_data.view[0];
let _e31 = r_data.view[1];
let _e35 = r_data.view[2];
let inv_model_view = transpose(mat3x3<f32>(_e27.xyz, _e31.xyz, _e35.xyz));
let _e40 = r_data.proj_inv;
let unprojected = (_e40 * pos);
let _e32 = r_data.view[1];
let _e37 = r_data.view[2];
let inv_model_view = transpose(mat3x3<f32>(_e27.xyz, _e32.xyz, _e37.xyz));
let _e43 = r_data.proj_inv;
let unprojected = (_e43 * pos);
return VertexOutput(pos, (inv_model_view * unprojected.xyz));
}
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
let _e5 = textureSample(r_texture, r_sampler, in.uv);
return _e5;
let _e4 = textureSample(r_texture, r_sampler, in.uv);
return _e4;
}

Some files were not shown because too many files have changed in this diff Show More