Skip to content

Commit

Permalink
a
Browse files Browse the repository at this point in the history
  • Loading branch information
fornwall committed Sep 5, 2023
1 parent c69e5c1 commit e1bf6df
Show file tree
Hide file tree
Showing 43 changed files with 90 additions and 477 deletions.
21 changes: 6 additions & 15 deletions src/back/msl/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1720,7 +1720,7 @@ impl<W: Write> Writer<W> {
kind: crate::ScalarKind::Sint,
..
}
| crate::TypeInner::Vector {
| &crate::TypeInner::Vector {
kind: crate::ScalarKind::Sint,
..
} => NAGA_ISIGN_FUNCTION,
Expand Down Expand Up @@ -4118,21 +4118,12 @@ impl<W: Write> Writer<W> {

fn write_polyfills(&mut self) -> Result<(), Error> {
writeln!(self.out)?;
for size in 1..5 {
let tmp;
let type_name = if size == 1 {
"int"
} else {
tmp = format!("int{size}");
&tmp
};
writeln!(
self.out,
"{type_name} {NAGA_ISIGN_FUNCTION}({type_name} arg) {{
return {NAMESPACE}::select({NAMESPACE}::select({type_name}(-1), {type_name}(1), (arg > 0)), 0, (arg == 0));
writeln!(
self.out,
"template <typename T> inline T {NAGA_ISIGN_FUNCTION}(T arg) {{
return {NAMESPACE}::select({NAMESPACE}::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}}"
)?;
}
)?;
Ok(())
}

Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/access.msl
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,8 @@ struct type_26 {
metal::float4 inner[2];
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

void test_matrix_within_struct_accesses(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/array-in-ctor.msl
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,8 @@ struct Ah {
type_1 inner;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

kernel void cs_main(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/array-in-function-return-type.msl
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,8 @@ struct type_1 {
float inner[2];
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

type_1 ret_array(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/atomicOps.msl
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,8 @@ struct Struct {
type_2 atomic_arr;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

struct cs_mainInput {
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/binding-arrays.msl
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,8 @@ struct FragmentIn {
uint index;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

struct main_Input {
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bitcast.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

kernel void main_(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bits.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

kernel void main_(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/boids.msl
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,8 @@ struct Particles {
};
constant uint NUM_PARTICLES = 1500u;

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

struct main_Input {
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bounds-check-image-restrict.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

metal::float4 test_textureLoad_1d(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bounds-check-image-rzsw.msl
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,8 @@ struct DefaultConstructible {
};


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

metal::float4 test_textureLoad_1d(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bounds-check-restrict.msl
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,8 @@ struct Globals {
type_4 d;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

float index_array(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bounds-check-zero-atomic.msl
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,8 @@ struct Globals {
type_2 c;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

uint fetch_add_atomic(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/bounds-check-zero.msl
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,8 @@ struct Globals {
type_4 d;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

float index_array(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/break-if.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

void breakIfEmpty(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/collatz.msl
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,8 @@ struct PrimeIndices {
type_1 data;
};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

uint collatz_iterations(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/constructors.msl
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,8 @@ constant type_10 cz6_ = type_10 {};
constant Foo cz7_ = Foo {};
constant type_11 cp3_ = type_11 {0, 1, 2, 3};

int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

kernel void main_(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/control-flow.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

void switch_default_break(
Expand Down
13 changes: 2 additions & 11 deletions tests/out/msl/do-while.msl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
using metal::uint;


int naga_isign(int arg) {
return metal::select(metal::select(int(-1), int(1), (arg > 0)), 0, (arg == 0));
}
int2 naga_isign(int2 arg) {
return metal::select(metal::select(int2(-1), int2(1), (arg > 0)), 0, (arg == 0));
}
int3 naga_isign(int3 arg) {
return metal::select(metal::select(int3(-1), int3(1), (arg > 0)), 0, (arg == 0));
}
int4 naga_isign(int4 arg) {
return metal::select(metal::select(int4(-1), int4(1), (arg > 0)), 0, (arg == 0));
template <typename T> inline T naga_isign(T arg) {
return metal::select(metal::select(T(-1), T(1), (arg > 0)), 0, (arg == 0));
}

void fb1_(
Expand Down
Loading

0 comments on commit e1bf6df

Please sign in to comment.