tint/writers: Polyfill integer clamp()

...to `min(max(e, low), high)` as defined by the WGSL spec.

Fixed: tint:1479
Fixed: tint:1539
Change-Id: I39406d5256a155a781e44bd9d6081ce7a9bf5a68
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/107640
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Ben Clayton <bclayton@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
This commit is contained in:
Ben Clayton 2022-10-31 17:54:49 +00:00 committed by Dawn LUCI CQ
parent be83128031
commit 6dbb463f1d
42 changed files with 822 additions and 367 deletions

View File

@ -137,6 +137,27 @@ struct BuiltinPolyfill::State {
return name; return name;
} }
/// Builds the polyfill function for the `clamp` builtin when called with integer arguments
/// (scalar or vector)
/// @param ty the parameter and return type for the function
/// @return the polyfill function name
Symbol clampInteger(const sem::Type* ty) {
auto name = b.Symbols().New("tint_clamp");
b.Func(name,
utils::Vector{
b.Param("e", T(ty)),
b.Param("low", T(ty)),
b.Param("high", T(ty)),
},
T(ty),
utils::Vector{
// return min(max(e, low), high);
b.Return(b.Call("min", b.Call("max", "e", "low"), "high")),
});
return name;
}
/// Builds the polyfill function for the `countLeadingZeros` builtin /// Builds the polyfill function for the `countLeadingZeros` builtin
/// @param ty the parameter and return type for the function /// @param ty the parameter and return type for the function
/// @return the polyfill function name /// @return the polyfill function name
@ -588,6 +609,12 @@ bool BuiltinPolyfill::ShouldRun(const Program* program, const DataMap& data) con
return true; return true;
} }
break; break;
case sem::BuiltinType::kClamp:
if (builtins.clamp_int) {
auto& sig = builtin->Signature();
return sig.parameters[0]->Type()->is_integer_scalar_or_vector();
}
break;
case sem::BuiltinType::kCountLeadingZeros: case sem::BuiltinType::kCountLeadingZeros:
if (builtins.count_leading_zeros) { if (builtins.count_leading_zeros) {
return true; return true;
@ -679,6 +706,16 @@ void BuiltinPolyfill::Run(CloneContext& ctx, const DataMap& data, DataMap&) cons
polyfills, builtin, [&] { return s.atanh(builtin->ReturnType()); }); polyfills, builtin, [&] { return s.atanh(builtin->ReturnType()); });
} }
break; break;
case sem::BuiltinType::kClamp:
if (builtins.clamp_int) {
auto& sig = builtin->Signature();
if (sig.parameters[0]->Type()->is_integer_scalar_or_vector()) {
polyfill = utils::GetOrCreate(polyfills, builtin, [&] {
return s.clampInteger(builtin->ReturnType());
});
}
}
break;
case sem::BuiltinType::kCountLeadingZeros: case sem::BuiltinType::kCountLeadingZeros:
if (builtins.count_leading_zeros) { if (builtins.count_leading_zeros) {
polyfill = utils::GetOrCreate(polyfills, builtin, [&] { polyfill = utils::GetOrCreate(polyfills, builtin, [&] {

View File

@ -47,6 +47,8 @@ class BuiltinPolyfill final : public Castable<BuiltinPolyfill, Transform> {
bool asinh = false; bool asinh = false;
/// What level should `atanh` be polyfilled? /// What level should `atanh` be polyfilled?
Level atanh = Level::kNone; Level atanh = Level::kNone;
/// Should `clamp()` be polyfilled for integer values (scalar or vector)?
bool clamp_int = false;
/// Should `countLeadingZeros()` be polyfilled? /// Should `countLeadingZeros()` be polyfilled?
bool count_leading_zeros = false; bool count_leading_zeros = false;
/// Should `countTrailingZeros()` be polyfilled? /// Should `countTrailingZeros()` be polyfilled?

View File

@ -398,6 +398,173 @@ fn f() {
EXPECT_EQ(expect, str(got)); EXPECT_EQ(expect, str(got));
} }
////////////////////////////////////////////////////////////////////////////////
// clampInteger
////////////////////////////////////////////////////////////////////////////////
DataMap polyfillClampInteger() {
BuiltinPolyfill::Builtins builtins;
builtins.clamp_int = true;
DataMap data;
data.Add<BuiltinPolyfill::Config>(builtins);
return data;
}
TEST_F(BuiltinPolyfillTest, ShouldRunClampInteger_i32) {
auto* src = R"(
fn f() {
let v = 1i;
clamp(v, 2i, 3i);
}
)";
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src));
EXPECT_TRUE(ShouldRun<BuiltinPolyfill>(src, polyfillClampInteger()));
}
TEST_F(BuiltinPolyfillTest, ShouldRunClampInteger_u32) {
auto* src = R"(
fn f() {
let v = 1u;
clamp(v, 2u, 3u);
}
)";
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src));
EXPECT_TRUE(ShouldRun<BuiltinPolyfill>(src, polyfillClampInteger()));
}
TEST_F(BuiltinPolyfillTest, ShouldRunClampInteger_f32) {
auto* src = R"(
fn f() {
let v = 1f;
clamp(v, 2f, 3f);
}
)";
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src));
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src, polyfillClampInteger()));
}
TEST_F(BuiltinPolyfillTest, ShouldRunClampInteger_f16) {
auto* src = R"(
enable f16;
fn f() {
let v = 1h;
clamp(v, 2h, 3h);
}
)";
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src));
EXPECT_FALSE(ShouldRun<BuiltinPolyfill>(src, polyfillClampInteger()));
}
TEST_F(BuiltinPolyfillTest, ClampInteger_ConstantExpression) {
auto* src = R"(
fn f() {
let r : i32 = clamp(1i, 2i, 3i);
}
)";
auto* expect = src;
auto got = Run<BuiltinPolyfill>(src, polyfillClampInteger());
EXPECT_EQ(expect, str(got));
}
TEST_F(BuiltinPolyfillTest, ClampInteger_i32) {
auto* src = R"(
fn f() {
let v = 1i;
let r : i32 = clamp(v, 2i, 3i);
}
)";
auto* expect = R"(
fn tint_clamp(e : i32, low : i32, high : i32) -> i32 {
return min(max(e, low), high);
}
fn f() {
let v = 1i;
let r : i32 = tint_clamp(v, 2i, 3i);
}
)";
auto got = Run<BuiltinPolyfill>(src, polyfillClampInteger());
EXPECT_EQ(expect, str(got));
}
TEST_F(BuiltinPolyfillTest, ClampInteger_vec3_i32) {
auto* src = R"(
fn f() {
let v = 1i;
let r : vec3<i32> = clamp(vec3(v), vec3(2i), vec3(3i));
}
)";
auto* expect =
R"(
fn tint_clamp(e : vec3<i32>, low : vec3<i32>, high : vec3<i32>) -> vec3<i32> {
return min(max(e, low), high);
}
fn f() {
let v = 1i;
let r : vec3<i32> = tint_clamp(vec3(v), vec3(2i), vec3(3i));
}
)";
auto got = Run<BuiltinPolyfill>(src, polyfillClampInteger());
EXPECT_EQ(expect, str(got));
}
TEST_F(BuiltinPolyfillTest, ClampInteger_u32) {
auto* src = R"(
fn f() {
let r : u32 = clamp(1u, 2u, 3u);
}
)";
auto* expect = R"(
fn f() {
let r : u32 = clamp(1u, 2u, 3u);
}
)";
auto got = Run<BuiltinPolyfill>(src, polyfillClampInteger());
EXPECT_EQ(expect, str(got));
}
TEST_F(BuiltinPolyfillTest, ClampInteger_vec3_u32) {
auto* src = R"(
fn f() {
let v = 1u;
let r : vec3<u32> = clamp(vec3(v), vec3(2u), vec3(3u));
}
)";
auto* expect =
R"(
fn tint_clamp(e : vec3<u32>, low : vec3<u32>, high : vec3<u32>) -> vec3<u32> {
return min(max(e, low), high);
}
fn f() {
let v = 1u;
let r : vec3<u32> = tint_clamp(vec3(v), vec3(2u), vec3(3u));
}
)";
auto got = Run<BuiltinPolyfill>(src, polyfillClampInteger());
EXPECT_EQ(expect, str(got));
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// countLeadingZeros // countLeadingZeros
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -162,6 +162,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
polyfills.acosh = transform::BuiltinPolyfill::Level::kFull; polyfills.acosh = transform::BuiltinPolyfill::Level::kFull;
polyfills.asinh = true; polyfills.asinh = true;
polyfills.atanh = transform::BuiltinPolyfill::Level::kFull; polyfills.atanh = transform::BuiltinPolyfill::Level::kFull;
polyfills.clamp_int = true;
// TODO(crbug.com/tint/1449): Some of these can map to HLSL's `firstbitlow` // TODO(crbug.com/tint/1449): Some of these can map to HLSL's `firstbitlow`
// and `firstbithigh`. // and `firstbithigh`.
polyfills.count_leading_zeros = true; polyfills.count_leading_zeros = true;

