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:
parent
be83128031
commit
6dbb463f1d
|
@ -137,6 +137,27 @@ struct BuiltinPolyfill::State {
|
|||
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
|
||||
/// @param ty the parameter and return type for the function
|
||||
/// @return the polyfill function name
|
||||
|
@ -588,6 +609,12 @@ bool BuiltinPolyfill::ShouldRun(const Program* program, const DataMap& data) con
|
|||
return true;
|
||||
}
|
||||
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:
|
||||
if (builtins.count_leading_zeros) {
|
||||
return true;
|
||||
|
@ -679,6 +706,16 @@ void BuiltinPolyfill::Run(CloneContext& ctx, const DataMap& data, DataMap&) cons
|
|||
polyfills, builtin, [&] { return s.atanh(builtin->ReturnType()); });
|
||||
}
|
||||
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:
|
||||
if (builtins.count_leading_zeros) {
|
||||
polyfill = utils::GetOrCreate(polyfills, builtin, [&] {
|
||||
|
|
|
@ -47,6 +47,8 @@ class BuiltinPolyfill final : public Castable<BuiltinPolyfill, Transform> {
|
|||
bool asinh = false;
|
||||
/// What level should `atanh` be polyfilled?
|
||||
Level atanh = Level::kNone;
|
||||
/// Should `clamp()` be polyfilled for integer values (scalar or vector)?
|
||||
bool clamp_int = false;
|
||||
/// Should `countLeadingZeros()` be polyfilled?
|
||||
bool count_leading_zeros = false;
|
||||
/// Should `countTrailingZeros()` be polyfilled?
|
||||
|
|
|
@ -398,6 +398,173 @@ fn f() {
|
|||
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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -162,6 +162,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
|||
polyfills.acosh = transform::BuiltinPolyfill::Level::kFull;
|
||||
polyfills.asinh = true;
|
||||
polyfills.atanh = transform::BuiltinPolyfill::Level::kFull;
|
||||
polyfills.clamp_int = true;
|
||||
// TODO(crbug.com/tint/1449): Some of these can map to HLSL's `firstbitlow`
|
||||
// and `firstbithigh`.
|
||||
polyfills.count_leading_zeros = true;
|
||||
|
|
|
@ -171,6 +171,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
|||
transform::BuiltinPolyfill::Builtins polyfills;
|
||||
polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck;
|
||||
polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck;
|
||||
polyfills.clamp_int = true;
|
||||
polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters;
|
||||
polyfills.first_leading_bit = true;
|
||||
polyfills.first_trailing_bit = true;
|
||||
|
|
|
@ -52,6 +52,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
|||
transform::BuiltinPolyfill::Builtins polyfills;
|
||||
polyfills.acosh = transform::BuiltinPolyfill::Level::kRangeCheck;
|
||||
polyfills.atanh = transform::BuiltinPolyfill::Level::kRangeCheck;
|
||||
polyfills.clamp_int = true;
|
||||
polyfills.count_leading_zeros = true;
|
||||
polyfills.count_trailing_zeros = true;
|
||||
polyfills.extract_bits = transform::BuiltinPolyfill::Level::kClampParameters;
|
||||
|
|
|
@ -46,14 +46,18 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
|
|||
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_1 = ((offset + 16u)) / 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]));
|
||||
}
|
||||
|
||||
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_4 = ((offset + 4u)) / 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_9 = ((offset + 24u)) / 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]};
|
||||
return tint_symbol_8;
|
||||
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_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_12 = ((offset + 16u)) / 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));
|
||||
}
|
||||
|
||||
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_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))};
|
||||
return tint_symbol_9;
|
||||
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_13;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
int2 tint_tmp;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -46,14 +46,18 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
|
|||
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_1 = ((offset + 16u)) / 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]));
|
||||
}
|
||||
|
||||
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_4 = ((offset + 4u)) / 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_9 = ((offset + 24u)) / 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]};
|
||||
return tint_symbol_8;
|
||||
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_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_12 = ((offset + 16u)) / 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));
|
||||
}
|
||||
|
||||
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_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))};
|
||||
return tint_symbol_9;
|
||||
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_13;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
int2 tint_tmp;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -57,11 +57,19 @@ float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<fl
|
|||
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)]]) {
|
||||
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));
|
||||
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))))));
|
||||
int2 tint_clamp(int2 e, int2 low, int2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 169
|
||||
; Bound: 177
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpCapability ImageQuery
|
||||
|
@ -40,6 +40,10 @@
|
|||
OpName %coord "coord"
|
||||
OpName %params_0 "params"
|
||||
OpName %color "color"
|
||||
OpName %tint_clamp "tint_clamp"
|
||||
OpName %e "e"
|
||||
OpName %low "low"
|
||||
OpName %high "high"
|
||||
OpName %main "main"
|
||||
OpName %red "red"
|
||||
OpName %green "green"
|
||||
|
@ -104,23 +108,24 @@
|
|||
%v2float = OpTypeVector %float 2
|
||||
%float_1 = OpConstant %float 1
|
||||
%90 = OpConstantNull %uint
|
||||
%108 = OpTypeFunction %v2int %v2int %v2int %v2int
|
||||
%void = OpTypeVoid
|
||||
%108 = OpTypeFunction %void
|
||||
%116 = OpTypeFunction %void
|
||||
%int_10 = OpConstant %int 10
|
||||
%117 = OpConstantComposite %v2int %int_10 %int_10
|
||||
%118 = OpConstantNull %v2int
|
||||
%122 = OpConstantComposite %v2int %int_10 %int_10
|
||||
%123 = OpConstantNull %v2int
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%int_0 = OpConstant %int 0
|
||||
%125 = OpConstantComposite %v2uint %uint_1 %uint_1
|
||||
%130 = OpConstantComposite %v2uint %uint_1 %uint_1
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%133 = OpConstantNull %v4float
|
||||
%141 = OpConstantNull %v4float
|
||||
%int_70 = OpConstant %int 70
|
||||
%int_118 = OpConstant %int 118
|
||||
%149 = OpConstantComposite %v2int %int_70 %int_118
|
||||
%154 = OpConstantComposite %v2int %int_70 %int_118
|
||||
%int_1 = OpConstant %int 1
|
||||
%162 = OpConstantComposite %v2int %int_1 %76
|
||||
%168 = OpConstantComposite %v2int %int_1 %76
|
||||
%gammaCorrection = OpFunction %v3float None %19
|
||||
%v = OpFunctionParameter %v3float
|
||||
%params = OpFunctionParameter %GammaTransferParams
|
||||
|
@ -212,47 +217,56 @@
|
|||
%107 = OpCompositeConstruct %v4float %104 %105 %106 %float_1
|
||||
OpReturnValue %107
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %void None %108
|
||||
%111 = OpLabel
|
||||
%red = OpVariable %_ptr_Function_v4float Function %133
|
||||
%green = OpVariable %_ptr_Function_v4float Function %133
|
||||
%113 = OpLoad %3 %t
|
||||
%114 = OpLoad %3 %ext_tex_plane_1
|
||||
%123 = OpLoad %3 %t
|
||||
%122 = OpImageQuerySizeLod %v2uint %123 %int_0
|
||||
%126 = OpISub %v2uint %122 %125
|
||||
%119 = OpBitcast %v2int %126
|
||||
%115 = OpExtInst %v2int %25 SClamp %117 %118 %119
|
||||
%129 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
|
||||
%130 = OpLoad %ExternalTextureParams %129
|
||||
%112 = OpFunctionCall %v4float %textureLoadExternal %113 %114 %115 %130
|
||||
OpStore %red %112
|
||||
%135 = OpLoad %18 %outImage
|
||||
%140 = OpLoad %18 %outImage
|
||||
%139 = OpImageQuerySize %v2uint %140
|
||||
%141 = OpISub %v2uint %139 %125
|
||||
%137 = OpBitcast %v2int %141
|
||||
%136 = OpExtInst %v2int %25 SClamp %118 %118 %137
|
||||
%142 = OpLoad %v4float %red
|
||||
OpImageWrite %135 %136 %142
|
||||
%144 = OpLoad %3 %t
|
||||
%145 = OpLoad %3 %ext_tex_plane_1
|
||||
%153 = OpLoad %3 %t
|
||||
%152 = OpImageQuerySizeLod %v2uint %153 %int_0
|
||||
%154 = OpISub %v2uint %152 %125
|
||||
%150 = OpBitcast %v2int %154
|
||||
%146 = OpExtInst %v2int %25 SClamp %149 %118 %150
|
||||
%155 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
|
||||
%156 = OpLoad %ExternalTextureParams %155
|
||||
%143 = OpFunctionCall %v4float %textureLoadExternal %144 %145 %146 %156
|
||||
OpStore %green %143
|
||||
%159 = OpLoad %18 %outImage
|
||||
%166 = OpLoad %18 %outImage
|
||||
%165 = OpImageQuerySize %v2uint %166
|
||||
%167 = OpISub %v2uint %165 %125
|
||||
%163 = OpBitcast %v2int %167
|
||||
%160 = OpExtInst %v2int %25 SClamp %162 %118 %163
|
||||
%168 = OpLoad %v4float %green
|
||||
OpImageWrite %159 %160 %168
|
||||
%tint_clamp = OpFunction %v2int None %108
|
||||
%e = OpFunctionParameter %v2int
|
||||
%low = OpFunctionParameter %v2int
|
||||
%high = OpFunctionParameter %v2int
|
||||
%113 = OpLabel
|
||||
%115 = OpExtInst %v2int %25 SMax %e %low
|
||||
%114 = OpExtInst %v2int %25 SMin %115 %high
|
||||
OpReturnValue %114
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %void None %116
|
||||
%119 = OpLabel
|
||||
%red = OpVariable %_ptr_Function_v4float Function %141
|
||||
%green = OpVariable %_ptr_Function_v4float Function %141
|
||||
%128 = OpLoad %3 %t
|
||||
%127 = OpImageQuerySizeLod %v2uint %128 %int_0
|
||||
%131 = OpISub %v2uint %127 %130
|
||||
%124 = OpBitcast %v2int %131
|
||||
%120 = OpFunctionCall %v2int %tint_clamp %122 %123 %124
|
||||
%133 = OpLoad %3 %t
|
||||
%134 = OpLoad %3 %ext_tex_plane_1
|
||||
%137 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
|
||||
%138 = OpLoad %ExternalTextureParams %137
|
||||
%132 = OpFunctionCall %v4float %textureLoadExternal %133 %134 %120 %138
|
||||
OpStore %red %132
|
||||
%146 = OpLoad %18 %outImage
|
||||
%145 = OpImageQuerySize %v2uint %146
|
||||
%147 = OpISub %v2uint %145 %130
|
||||
%143 = OpBitcast %v2int %147
|
||||
%142 = OpFunctionCall %v2int %tint_clamp %123 %123 %143
|
||||
%149 = OpLoad %18 %outImage
|
||||
%150 = OpLoad %v4float %red
|
||||
OpImageWrite %149 %142 %150
|
||||
%158 = OpLoad %3 %t
|
||||
%157 = OpImageQuerySizeLod %v2uint %158 %int_0
|
||||
%159 = OpISub %v2uint %157 %130
|
||||
%155 = OpBitcast %v2int %159
|
||||
%151 = OpFunctionCall %v2int %tint_clamp %154 %123 %155
|
||||
%161 = OpLoad %3 %t
|
||||
%162 = OpLoad %3 %ext_tex_plane_1
|
||||
%163 = OpAccessChain %_ptr_Uniform_ExternalTextureParams %ext_tex_params %uint_0
|
||||
%164 = OpLoad %ExternalTextureParams %163
|
||||
%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
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int4 tint_clamp(int4 e, int4 low, int4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_1a32e3() {
|
||||
int4 arg_0 = (1).xxxx;
|
||||
int4 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int4 tint_clamp(int4 e, int4 low, int4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_1a32e3() {
|
||||
int4 arg_0 = (1).xxxx;
|
||||
int4 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
int4 tint_clamp(int4 e, int4 low, int4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_1a32e3() {
|
||||
int4 arg_0 = int4(1);
|
||||
int4 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%9 = OpTypeFunction %v4int %v4int %v4int %v4int
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v4int
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v4int
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_1a32e3 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v4int Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v4int Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v4int Function %19
|
||||
%res = OpVariable %_ptr_Function_v4int Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v4int %arg_0
|
||||
%25 = OpLoad %v4int %arg_1
|
||||
%26 = OpLoad %v4int %arg_2
|
||||
%22 = OpExtInst %v4int %23 SClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v4int None %9
|
||||
%e = OpFunctionParameter %v4int
|
||||
%low = OpFunctionParameter %v4int
|
||||
%high = OpFunctionParameter %v4int
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v4int %18 SMax %e %low
|
||||
%17 = OpExtInst %v4int %18 SMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_1a32e3 = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v4int Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v4int Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_1a32e3
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_1a32e3
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_1a32e3
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_1a32e3
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_1a32e3
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_1a32e3
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_548fc7() {
|
||||
uint3 arg_0 = (1u).xxx;
|
||||
uint3 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_548fc7() {
|
||||
uint3 arg_0 = (1u).xxx;
|
||||
uint3 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
uint3 tint_clamp(uint3 e, uint3 low, uint3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_548fc7() {
|
||||
uint3 arg_0 = uint3(1u);
|
||||
uint3 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%9 = OpTypeFunction %v3uint %v3uint %v3uint %v3uint
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v3uint
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v3uint
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_548fc7 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v3uint Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v3uint Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v3uint Function %19
|
||||
%res = OpVariable %_ptr_Function_v3uint Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v3uint %arg_0
|
||||
%25 = OpLoad %v3uint %arg_1
|
||||
%26 = OpLoad %v3uint %arg_2
|
||||
%22 = OpExtInst %v3uint %23 UClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v3uint None %9
|
||||
%e = OpFunctionParameter %v3uint
|
||||
%low = OpFunctionParameter %v3uint
|
||||
%high = OpFunctionParameter %v3uint
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v3uint %18 UMax %e %low
|
||||
%17 = OpExtInst %v3uint %18 UMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_548fc7 = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v3uint Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v3uint Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_548fc7
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_548fc7
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_548fc7
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_548fc7
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_548fc7
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_548fc7
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int3 tint_clamp(int3 e, int3 low, int3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_5f0819() {
|
||||
int3 arg_0 = (1).xxx;
|
||||
int3 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int3 tint_clamp(int3 e, int3 low, int3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_5f0819() {
|
||||
int3 arg_0 = (1).xxx;
|
||||
int3 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
int3 tint_clamp(int3 e, int3 low, int3 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_5f0819() {
|
||||
int3 arg_0 = int3(1);
|
||||
int3 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%9 = OpTypeFunction %v3int %v3int %v3int %v3int
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v3int
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v3int
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_5f0819 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v3int Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v3int Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v3int Function %19
|
||||
%res = OpVariable %_ptr_Function_v3int Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v3int %arg_0
|
||||
%25 = OpLoad %v3int %arg_1
|
||||
%26 = OpLoad %v3int %arg_2
|
||||
%22 = OpExtInst %v3int %23 SClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v3int None %9
|
||||
%e = OpFunctionParameter %v3int
|
||||
%low = OpFunctionParameter %v3int
|
||||
%high = OpFunctionParameter %v3int
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v3int %18 SMax %e %low
|
||||
%17 = OpExtInst %v3int %18 SMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_5f0819 = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v3int Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v3int Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_5f0819
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_5f0819
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_5f0819
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_5f0819
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_5f0819
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_5f0819
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int2 tint_clamp(int2 e, int2 low, int2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_6c1749() {
|
||||
int2 arg_0 = (1).xx;
|
||||
int2 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int2 tint_clamp(int2 e, int2 low, int2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_6c1749() {
|
||||
int2 arg_0 = (1).xx;
|
||||
int2 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
int2 tint_clamp(int2 e, int2 low, int2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_6c1749() {
|
||||
int2 arg_0 = int2(1);
|
||||
int2 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%9 = OpTypeFunction %v2int %v2int %v2int %v2int
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v2int
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v2int
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_6c1749 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v2int Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v2int Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v2int Function %19
|
||||
%res = OpVariable %_ptr_Function_v2int Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v2int %arg_0
|
||||
%25 = OpLoad %v2int %arg_1
|
||||
%26 = OpLoad %v2int %arg_2
|
||||
%22 = OpExtInst %v2int %23 SClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v2int None %9
|
||||
%e = OpFunctionParameter %v2int
|
||||
%low = OpFunctionParameter %v2int
|
||||
%high = OpFunctionParameter %v2int
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v2int %18 SMax %e %low
|
||||
%17 = OpExtInst %v2int %18 SMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_6c1749 = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v2int Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v2int Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_6c1749
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_6c1749
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_6c1749
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_6c1749
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_6c1749
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_6c1749
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_7706d7() {
|
||||
uint2 arg_0 = (1u).xx;
|
||||
uint2 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_7706d7() {
|
||||
uint2 arg_0 = (1u).xx;
|
||||
uint2 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
uint2 tint_clamp(uint2 e, uint2 low, uint2 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_7706d7() {
|
||||
uint2 arg_0 = uint2(1u);
|
||||
uint2 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%9 = OpTypeFunction %v2uint %v2uint %v2uint %v2uint
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v2uint
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v2uint
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_7706d7 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v2uint Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v2uint Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v2uint Function %19
|
||||
%res = OpVariable %_ptr_Function_v2uint Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v2uint %arg_0
|
||||
%25 = OpLoad %v2uint %arg_1
|
||||
%26 = OpLoad %v2uint %arg_2
|
||||
%22 = OpExtInst %v2uint %23 UClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v2uint None %9
|
||||
%e = OpFunctionParameter %v2uint
|
||||
%low = OpFunctionParameter %v2uint
|
||||
%high = OpFunctionParameter %v2uint
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v2uint %18 UMax %e %low
|
||||
%17 = OpExtInst %v2uint %18 UMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_7706d7 = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v2uint Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v2uint Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_7706d7
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_7706d7
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_7706d7
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_7706d7
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_7706d7
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_7706d7
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint tint_clamp(uint e, uint low, uint high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_a2de25() {
|
||||
uint arg_0 = 1u;
|
||||
uint arg_1 = 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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint tint_clamp(uint e, uint low, uint high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_a2de25() {
|
||||
uint arg_0 = 1u;
|
||||
uint arg_1 = 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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
uint tint_clamp(uint e, uint low, uint high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_a2de25() {
|
||||
uint arg_0 = 1u;
|
||||
uint arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 40
|
||||
; Bound: 48
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%21 = OpExtInstImport "GLSL.std.450"
|
||||
%17 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,49 +36,59 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%9 = OpTypeFunction %uint %uint %uint %uint
|
||||
%void = OpTypeVoid
|
||||
%19 = OpTypeFunction %void
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%17 = OpConstantNull %uint
|
||||
%26 = OpTypeFunction %v4float
|
||||
%26 = OpConstantNull %uint
|
||||
%34 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_a2de25 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_uint Function %17
|
||||
%arg_1 = OpVariable %_ptr_Function_uint Function %17
|
||||
%arg_2 = OpVariable %_ptr_Function_uint Function %17
|
||||
%res = OpVariable %_ptr_Function_uint Function %17
|
||||
%tint_clamp = OpFunction %uint None %9
|
||||
%e = OpFunctionParameter %uint
|
||||
%low = OpFunctionParameter %uint
|
||||
%high = OpFunctionParameter %uint
|
||||
%15 = OpLabel
|
||||
%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_1 %uint_1
|
||||
OpStore %arg_2 %uint_1
|
||||
%22 = OpLoad %uint %arg_0
|
||||
%23 = OpLoad %uint %arg_1
|
||||
%24 = OpLoad %uint %arg_2
|
||||
%20 = OpExtInst %uint %21 UClamp %22 %23 %24
|
||||
OpStore %res %20
|
||||
%30 = OpLoad %uint %arg_0
|
||||
%31 = OpLoad %uint %arg_1
|
||||
%32 = OpLoad %uint %arg_2
|
||||
%29 = OpFunctionCall %uint %tint_clamp %30 %31 %32
|
||||
OpStore %res %29
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %26
|
||||
%28 = OpLabel
|
||||
%29 = OpFunctionCall %void %clamp_a2de25
|
||||
%vertex_main_inner = OpFunction %v4float None %34
|
||||
%36 = OpLabel
|
||||
%37 = OpFunctionCall %void %clamp_a2de25
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%31 = OpLabel
|
||||
%32 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %32
|
||||
%vertex_main = OpFunction %void None %19
|
||||
%39 = OpLabel
|
||||
%40 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %40
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%35 = OpLabel
|
||||
%36 = OpFunctionCall %void %clamp_a2de25
|
||||
%fragment_main = OpFunction %void None %19
|
||||
%43 = OpLabel
|
||||
%44 = OpFunctionCall %void %clamp_a2de25
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_a2de25
|
||||
%compute_main = OpFunction %void None %19
|
||||
%46 = OpLabel
|
||||
%47 = OpFunctionCall %void %clamp_a2de25
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int tint_clamp(int e, int low, int high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_b07c65() {
|
||||
int arg_0 = 1;
|
||||
int arg_1 = 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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
int tint_clamp(int e, int low, int high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_b07c65() {
|
||||
int arg_0 = 1;
|
||||
int arg_1 = 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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
int tint_clamp(int e, int low, int high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_b07c65() {
|
||||
int arg_0 = 1;
|
||||
int arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 40
|
||||
; Bound: 48
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%21 = OpExtInstImport "GLSL.std.450"
|
||||
%17 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,49 +36,59 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%9 = OpTypeFunction %int %int %int %int
|
||||
%void = OpTypeVoid
|
||||
%19 = OpTypeFunction %void
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%17 = OpConstantNull %int
|
||||
%26 = OpTypeFunction %v4float
|
||||
%26 = OpConstantNull %int
|
||||
%34 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_b07c65 = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_int Function %17
|
||||
%arg_1 = OpVariable %_ptr_Function_int Function %17
|
||||
%arg_2 = OpVariable %_ptr_Function_int Function %17
|
||||
%res = OpVariable %_ptr_Function_int Function %17
|
||||
%tint_clamp = OpFunction %int None %9
|
||||
%e = OpFunctionParameter %int
|
||||
%low = OpFunctionParameter %int
|
||||
%high = OpFunctionParameter %int
|
||||
%15 = OpLabel
|
||||
%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_1 %int_1
|
||||
OpStore %arg_2 %int_1
|
||||
%22 = OpLoad %int %arg_0
|
||||
%23 = OpLoad %int %arg_1
|
||||
%24 = OpLoad %int %arg_2
|
||||
%20 = OpExtInst %int %21 SClamp %22 %23 %24
|
||||
OpStore %res %20
|
||||
%30 = OpLoad %int %arg_0
|
||||
%31 = OpLoad %int %arg_1
|
||||
%32 = OpLoad %int %arg_2
|
||||
%29 = OpFunctionCall %int %tint_clamp %30 %31 %32
|
||||
OpStore %res %29
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %26
|
||||
%28 = OpLabel
|
||||
%29 = OpFunctionCall %void %clamp_b07c65
|
||||
%vertex_main_inner = OpFunction %v4float None %34
|
||||
%36 = OpLabel
|
||||
%37 = OpFunctionCall %void %clamp_b07c65
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%31 = OpLabel
|
||||
%32 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %32
|
||||
%vertex_main = OpFunction %void None %19
|
||||
%39 = OpLabel
|
||||
%40 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %40
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%35 = OpLabel
|
||||
%36 = OpFunctionCall %void %clamp_b07c65
|
||||
%fragment_main = OpFunction %void None %19
|
||||
%43 = OpLabel
|
||||
%44 = OpFunctionCall %void %clamp_b07c65
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_b07c65
|
||||
%compute_main = OpFunction %void None %19
|
||||
%46 = OpLabel
|
||||
%47 = OpFunctionCall %void %clamp_b07c65
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_bd43ce() {
|
||||
uint4 arg_0 = (1u).xxxx;
|
||||
uint4 arg_1 = (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 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_bd43ce() {
|
||||
uint4 arg_0 = (1u).xxxx;
|
||||
uint4 arg_1 = (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 {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
uint4 tint_clamp(uint4 e, uint4 low, uint4 high) {
|
||||
return min(max(e, low), high);
|
||||
}
|
||||
|
||||
void clamp_bd43ce() {
|
||||
uint4 arg_0 = uint4(1u);
|
||||
uint4 arg_1 = 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 {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 42
|
||||
; Bound: 50
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%23 = OpExtInstImport "GLSL.std.450"
|
||||
%18 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||
|
@ -13,6 +13,10 @@
|
|||
OpExecutionMode %compute_main LocalSize 1 1 1
|
||||
OpName %value "value"
|
||||
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 %arg_0 "arg_0"
|
||||
OpName %arg_1 "arg_1"
|
||||
|
@ -32,51 +36,61 @@
|
|||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%8 = OpConstantNull %float
|
||||
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
|
||||
%void = OpTypeVoid
|
||||
%9 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%9 = OpTypeFunction %v4uint %v4uint %v4uint %v4uint
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%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
|
||||
%19 = OpConstantNull %v4uint
|
||||
%28 = OpTypeFunction %v4float
|
||||
%28 = OpConstantNull %v4uint
|
||||
%36 = OpTypeFunction %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%clamp_bd43ce = OpFunction %void None %9
|
||||
%12 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v4uint Function %19
|
||||
%arg_1 = OpVariable %_ptr_Function_v4uint Function %19
|
||||
%arg_2 = OpVariable %_ptr_Function_v4uint Function %19
|
||||
%res = OpVariable %_ptr_Function_v4uint Function %19
|
||||
OpStore %arg_0 %16
|
||||
OpStore %arg_1 %16
|
||||
OpStore %arg_2 %16
|
||||
%24 = OpLoad %v4uint %arg_0
|
||||
%25 = OpLoad %v4uint %arg_1
|
||||
%26 = OpLoad %v4uint %arg_2
|
||||
%22 = OpExtInst %v4uint %23 UClamp %24 %25 %26
|
||||
OpStore %res %22
|
||||
%tint_clamp = OpFunction %v4uint None %9
|
||||
%e = OpFunctionParameter %v4uint
|
||||
%low = OpFunctionParameter %v4uint
|
||||
%high = OpFunctionParameter %v4uint
|
||||
%16 = OpLabel
|
||||
%19 = OpExtInst %v4uint %18 UMax %e %low
|
||||
%17 = OpExtInst %v4uint %18 UMin %19 %high
|
||||
OpReturnValue %17
|
||||
OpFunctionEnd
|
||||
%clamp_bd43ce = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%arg_0 = OpVariable %_ptr_Function_v4uint Function %28
|
||||
%arg_1 = OpVariable %_ptr_Function_v4uint Function %28
|
||||
%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
|
||||
OpFunctionEnd
|
||||
%vertex_main_inner = OpFunction %v4float None %28
|
||||
%30 = OpLabel
|
||||
%31 = OpFunctionCall %void %clamp_bd43ce
|
||||
%vertex_main_inner = OpFunction %v4float None %36
|
||||
%38 = OpLabel
|
||||
%39 = OpFunctionCall %void %clamp_bd43ce
|
||||
OpReturnValue %5
|
||||
OpFunctionEnd
|
||||
%vertex_main = OpFunction %void None %9
|
||||
%33 = OpLabel
|
||||
%34 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %34
|
||||
%vertex_main = OpFunction %void None %20
|
||||
%41 = OpLabel
|
||||
%42 = OpFunctionCall %v4float %vertex_main_inner
|
||||
OpStore %value %42
|
||||
OpStore %vertex_point_size %float_1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%fragment_main = OpFunction %void None %9
|
||||
%37 = OpLabel
|
||||
%38 = OpFunctionCall %void %clamp_bd43ce
|
||||
%fragment_main = OpFunction %void None %20
|
||||
%45 = OpLabel
|
||||
%46 = OpFunctionCall %void %clamp_bd43ce
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%compute_main = OpFunction %void None %9
|
||||
%40 = OpLabel
|
||||
%41 = OpFunctionCall %void %clamp_bd43ce
|
||||
%compute_main = OpFunction %void None %20
|
||||
%48 = OpLabel
|
||||
%49 = OpFunctionCall %void %clamp_bd43ce
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
Loading…
Reference in New Issue