View File

@ -171,6 +171,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
transform::BuiltinPolyfill::Builtins polyfills; transform::BuiltinPolyfill::Builtins polyfills;
polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck; polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck;
polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck; polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck;
polyfills.clamp_int = true;
polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters; polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters;
polyfills.first_leading_bit = true; polyfills.first_leading_bit = true;
polyfills.first_trailing_bit = true; polyfills.first_trailing_bit = true;

View File

@ -52,6 +52,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
transform::BuiltinPolyfill::Builtins polyfills; transform::BuiltinPolyfill::Builtins polyfills;
polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck; polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck;
polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck; polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck;
polyfills.clamp_int = true;
polyfills.count_leading_zeros = true; polyfills.count_leading_zeros = true;
polyfills.count_trailing_zeros = true; polyfills.count_trailing_zeros = true;
polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters; polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters;

View File

@ -46,14 +46,18 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
return float4(color, 1.0f); return float4(color, 1.0f);
} }
float3x4 tint_symbol_2(uint4 buffer[11], uint offset) { int2 tint_clamp(int2 e, int2 low, int2 high) {
return min(max(e, low), high);
}
float3x4 tint_symbol_6(uint4 buffer[11], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4; const uint scalar_offset = ((offset + 0u)) / 4;
const uint scalar_offset_1 = ((offset + 16u)) / 4; const uint scalar_offset_1 = ((offset + 16u)) / 4;
const uint scalar_offset_2 = ((offset + 32u)) / 4; const uint scalar_offset_2 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4])); return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]));
} }
GammaTransferParams tint_symbol_4(uint4 buffer[11], uint offset) { GammaTransferParams tint_symbol_8(uint4 buffer[11], uint offset) {
const uint scalar_offset_3 = ((offset + 0u)) / 4; const uint scalar_offset_3 = ((offset + 0u)) / 4;
const uint scalar_offset_4 = ((offset + 4u)) / 4; const uint scalar_offset_4 = ((offset + 4u)) / 4;
const uint scalar_offset_5 = ((offset + 8u)) / 4; const uint scalar_offset_5 = ((offset + 8u)) / 4;
@ -62,37 +66,41 @@ GammaTransferParams tint_symbol_4(uint4 buffer[11], uint offset) {
const uint scalar_offset_8 = ((offset + 20u)) / 4; const uint scalar_offset_8 = ((offset + 20u)) / 4;
const uint scalar_offset_9 = ((offset + 24u)) / 4; const uint scalar_offset_9 = ((offset + 24u)) / 4;
const uint scalar_offset_10 = ((offset + 28u)) / 4; const uint scalar_offset_10 = ((offset + 28u)) / 4;
const GammaTransferParams tint_symbol_8 = {asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4]), asfloat(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4]), asfloat(buffer[scalar_offset_6 / 4][scalar_offset_6 % 4]), asfloat(buffer[scalar_offset_7 / 4][scalar_offset_7 % 4]), asfloat(buffer[scalar_offset_8 / 4][scalar_offset_8 % 4]), asfloat(buffer[scalar_offset_9 / 4][scalar_offset_9 % 4]), buffer[scalar_offset_10 / 4][scalar_offset_10 % 4]}; const GammaTransferParams tint_symbol_12 = {asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4]), asfloat(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4]), asfloat(buffer[scalar_offset_6 / 4][scalar_offset_6 % 4]), asfloat(buffer[scalar_offset_7 / 4][scalar_offset_7 % 4]), asfloat(buffer[scalar_offset_8 / 4][scalar_offset_8 % 4]), asfloat(buffer[scalar_offset_9 / 4][scalar_offset_9 % 4]), buffer[scalar_offset_10 / 4][scalar_offset_10 % 4]};
return tint_symbol_8; return tint_symbol_12;
} }
float3x3 tint_symbol_6(uint4 buffer[11], uint offset) { float3x3 tint_symbol_10(uint4 buffer[11], uint offset) {
const uint scalar_offset_11 = ((offset + 0u)) / 4; const uint scalar_offset_11 = ((offset + 0u)) / 4;
const uint scalar_offset_12 = ((offset + 16u)) / 4; const uint scalar_offset_12 = ((offset + 16u)) / 4;
const uint scalar_offset_13 = ((offset + 32u)) / 4; const uint scalar_offset_13 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_11 / 4].xyz), asfloat(buffer[scalar_offset_12 / 4].xyz), asfloat(buffer[scalar_offset_13 / 4].xyz)); return float3x3(asfloat(buffer[scalar_offset_11 / 4].xyz), asfloat(buffer[scalar_offset_12 / 4].xyz), asfloat(buffer[scalar_offset_13 / 4].xyz));
} }
ExternalTextureParams tint_symbol(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_4(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const uint scalar_offset_15 = ((offset + 4u)) / 4; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_9 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_2(buffer, (offset + 16u)), tint_symbol_4(buffer, (offset + 64u)), tint_symbol_4(buffer, (offset + 96u)), tint_symbol_6(buffer, (offset + 128u))}; const ExternalTextureParams tint_symbol_13 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_6(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 64u)), tint_symbol_8(buffer, (offset + 96u)), tint_symbol_10(buffer, (offset + 128u))};
return tint_symbol_9; return tint_symbol_13;
} }
[numthreads(1, 1, 1)] [numthreads(1, 1, 1)]
void main() { void main() {
int2 tint_tmp; int2 tint_tmp;
t.GetDimensions(tint_tmp.x, tint_tmp.y); t.GetDimensions(tint_tmp.x, tint_tmp.y);
float4 red = textureLoadExternal(t, ext_tex_plane_1, clamp((10).xx, (0).xx, int2((uint2(tint_tmp) - (1u).xx))), tint_symbol(ext_tex_params, 0u)); const int2 tint_symbol = tint_clamp((10).xx, (0).xx, int2((uint2(tint_tmp) - (1u).xx)));
float4 red = textureLoadExternal(t, ext_tex_plane_1, tint_symbol, tint_symbol_4(ext_tex_params, 0u));
int2 tint_tmp_1; int2 tint_tmp_1;
outImage.GetDimensions(tint_tmp_1.x, tint_tmp_1.y); outImage.GetDimensions(tint_tmp_1.x, tint_tmp_1.y);
outImage[clamp((0).xx, (0).xx, int2((uint2(tint_tmp_1) - (1u).xx)))] = red; const int2 tint_symbol_1 = tint_clamp((0).xx, (0).xx, int2((uint2(tint_tmp_1) - (1u).xx)));
outImage[tint_symbol_1] = red;
int2 tint_tmp_2; int2 tint_tmp_2;
t.GetDimensions(tint_tmp_2.x, tint_tmp_2.y); t.GetDimensions(tint_tmp_2.x, tint_tmp_2.y);
float4 green = textureLoadExternal(t, ext_tex_plane_1, clamp(int2(70, 118), (0).xx, int2((uint2(tint_tmp_2) - (1u).xx))), tint_symbol(ext_tex_params, 0u)); const int2 tint_symbol_2 = tint_clamp(int2(70, 118), (0).xx, int2((uint2(tint_tmp_2) - (1u).xx)));
float4 green = textureLoadExternal(t, ext_tex_plane_1, tint_symbol_2, tint_symbol_4(ext_tex_params, 0u));
int2 tint_tmp_3; int2 tint_tmp_3;
outImage.GetDimensions(tint_tmp_3.x, tint_tmp_3.y); outImage.GetDimensions(tint_tmp_3.x, tint_tmp_3.y);
outImage[clamp(int2(1, 0), (0).xx, int2((uint2(tint_tmp_3) - (1u).xx)))] = green; const int2 tint_symbol_3 = tint_clamp(int2(1, 0), (0).xx, int2((uint2(tint_tmp_3) - (1u).xx)));
outImage[tint_symbol_3] = green;
return; return;
} }

View File

@ -46,14 +46,18 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
return float4(color, 1.0f); return float4(color, 1.0f);
} }
float3x4 tint_symbol_2(uint4 buffer[11], uint offset) { int2 tint_clamp(int2 e, int2 low, int2 high) {
return min(max(e, low), high);
}
float3x4 tint_symbol_6(uint4 buffer[11], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4; const uint scalar_offset = ((offset + 0u)) / 4;
const uint scalar_offset_1 = ((offset + 16u)) / 4; const uint scalar_offset_1 = ((offset + 16u)) / 4;
const uint scalar_offset_2 = ((offset + 32u)) / 4; const uint scalar_offset_2 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4])); return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]));
} }
GammaTransferParams tint_symbol_4(uint4 buffer[11], uint offset) { GammaTransferParams tint_symbol_8(uint4 buffer[11], uint offset) {
const uint scalar_offset_3 = ((offset + 0u)) / 4; const uint scalar_offset_3 = ((offset + 0u)) / 4;
const uint scalar_offset_4 = ((offset + 4u)) / 4; const uint scalar_offset_4 = ((offset + 4u)) / 4;
const uint scalar_offset_5 = ((offset + 8u)) / 4; const uint scalar_offset_5 = ((offset + 8u)) / 4;
@ -62,37 +66,41 @@ GammaTransferParams tint_symbol_4(uint4 buffer[11], uint offset) {
const uint scalar_offset_8 = ((offset + 20u)) / 4; const uint scalar_offset_8 = ((offset + 20u)) / 4;
const uint scalar_offset_9 = ((offset + 24u)) / 4; const uint scalar_offset_9 = ((offset + 24u)) / 4;
const uint scalar_offset_10 = ((offset + 28u)) / 4; const uint scalar_offset_10 = ((offset + 28u)) / 4;
const GammaTransferParams tint_symbol_8 = {asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4]), asfloat(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4]), asfloat(buffer[scalar_offset_6 / 4][scalar_offset_6 % 4]), asfloat(buffer[scalar_offset_7 / 4][scalar_offset_7 % 4]), asfloat(buffer[scalar_offset_8 / 4][scalar_offset_8 % 4]), asfloat(buffer[scalar_offset_9 / 4][scalar_offset_9 % 4]), buffer[scalar_offset_10 / 4][scalar_offset_10 % 4]}; const GammaTransferParams tint_symbol_12 = {asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4]), asfloat(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4]), asfloat(buffer[scalar_offset_6 / 4][scalar_offset_6 % 4]), asfloat(buffer[scalar_offset_7 / 4][scalar_offset_7 % 4]), asfloat(buffer[scalar_offset_8 / 4][scalar_offset_8 % 4]), asfloat(buffer[scalar_offset_9 / 4][scalar_offset_9 % 4]), buffer[scalar_offset_10 / 4][scalar_offset_10 % 4]};
return tint_symbol_8; return tint_symbol_12;
} }
float3x3 tint_symbol_6(uint4 buffer[11], uint offset) { float3x3 tint_symbol_10(uint4 buffer[11], uint offset) {
const uint scalar_offset_11 = ((offset + 0u)) / 4; const uint scalar_offset_11 = ((offset + 0u)) / 4;
const uint scalar_offset_12 = ((offset + 16u)) / 4; const uint scalar_offset_12 = ((offset + 16u)) / 4;
const uint scalar_offset_13 = ((offset + 32u)) / 4; const uint scalar_offset_13 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_11 / 4].xyz), asfloat(buffer[scalar_offset_12 / 4].xyz), asfloat(buffer[scalar_offset_13 / 4].xyz)); return float3x3(asfloat(buffer[scalar_offset_11 / 4].xyz), asfloat(buffer[scalar_offset_12 / 4].xyz), asfloat(buffer[scalar_offset_13 / 4].xyz));
} }
ExternalTextureParams tint_symbol(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_4(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const uint scalar_offset_15 = ((offset + 4u)) / 4; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_9 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_2(buffer, (offset + 16u)), tint_symbol_4(buffer, (offset + 64u)), tint_symbol_4(buffer, (offset + 96u)), tint_symbol_6(buffer, (offset + 128u))}; const ExternalTextureParams tint_symbol_13 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_6(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 64u)), tint_symbol_8(buffer, (offset + 96u)), tint_symbol_10(buffer, (offset + 128u))};
return tint_symbol_9; return tint_symbol_13;
} }
[numthreads(1, 1, 1)] [numthreads(1, 1, 1)]
void main() { void main() {
int2 tint_tmp; int2 tint_tmp;
t.GetDimensions(tint_tmp.x, tint_tmp.y); t.GetDimensions(tint_tmp.x, tint_tmp.y);
float4 red = textureLoadExternal(t, ext_tex_plane_1, clamp((10).xx, (0).xx, int2((uint2(tint_tmp) - (1u).xx))), tint_symbol(ext_tex_params, 0u)); const int2 tint_symbol = tint_clamp((10).xx, (0).xx, int2((uint2(tint_tmp) - (1u).xx)));
float4 red = textureLoadExternal(t, ext_tex_plane_1, tint_symbol, tint_symbol_4(ext_tex_params, 0u));
int2 tint_tmp_1; int2 tint_tmp_1;
outImage.GetDimensions(tint_tmp_1.x, tint_tmp_1.y); outImage.GetDimensions(tint_tmp_1.x, tint_tmp_1.y);
outImage[clamp((0).xx, (0).xx, int2((uint2(tint_tmp_1) - (1u).xx)))] = red; const int2 tint_symbol_1 = tint_clamp((0).xx, (0).xx, int2((uint2(tint_tmp_1) - (1u).xx)));
outImage[tint_symbol_1] = red;
int2 tint_tmp_2; int2 tint_tmp_2;
t.GetDimensions(tint_tmp_2.x, tint_tmp_2.y); t.GetDimensions(tint_tmp_2.x, tint_tmp_2.y);
float4 green = textureLoadExternal(t, ext_tex_plane_1, clamp(int2(70, 118), (0).xx, int2((uint2(tint_tmp_2) - (1u).xx))), tint_symbol(ext_tex_params, 0u)); const int2 tint_symbol_2 = tint_clamp(int2(70, 118), (0).xx, int2((uint2(tint_tmp_2) - (1u).xx)));
float4 green = textureLoadExternal(t, ext_tex_plane_1, tint_symbol_2, tint_symbol_4(ext_tex_params, 0u));
int2 tint_tmp_3; int2 tint_tmp_3;
outImage.GetDimensions(tint_tmp_3.x, tint_tmp_3.y); outImage.GetDimensions(tint_tmp_3.x, tint_tmp_3.y);
outImage[clamp(int2(1, 0), (0).xx, int2((uint2(tint_tmp_3) - (1u).xx)))] = green; const int2 tint_symbol_3 = tint_clamp(int2(1, 0), (0).xx, int2((uint2(tint_tmp_3) - (1u).xx)));
outImage[tint_symbol_3] = green;
return; return;
} }

View File

@ -57,11 +57,19 @@ float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<fl
return float4(color, 1.0f); return float4(color, 1.0f);
} }
kernel void tint_symbol(texture2d<float, access::sample> tint_symbol_1 [[texture(0)]], texture2d<float, access::sample> tint_symbol_2 [[texture(1)]], const constant ExternalTextureParams* tint_symbol_3 [[buffer(0)]], texture2d<float, access::write> tint_symbol_4 [[texture(2)]]) { int2 tint_clamp(int2 e, int2 low, int2 high) {
float4 red = textureLoadExternal(tint_symbol_1, tint_symbol_2, clamp(int2(10), int2(0), int2((uint2(uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height())) - uint2(1u)))), *(tint_symbol_3)); return min(max(e, low), high);
tint_symbol_4.write(red, uint2(clamp(int2(0), int2(0), int2((uint2(uint2(tint_symbol_4.get_width(), tint_symbol_4.get_height())) - uint2(1u)))))); }
float4 green = textureLoadExternal(tint_symbol_1, tint_symbol_2, clamp(int2(70, 118), int2(0), int2((uint2(uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height())) - uint2(1u)))), *(tint_symbol_3));
tint_symbol_4.write(green, uint2(clamp(int2(1, 0), int2(0), int2((uint2(uint2(tint_symbol_4.get_width(), tint_symbol_4.get_height())) - uint2(1u)))))); kernel void tint_symbol(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]], texture2d<float, access::sample> tint_symbol_6 [[texture(1)]], const constant ExternalTextureParams* tint_symbol_7 [[buffer(0)]], texture2d<float, access::write> tint_symbol_8 [[texture(2)]]) {
int2 const tint_symbol_1 = tint_clamp(int2(10), int2(0), int2((uint2(uint2(tint_symbol_5.get_width(), tint_symbol_5.get_height())) - uint2(1u))));
float4 red = textureLoadExternal(tint_symbol_5, tint_symbol_6, tint_symbol_1, *(tint_symbol_7));
int2 const tint_symbol_2 = tint_clamp(int2(0), int2(0), int2((uint2(uint2(tint_symbol_8.get_width(), tint_symbol_8.get_height())) - uint2(1u))));
tint_symbol_8.write(red, uint2(tint_symbol_2));
int2 const tint_symbol_3 = tint_clamp(int2(70, 118), int2(0), int2((uint2(uint2(tint_symbol_5.get_width(), tint_symbol_5.get_height())) - uint2(1u))));
float4 green = textureLoadExternal(tint_symbol_5, tint_symbol_6, tint_symbol_3, *(tint_symbol_7));
int2 const tint_symbol_4 = tint_clamp(int2(1, 0), int2(0), int2((uint2(uint2(tint_symbol_8.get_width(), tint_symbol_8.get_height())) - uint2(1u))));
tint_symbol_8.write(green, uint2(tint_symbol_4));
return; return;
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 169 ; Bound: 177
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
OpCapability ImageQuery OpCapability ImageQuery
@ -40,6 +40,10 @@
OpName %coord "coord" OpName %coord "coord"
OpName %params_0 "params" OpName %params_0 "params"
OpName %color "color" OpName %color "color"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %main "main" OpName %main "main"
OpName %red "red" OpName %red "red"
OpName %green "green" OpName %green "green"
@ -104,23 +108,24 @@
%v2float = OpTypeVector %float 2 %v2float = OpTypeVector %float 2
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%90 = OpConstantNull %uint %90 = OpConstantNull %uint
%108 = OpTypeFunction %v2int %v2int %v2int %v2int
%void = OpTypeVoid %void = OpTypeVoid
%108 = OpTypeFunction %void %116 = OpTypeFunction %void
%int_10 = OpConstant %int 10 %int_10 = OpConstant %int 10
%117 = OpConstantComposite %v2int %int_10 %int_10 %122 = OpConstantComposite %v2int %int_10 %int_10
%118 = OpConstantNull %v2int %123 = OpConstantNull %v2int
%v2uint = OpTypeVector %uint 2 %v2uint = OpTypeVector %uint 2
%int_0 = OpConstant %int 0 %int_0 = OpConstant %int 0
%125 = OpConstantComposite %v2uint %uint_1 %uint_1 %130 = OpConstantComposite %v2uint %uint_1 %uint_1
%uint_0 = OpConstant %uint 0 %uint_0 = OpConstant %uint 0
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%133 = OpConstantNull %v4float %141 = OpConstantNull %v4float
%int_70 = OpConstant %int 70 %int_70 = OpConstant %int 70
%int_118 = OpConstant %int 118 %int_118 = OpConstant %int 118
%149 = OpConstantComposite %v2int %int_70 %int_118 %154 = OpConstantComposite %v2int %int_70 %int_118
%int_1 = OpConstant %int 1 %int_1 = OpConstant %int 1
%162 = OpConstantComposite %v2int %int_1 %76 %168 = OpConstantComposite %v2int %int_1 %76
%gammaCorrection = OpFunction %v3float None %19 %gammaCorrection = OpFunction %v3float None %19
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -212,47 +217,56 @@
%107 = OpCompositeConstruct %v4float %104 %105 %106 %float_1 %107 = OpCompositeConstruct %v4float %104 %105 %106 %float_1
OpReturnValue %107 OpReturnValue %107
OpFunctionEnd OpFunctionEnd
%main = OpFunction %void None %108 %tint_clamp = OpFunction %v2int None %108
%111 = OpLabel %e = OpFunctionParameter %v2int
%red = OpVariable %_ptr_Function_v4float Function %133 %low = OpFunctionParameter %v2int
%green = OpVariable %_ptr_Function_v4float Function %133 %high = OpFunctionParameter %v2int
%113 = OpLoad %3 %t %113 = OpLabel
%114 = OpLoad %3 %ext_tex_plane_1 %115 = OpExtInst %v2int %25 SMax %e %low
%123 = OpLoad %3 %t %114 = OpExtInst %v2int %25 SMin %115 %high
%122 = OpImageQuerySizeLod %v2uint %123 %int_0 OpReturnValue %114
%126 = OpISub %v2uint %122 %125 OpFunctionEnd
%119 = OpBitcast %v2int %126 %main = OpFunction %void None %116
%115 = OpExtInst %v2int %25 SClamp %117 %118 %119 %119 = OpLabel
%129 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0 %red = OpVariable %_ptr_Function_v4float Function %141
%130 = OpLoad %ExternalTextureParams %129 %green = OpVariable %_ptr_Function_v4float Function %141
%112 = OpFunctionCall %v4float %textureLoadExternal %113 %114 %115 %130 %128 = OpLoad %3 %t
OpStore %red %112 %127 = OpImageQuerySizeLod %v2uint %128 %int_0
%135 = OpLoad %18 %outImage %131 = OpISub %v2uint %127 %130
%140 = OpLoad %18 %outImage %124 = OpBitcast %v2int %131
%139 = OpImageQuerySize %v2uint %140 %120 = OpFunctionCall %v2int %tint_clamp %122 %123 %124
%141 = OpISub %v2uint %139 %125 %133 = OpLoad %3 %t
%137 = OpBitcast %v2int %141 %134 = OpLoad %3 %ext_tex_plane_1
%136 = OpExtInst %v2int %25 SClamp %118 %118 %137 %137 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
%142 = OpLoad %v4float %red %138 = OpLoad %ExternalTextureParams %137
OpImageWrite %135 %136 %142 %132 = OpFunctionCall %v4float %textureLoadExternal %133 %134 %120 %138
%144 = OpLoad %3 %t OpStore %red %132
%145 = OpLoad %3 %ext_tex_plane_1 %146 = OpLoad %18 %outImage
%153 = OpLoad %3 %t %145 = OpImageQuerySize %v2uint %146
%152 = OpImageQuerySizeLod %v2uint %153 %int_0 %147 = OpISub %v2uint %145 %130
%154 = OpISub %v2uint %152 %125 %143 = OpBitcast %v2int %147
%150 = OpBitcast %v2int %154 %142 = OpFunctionCall %v2int %tint_clamp %123 %123 %143
%146 = OpExtInst %v2int %25 SClamp %149 %118 %150 %149 = OpLoad %18 %outImage
%155 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0 %150 = OpLoad %v4float %red
%156 = OpLoad %ExternalTextureParams %155 OpImageWrite %149 %142 %150
%143 = OpFunctionCall %v4float %textureLoadExternal %144 %145 %146 %156 %158 = OpLoad %3 %t
OpStore %green %143 %157 = OpImageQuerySizeLod %v2uint %158 %int_0
%159 = OpLoad %18 %outImage %159 = OpISub %v2uint %157 %130
%166 = OpLoad %18 %outImage %155 = OpBitcast %v2int %159
%165 = OpImageQuerySize %v2uint %166 %151 = OpFunctionCall %v2int %tint_clamp %154 %123 %155
%167 = OpISub %v2uint %165 %125 %161 = OpLoad %3 %t
%163 = OpBitcast %v2int %167 %162 = OpLoad %3 %ext_tex_plane_1
%160 = OpExtInst %v2int %25 SClamp %162 %118 %163 %163 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
%168 = OpLoad %v4float %green %164 = OpLoad %ExternalTextureParams %163
OpImageWrite %159 %160 %168 %160 = OpFunctionCall %v4float %textureLoadExternal %161 %162 %151 %164
OpStore %green %160
%172 = OpLoad %18 %outImage
%171 = OpImageQuerySize %v2uint %172
%173 = OpISub %v2uint %171 %130
%169 = OpBitcast %v2int %173
%166 = OpFunctionCall %v2int %tint_clamp %168 %123 %169
%175 = OpLoad %18 %outImage
%176 = OpLoad %v4float %green
OpImageWrite %175 %166 %176
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
int4 tint_clamp(int4 e, int4 low, int4 high) {
return min(max(e, low), high);
}
void clamp_1a32e3() { void clamp_1a32e3() {
int4 arg_0 = (1).xxxx; int4 arg_0 = (1).xxxx;
int4 arg_1 = (1).xxxx; int4 arg_1 = (1).xxxx;
int4 arg_2 = (1).xxxx; int4 arg_2 = (1).xxxx;
int4 res = clamp(arg_0, arg_1, arg_2); int4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
int4 tint_clamp(int4 e, int4 low, int4 high) {
return min(max(e, low), high);
}
void clamp_1a32e3() { void clamp_1a32e3() {
int4 arg_0 = (1).xxxx; int4 arg_0 = (1).xxxx;
int4 arg_1 = (1).xxxx; int4 arg_1 = (1).xxxx;
int4 arg_2 = (1).xxxx; int4 arg_2 = (1).xxxx;
int4 res = clamp(arg_0, arg_1, arg_2); int4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
int4 tint_clamp(int4 e, int4 low, int4 high) {
return min(max(e, low), high);
}
void clamp_1a32e3() { void clamp_1a32e3() {
int4 arg_0 = int4(1); int4 arg_0 = int4(1);
int4 arg_1 = int4(1); int4 arg_1 = int4(1);
int4 arg_2 = int4(1); int4 arg_2 = int4(1);
int4 res = clamp(arg_0, arg_1, arg_2); int4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_1a32e3 "clamp_1a32e3" OpName %clamp_1a32e3 "clamp_1a32e3"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1 %int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4 %v4int = OpTypeVector %int 4
%9 = OpTypeFunction %v4int %v4int %v4int %v4int
%void = OpTypeVoid
%20 = OpTypeFunction %void
%int_1 = OpConstant %int 1 %int_1 = OpConstant %int 1
%16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1 %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
%_ptr_Function_v4int = OpTypePointer Function %v4int %_ptr_Function_v4int = OpTypePointer Function %v4int
%19 = OpConstantNull %v4int %28 = OpConstantNull %v4int
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_1a32e3 = OpFunction %void None %9 %tint_clamp = OpFunction %v4int None %9
%12 = OpLabel %e = OpFunctionParameter %v4int
%arg_0 = OpVariable %_ptr_Function_v4int Function %19 %low = OpFunctionParameter %v4int
%arg_1 = OpVariable %_ptr_Function_v4int Function %19 %high = OpFunctionParameter %v4int
%arg_2 = OpVariable %_ptr_Function_v4int Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v4int Function %19 %19 = OpExtInst %v4int %18 SMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v4int %18 SMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v4int %arg_0 %clamp_1a32e3 = OpFunction %void None %20
%25 = OpLoad %v4int %arg_1 %23 = OpLabel
%26 = OpLoad %v4int %arg_2 %arg_0 = OpVariable %_ptr_Function_v4int Function %28
%22 = OpExtInst %v4int %23 SClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v4int Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v4int Function %28
%res = OpVariable %_ptr_Function_v4int Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v4int %arg_0
%33 = OpLoad %v4int %arg_1
%34 = OpLoad %v4int %arg_2
%31 = OpFunctionCall %v4int %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_1a32e3 %39 = OpFunctionCall %void %clamp_1a32e3
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_1a32e3 %46 = OpFunctionCall %void %clamp_1a32e3
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_1a32e3 %49 = OpFunctionCall %void %clamp_1a32e3
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
return min(max(e, low), high);
}
void clamp_548fc7() { void clamp_548fc7() {
uint3 arg_0 = (1u).xxx; uint3 arg_0 = (1u).xxx;
uint3 arg_1 = (1u).xxx; uint3 arg_1 = (1u).xxx;
uint3 arg_2 = (1u).xxx; uint3 arg_2 = (1u).xxx;
uint3 res = clamp(arg_0, arg_1, arg_2); uint3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
return min(max(e, low), high);
}
void clamp_548fc7() { void clamp_548fc7() {
uint3 arg_0 = (1u).xxx; uint3 arg_0 = (1u).xxx;
uint3 arg_1 = (1u).xxx; uint3 arg_1 = (1u).xxx;
uint3 arg_2 = (1u).xxx; uint3 arg_2 = (1u).xxx;
uint3 res = clamp(arg_0, arg_1, arg_2); uint3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
return min(max(e, low), high);
}
void clamp_548fc7() { void clamp_548fc7() {
uint3 arg_0 = uint3(1u); uint3 arg_0 = uint3(1u);
uint3 arg_1 = uint3(1u); uint3 arg_1 = uint3(1u);
uint3 arg_2 = uint3(1u); uint3 arg_2 = uint3(1u);
uint3 res = clamp(arg_0, arg_1, arg_2); uint3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_548fc7 "clamp_548fc7" OpName %clamp_548fc7 "clamp_548fc7"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0 %uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3 %v3uint = OpTypeVector %uint 3
%9 = OpTypeFunction %v3uint %v3uint %v3uint %v3uint
%void = OpTypeVoid
%20 = OpTypeFunction %void
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%16 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1 %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
%_ptr_Function_v3uint = OpTypePointer Function %v3uint %_ptr_Function_v3uint = OpTypePointer Function %v3uint
%19 = OpConstantNull %v3uint %28 = OpConstantNull %v3uint
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_548fc7 = OpFunction %void None %9 %tint_clamp = OpFunction %v3uint None %9
%12 = OpLabel %e = OpFunctionParameter %v3uint
%arg_0 = OpVariable %_ptr_Function_v3uint Function %19 %low = OpFunctionParameter %v3uint
%arg_1 = OpVariable %_ptr_Function_v3uint Function %19 %high = OpFunctionParameter %v3uint
%arg_2 = OpVariable %_ptr_Function_v3uint Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v3uint Function %19 %19 = OpExtInst %v3uint %18 UMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v3uint %18 UMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v3uint %arg_0 %clamp_548fc7 = OpFunction %void None %20
%25 = OpLoad %v3uint %arg_1 %23 = OpLabel
%26 = OpLoad %v3uint %arg_2 %arg_0 = OpVariable %_ptr_Function_v3uint Function %28
%22 = OpExtInst %v3uint %23 UClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v3uint Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v3uint Function %28
%res = OpVariable %_ptr_Function_v3uint Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v3uint %arg_0
%33 = OpLoad %v3uint %arg_1
%34 = OpLoad %v3uint %arg_2
%31 = OpFunctionCall %v3uint %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_548fc7 %39 = OpFunctionCall %void %clamp_548fc7
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_548fc7 %46 = OpFunctionCall %void %clamp_548fc7
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_548fc7 %49 = OpFunctionCall %void %clamp_548fc7
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
int3 tint_clamp(int3 e, int3 low, int3 high) {
return min(max(e, low), high);
}
void clamp_5f0819() { void clamp_5f0819() {
int3 arg_0 = (1).xxx; int3 arg_0 = (1).xxx;
int3 arg_1 = (1).xxx; int3 arg_1 = (1).xxx;
int3 arg_2 = (1).xxx; int3 arg_2 = (1).xxx;
int3 res = clamp(arg_0, arg_1, arg_2); int3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
int3 tint_clamp(int3 e, int3 low, int3 high) {
return min(max(e, low), high);
}
void clamp_5f0819() { void clamp_5f0819() {
int3 arg_0 = (1).xxx; int3 arg_0 = (1).xxx;
int3 arg_1 = (1).xxx; int3 arg_1 = (1).xxx;
int3 arg_2 = (1).xxx; int3 arg_2 = (1).xxx;
int3 res = clamp(arg_0, arg_1, arg_2); int3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
int3 tint_clamp(int3 e, int3 low, int3 high) {
return min(max(e, low), high);
}
void clamp_5f0819() { void clamp_5f0819() {
int3 arg_0 = int3(1); int3 arg_0 = int3(1);
int3 arg_1 = int3(1); int3 arg_1 = int3(1);
int3 arg_2 = int3(1); int3 arg_2 = int3(1);
int3 res = clamp(arg_0, arg_1, arg_2); int3 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_5f0819 "clamp_5f0819" OpName %clamp_5f0819 "clamp_5f0819"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1 %int = OpTypeInt 32 1
%v3int = OpTypeVector %int 3 %v3int = OpTypeVector %int 3
%9 = OpTypeFunction %v3int %v3int %v3int %v3int
%void = OpTypeVoid
%20 = OpTypeFunction %void
%int_1 = OpConstant %int 1 %int_1 = OpConstant %int 1
%16 = OpConstantComposite %v3int %int_1 %int_1 %int_1 %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
%_ptr_Function_v3int = OpTypePointer Function %v3int %_ptr_Function_v3int = OpTypePointer Function %v3int
%19 = OpConstantNull %v3int %28 = OpConstantNull %v3int
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_5f0819 = OpFunction %void None %9 %tint_clamp = OpFunction %v3int None %9
%12 = OpLabel %e = OpFunctionParameter %v3int
%arg_0 = OpVariable %_ptr_Function_v3int Function %19 %low = OpFunctionParameter %v3int
%arg_1 = OpVariable %_ptr_Function_v3int Function %19 %high = OpFunctionParameter %v3int
%arg_2 = OpVariable %_ptr_Function_v3int Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v3int Function %19 %19 = OpExtInst %v3int %18 SMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v3int %18 SMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v3int %arg_0 %clamp_5f0819 = OpFunction %void None %20
%25 = OpLoad %v3int %arg_1 %23 = OpLabel
%26 = OpLoad %v3int %arg_2 %arg_0 = OpVariable %_ptr_Function_v3int Function %28
%22 = OpExtInst %v3int %23 SClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v3int Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v3int Function %28
%res = OpVariable %_ptr_Function_v3int Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v3int %arg_0
%33 = OpLoad %v3int %arg_1
%34 = OpLoad %v3int %arg_2
%31 = OpFunctionCall %v3int %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_5f0819 %39 = OpFunctionCall %void %clamp_5f0819
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_5f0819 %46 = OpFunctionCall %void %clamp_5f0819
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_5f0819 %49 = OpFunctionCall %void %clamp_5f0819
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
int2 tint_clamp(int2 e, int2 low, int2 high) {
return min(max(e, low), high);
}
void clamp_6c1749() { void clamp_6c1749() {
int2 arg_0 = (1).xx; int2 arg_0 = (1).xx;
int2 arg_1 = (1).xx; int2 arg_1 = (1).xx;
int2 arg_2 = (1).xx; int2 arg_2 = (1).xx;
int2 res = clamp(arg_0, arg_1, arg_2); int2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
int2 tint_clamp(int2 e, int2 low, int2 high) {
return min(max(e, low), high);
}
void clamp_6c1749() { void clamp_6c1749() {
int2 arg_0 = (1).xx; int2 arg_0 = (1).xx;
int2 arg_1 = (1).xx; int2 arg_1 = (1).xx;
int2 arg_2 = (1).xx; int2 arg_2 = (1).xx;
int2 res = clamp(arg_0, arg_1, arg_2); int2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
int2 tint_clamp(int2 e, int2 low, int2 high) {
return min(max(e, low), high);
}
void clamp_6c1749() { void clamp_6c1749() {
int2 arg_0 = int2(1); int2 arg_0 = int2(1);
int2 arg_1 = int2(1); int2 arg_1 = int2(1);
int2 arg_2 = int2(1); int2 arg_2 = int2(1);
int2 res = clamp(arg_0, arg_1, arg_2); int2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_6c1749 "clamp_6c1749" OpName %clamp_6c1749 "clamp_6c1749"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1 %int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2 %v2int = OpTypeVector %int 2
%9 = OpTypeFunction %v2int %v2int %v2int %v2int
%void = OpTypeVoid
%20 = OpTypeFunction %void
%int_1 = OpConstant %int 1 %int_1 = OpConstant %int 1
%16 = OpConstantComposite %v2int %int_1 %int_1 %25 = OpConstantComposite %v2int %int_1 %int_1
%_ptr_Function_v2int = OpTypePointer Function %v2int %_ptr_Function_v2int = OpTypePointer Function %v2int
%19 = OpConstantNull %v2int %28 = OpConstantNull %v2int
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_6c1749 = OpFunction %void None %9 %tint_clamp = OpFunction %v2int None %9
%12 = OpLabel %e = OpFunctionParameter %v2int
%arg_0 = OpVariable %_ptr_Function_v2int Function %19 %low = OpFunctionParameter %v2int
%arg_1 = OpVariable %_ptr_Function_v2int Function %19 %high = OpFunctionParameter %v2int
%arg_2 = OpVariable %_ptr_Function_v2int Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v2int Function %19 %19 = OpExtInst %v2int %18 SMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v2int %18 SMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v2int %arg_0 %clamp_6c1749 = OpFunction %void None %20
%25 = OpLoad %v2int %arg_1 %23 = OpLabel
%26 = OpLoad %v2int %arg_2 %arg_0 = OpVariable %_ptr_Function_v2int Function %28
%22 = OpExtInst %v2int %23 SClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v2int Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v2int Function %28
%res = OpVariable %_ptr_Function_v2int Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v2int %arg_0
%33 = OpLoad %v2int %arg_1
%34 = OpLoad %v2int %arg_2
%31 = OpFunctionCall %v2int %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_6c1749 %39 = OpFunctionCall %void %clamp_6c1749
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_6c1749 %46 = OpFunctionCall %void %clamp_6c1749
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_6c1749 %49 = OpFunctionCall %void %clamp_6c1749
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
return min(max(e, low), high);
}
void clamp_7706d7() { void clamp_7706d7() {
uint2 arg_0 = (1u).xx; uint2 arg_0 = (1u).xx;
uint2 arg_1 = (1u).xx; uint2 arg_1 = (1u).xx;
uint2 arg_2 = (1u).xx; uint2 arg_2 = (1u).xx;
uint2 res = clamp(arg_0, arg_1, arg_2); uint2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
return min(max(e, low), high);
}
void clamp_7706d7() { void clamp_7706d7() {
uint2 arg_0 = (1u).xx; uint2 arg_0 = (1u).xx;
uint2 arg_1 = (1u).xx; uint2 arg_1 = (1u).xx;
uint2 arg_2 = (1u).xx; uint2 arg_2 = (1u).xx;
uint2 res = clamp(arg_0, arg_1, arg_2); uint2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
return min(max(e, low), high);
}
void clamp_7706d7() { void clamp_7706d7() {
uint2 arg_0 = uint2(1u); uint2 arg_0 = uint2(1u);
uint2 arg_1 = uint2(1u); uint2 arg_1 = uint2(1u);
uint2 arg_2 = uint2(1u); uint2 arg_2 = uint2(1u);
uint2 res = clamp(arg_0, arg_1, arg_2); uint2 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_7706d7 "clamp_7706d7" OpName %clamp_7706d7 "clamp_7706d7"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0 %uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2 %v2uint = OpTypeVector %uint 2
%9 = OpTypeFunction %v2uint %v2uint %v2uint %v2uint
%void = OpTypeVoid
%20 = OpTypeFunction %void
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%16 = OpConstantComposite %v2uint %uint_1 %uint_1 %25 = OpConstantComposite %v2uint %uint_1 %uint_1
%_ptr_Function_v2uint = OpTypePointer Function %v2uint %_ptr_Function_v2uint = OpTypePointer Function %v2uint
%19 = OpConstantNull %v2uint %28 = OpConstantNull %v2uint
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_7706d7 = OpFunction %void None %9 %tint_clamp = OpFunction %v2uint None %9
%12 = OpLabel %e = OpFunctionParameter %v2uint
%arg_0 = OpVariable %_ptr_Function_v2uint Function %19 %low = OpFunctionParameter %v2uint
%arg_1 = OpVariable %_ptr_Function_v2uint Function %19 %high = OpFunctionParameter %v2uint
%arg_2 = OpVariable %_ptr_Function_v2uint Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v2uint Function %19 %19 = OpExtInst %v2uint %18 UMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v2uint %18 UMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v2uint %arg_0 %clamp_7706d7 = OpFunction %void None %20
%25 = OpLoad %v2uint %arg_1 %23 = OpLabel
%26 = OpLoad %v2uint %arg_2 %arg_0 = OpVariable %_ptr_Function_v2uint Function %28
%22 = OpExtInst %v2uint %23 UClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v2uint Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v2uint Function %28
%res = OpVariable %_ptr_Function_v2uint Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v2uint %arg_0
%33 = OpLoad %v2uint %arg_1
%34 = OpLoad %v2uint %arg_2
%31 = OpFunctionCall %v2uint %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_7706d7 %39 = OpFunctionCall %void %clamp_7706d7
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_7706d7 %46 = OpFunctionCall %void %clamp_7706d7
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_7706d7 %49 = OpFunctionCall %void %clamp_7706d7
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
uint tint_clamp(uint e, uint low, uint high) {
return min(max(e, low), high);
}
void clamp_a2de25() { void clamp_a2de25() {
uint arg_0 = 1u; uint arg_0 = 1u;
uint arg_1 = 1u; uint arg_1 = 1u;
uint arg_2 = 1u; uint arg_2 = 1u;
uint res = clamp(arg_0, arg_1, arg_2); uint res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
uint tint_clamp(uint e, uint low, uint high) {
return min(max(e, low), high);
}
void clamp_a2de25() { void clamp_a2de25() {
uint arg_0 = 1u; uint arg_0 = 1u;
uint arg_1 = 1u; uint arg_1 = 1u;
uint arg_2 = 1u; uint arg_2 = 1u;
uint res = clamp(arg_0, arg_1, arg_2); uint res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
uint tint_clamp(uint e, uint low, uint high) {
return min(max(e, low), high);
}
void clamp_a2de25() { void clamp_a2de25() {
uint arg_0 = 1u; uint arg_0 = 1u;
uint arg_1 = 1u; uint arg_1 = 1u;
uint arg_2 = 1u; uint arg_2 = 1u;
uint res = clamp(arg_0, arg_1, arg_2); uint res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 40 ; Bound: 48
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%21 = OpExtInstImport "GLSL.std.450" %17 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_a2de25 "clamp_a2de25" OpName %clamp_a2de25 "clamp_a2de25"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,49 +36,59 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0 %uint = OpTypeInt 32 0
%9 = OpTypeFunction %uint %uint %uint %uint
%void = OpTypeVoid
%19 = OpTypeFunction %void
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint %_ptr_Function_uint = OpTypePointer Function %uint
%17 = OpConstantNull %uint %26 = OpConstantNull %uint
%26 = OpTypeFunction %v4float %34 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_a2de25 = OpFunction %void None %9 %tint_clamp = OpFunction %uint None %9
%12 = OpLabel %e = OpFunctionParameter %uint
%arg_0 = OpVariable %_ptr_Function_uint Function %17 %low = OpFunctionParameter %uint
%arg_1 = OpVariable %_ptr_Function_uint Function %17 %high = OpFunctionParameter %uint
%arg_2 = OpVariable %_ptr_Function_uint Function %17 %15 = OpLabel
%res = OpVariable %_ptr_Function_uint Function %17 %18 = OpExtInst %uint %17 UMax %e %low
%16 = OpExtInst %uint %17 UMin %18 %high
OpReturnValue %16
OpFunctionEnd
%clamp_a2de25 = OpFunction %void None %19
%22 = OpLabel
%arg_0 = OpVariable %_ptr_Function_uint Function %26
%arg_1 = OpVariable %_ptr_Function_uint Function %26
%arg_2 = OpVariable %_ptr_Function_uint Function %26
%res = OpVariable %_ptr_Function_uint Function %26
OpStore %arg_0 %uint_1 OpStore %arg_0 %uint_1
OpStore %arg_1 %uint_1 OpStore %arg_1 %uint_1
OpStore %arg_2 %uint_1 OpStore %arg_2 %uint_1
%22 = OpLoad %uint %arg_0 %30 = OpLoad %uint %arg_0
%23 = OpLoad %uint %arg_1 %31 = OpLoad %uint %arg_1
%24 = OpLoad %uint %arg_2 %32 = OpLoad %uint %arg_2
%20 = OpExtInst %uint %21 UClamp %22 %23 %24 %29 = OpFunctionCall %uint %tint_clamp %30 %31 %32
OpStore %res %20 OpStore %res %29
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %26 %vertex_main_inner = OpFunction %v4float None %34
%28 = OpLabel %36 = OpLabel
%29 = OpFunctionCall %void %clamp_a2de25 %37 = OpFunctionCall %void %clamp_a2de25
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %19
%31 = OpLabel %39 = OpLabel
%32 = OpFunctionCall %v4float %vertex_main_inner %40 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %32 OpStore %value %40
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %19
%35 = OpLabel %43 = OpLabel
%36 = OpFunctionCall %void %clamp_a2de25 %44 = OpFunctionCall %void %clamp_a2de25
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %19
%38 = OpLabel %46 = OpLabel
%39 = OpFunctionCall %void %clamp_a2de25 %47 = OpFunctionCall %void %clamp_a2de25
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
int tint_clamp(int e, int low, int high) {
return min(max(e, low), high);
}
void clamp_b07c65() { void clamp_b07c65() {
int arg_0 = 1; int arg_0 = 1;
int arg_1 = 1; int arg_1 = 1;
int arg_2 = 1; int arg_2 = 1;
int res = clamp(arg_0, arg_1, arg_2); int res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
int tint_clamp(int e, int low, int high) {
return min(max(e, low), high);
}
void clamp_b07c65() { void clamp_b07c65() {
int arg_0 = 1; int arg_0 = 1;
int arg_1 = 1; int arg_1 = 1;
int arg_2 = 1; int arg_2 = 1;
int res = clamp(arg_0, arg_1, arg_2); int res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
int tint_clamp(int e, int low, int high) {
return min(max(e, low), high);
}
void clamp_b07c65() { void clamp_b07c65() {
int arg_0 = 1; int arg_0 = 1;
int arg_1 = 1; int arg_1 = 1;
int arg_2 = 1; int arg_2 = 1;
int res = clamp(arg_0, arg_1, arg_2); int res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 40 ; Bound: 48
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%21 = OpExtInstImport "GLSL.std.450" %17 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_b07c65 "clamp_b07c65" OpName %clamp_b07c65 "clamp_b07c65"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,49 +36,59 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1 %int = OpTypeInt 32 1
%9 = OpTypeFunction %int %int %int %int
%void = OpTypeVoid
%19 = OpTypeFunction %void
%int_1 = OpConstant %int 1 %int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int %_ptr_Function_int = OpTypePointer Function %int
%17 = OpConstantNull %int %26 = OpConstantNull %int
%26 = OpTypeFunction %v4float %34 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_b07c65 = OpFunction %void None %9 %tint_clamp = OpFunction %int None %9
%12 = OpLabel %e = OpFunctionParameter %int
%arg_0 = OpVariable %_ptr_Function_int Function %17 %low = OpFunctionParameter %int
%arg_1 = OpVariable %_ptr_Function_int Function %17 %high = OpFunctionParameter %int
%arg_2 = OpVariable %_ptr_Function_int Function %17 %15 = OpLabel
%res = OpVariable %_ptr_Function_int Function %17 %18 = OpExtInst %int %17 SMax %e %low
%16 = OpExtInst %int %17 SMin %18 %high
OpReturnValue %16
OpFunctionEnd
%clamp_b07c65 = OpFunction %void None %19
%22 = OpLabel
%arg_0 = OpVariable %_ptr_Function_int Function %26
%arg_1 = OpVariable %_ptr_Function_int Function %26
%arg_2 = OpVariable %_ptr_Function_int Function %26
%res = OpVariable %_ptr_Function_int Function %26
OpStore %arg_0 %int_1 OpStore %arg_0 %int_1
OpStore %arg_1 %int_1 OpStore %arg_1 %int_1
OpStore %arg_2 %int_1 OpStore %arg_2 %int_1
%22 = OpLoad %int %arg_0 %30 = OpLoad %int %arg_0
%23 = OpLoad %int %arg_1 %31 = OpLoad %int %arg_1
%24 = OpLoad %int %arg_2 %32 = OpLoad %int %arg_2
%20 = OpExtInst %int %21 SClamp %22 %23 %24 %29 = OpFunctionCall %int %tint_clamp %30 %31 %32
OpStore %res %20 OpStore %res %29
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %26 %vertex_main_inner = OpFunction %v4float None %34
%28 = OpLabel %36 = OpLabel
%29 = OpFunctionCall %void %clamp_b07c65 %37 = OpFunctionCall %void %clamp_b07c65
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %19
%31 = OpLabel %39 = OpLabel
%32 = OpFunctionCall %v4float %vertex_main_inner %40 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %32 OpStore %value %40
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %19
%35 = OpLabel %43 = OpLabel
%36 = OpFunctionCall %void %clamp_b07c65 %44 = OpFunctionCall %void %clamp_b07c65
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %19
%38 = OpLabel %46 = OpLabel
%39 = OpFunctionCall %void %clamp_b07c65 %47 = OpFunctionCall %void %clamp_b07c65
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -1,8 +1,12 @@
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
return min(max(e, low), high);
}
void clamp_bd43ce() { void clamp_bd43ce() {
uint4 arg_0 = (1u).xxxx; uint4 arg_0 = (1u).xxxx;
uint4 arg_1 = (1u).xxxx; uint4 arg_1 = (1u).xxxx;
uint4 arg_2 = (1u).xxxx; uint4 arg_2 = (1u).xxxx;
uint4 res = clamp(arg_0, arg_1, arg_2); uint4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,8 +1,12 @@
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
return min(max(e, low), high);
}
void clamp_bd43ce() { void clamp_bd43ce() {
uint4 arg_0 = (1u).xxxx; uint4 arg_0 = (1u).xxxx;
uint4 arg_1 = (1u).xxxx; uint4 arg_1 = (1u).xxxx;
uint4 arg_2 = (1u).xxxx; uint4 arg_2 = (1u).xxxx;
uint4 res = clamp(arg_0, arg_1, arg_2); uint4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,11 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
return min(max(e, low), high);
}
void clamp_bd43ce() { void clamp_bd43ce() {
uint4 arg_0 = uint4(1u); uint4 arg_0 = uint4(1u);
uint4 arg_1 = uint4(1u); uint4 arg_1 = uint4(1u);
uint4 arg_2 = uint4(1u); uint4 arg_2 = uint4(1u);
uint4 res = clamp(arg_0, arg_1, arg_2); uint4 res = tint_clamp(arg_0, arg_1, arg_2);
} }
struct tint_symbol { struct tint_symbol {

View File

@ -1,10 +1,10 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 42 ; Bound: 50
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%23 = OpExtInstImport "GLSL.std.450" %18 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main" OpEntryPoint Fragment %fragment_main "fragment_main"
@ -13,6 +13,10 @@
OpExecutionMode %compute_main LocalSize 1 1 1 OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value" OpName %value "value"
OpName %vertex_point_size "vertex_point_size" OpName %vertex_point_size "vertex_point_size"
OpName %tint_clamp "tint_clamp"
OpName %e "e"
OpName %low "low"
OpName %high "high"
OpName %clamp_bd43ce "clamp_bd43ce" OpName %clamp_bd43ce "clamp_bd43ce"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -32,51 +36,61 @@
%_ptr_Output_float = OpTypePointer Output %float %_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float %8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0 %uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4 %v4uint = OpTypeVector %uint 4
%9 = OpTypeFunction %v4uint %v4uint %v4uint %v4uint
%void = OpTypeVoid
%20 = OpTypeFunction %void
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%16 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1 %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
%_ptr_Function_v4uint = OpTypePointer Function %v4uint %_ptr_Function_v4uint = OpTypePointer Function %v4uint
%19 = OpConstantNull %v4uint %28 = OpConstantNull %v4uint
%28 = OpTypeFunction %v4float %36 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%clamp_bd43ce = OpFunction %void None %9 %tint_clamp = OpFunction %v4uint None %9
%12 = OpLabel %e = OpFunctionParameter %v4uint
%arg_0 = OpVariable %_ptr_Function_v4uint Function %19 %low = OpFunctionParameter %v4uint
%arg_1 = OpVariable %_ptr_Function_v4uint Function %19 %high = OpFunctionParameter %v4uint
%arg_2 = OpVariable %_ptr_Function_v4uint Function %19 %16 = OpLabel
%res = OpVariable %_ptr_Function_v4uint Function %19 %19 = OpExtInst %v4uint %18 UMax %e %low
OpStore %arg_0 %16 %17 = OpExtInst %v4uint %18 UMin %19 %high
OpStore %arg_1 %16 OpReturnValue %17
OpStore %arg_2 %16 OpFunctionEnd
%24 = OpLoad %v4uint %arg_0 %clamp_bd43ce = OpFunction %void None %20
%25 = OpLoad %v4uint %arg_1 %23 = OpLabel
%26 = OpLoad %v4uint %arg_2 %arg_0 = OpVariable %_ptr_Function_v4uint Function %28
%22 = OpExtInst %v4uint %23 UClamp %24 %25 %26 %arg_1 = OpVariable %_ptr_Function_v4uint Function %28
OpStore %res %22 %arg_2 = OpVariable %_ptr_Function_v4uint Function %28
%res = OpVariable %_ptr_Function_v4uint Function %28
OpStore %arg_0 %25
OpStore %arg_1 %25
OpStore %arg_2 %25
%32 = OpLoad %v4uint %arg_0
%33 = OpLoad %v4uint %arg_1
%34 = OpLoad %v4uint %arg_2
%31 = OpFunctionCall %v4uint %tint_clamp %32 %33 %34
OpStore %res %31
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %28 %vertex_main_inner = OpFunction %v4float None %36
%30 = OpLabel %38 = OpLabel
%31 = OpFunctionCall %void %clamp_bd43ce %39 = OpFunctionCall %void %clamp_bd43ce
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %9 %vertex_main = OpFunction %void None %20
%33 = OpLabel %41 = OpLabel
%34 = OpFunctionCall %v4float %vertex_main_inner %42 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %34 OpStore %value %42
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %9 %fragment_main = OpFunction %void None %20
%37 = OpLabel %45 = OpLabel
%38 = OpFunctionCall %void %clamp_bd43ce %46 = OpFunctionCall %void %clamp_bd43ce
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %9 %compute_main = OpFunction %void None %20
%40 = OpLabel %48 = OpLabel
%41 = OpFunctionCall %void %clamp_bd43ce %49 = OpFunctionCall %void %clamp_bd43ce
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd