intrinsics: Limit storage classes for modf and frexp
To function, private or workgroup See: https://github.com/gpuweb/gpuweb/issues/1846 Change-Id: If84cf4482919e4c7667ca2ff9062edfa79cd9cb6 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54655 Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
parent
9ab63ae600
commit
c82b733ff0
File diff suppressed because it is too large
Load Diff
|
@ -123,6 +123,8 @@ match u32_texel_format:
|
||||||
|
|
||||||
match read_or_write: read | write
|
match read_or_write: read | write
|
||||||
|
|
||||||
|
match function_private_workgroup: function | private | workgroup
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Intrinsic Functions //
|
// Intrinsic Functions //
|
||||||
// //
|
// //
|
||||||
|
@ -306,8 +308,8 @@ fn fma(f32, f32, f32) -> f32
|
||||||
fn fma<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
|
fn fma<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
|
||||||
fn fract(f32) -> f32
|
fn fract(f32) -> f32
|
||||||
fn fract<N: num>(vec<N, f32>) -> vec<N, f32>
|
fn fract<N: num>(vec<N, f32>) -> vec<N, f32>
|
||||||
fn frexp<T: iu32, S: storage_class, A: access>(f32, ptr<S, T, A>) -> f32
|
fn frexp<T: iu32, S: function_private_workgroup, A: access>(f32, ptr<S, T, A>) -> f32
|
||||||
fn frexp<N: num, T: iu32, S: storage_class, A: access>(vec<N, f32>, ptr<S, vec<N, T>, A>) -> vec<N, f32>
|
fn frexp<N: num, T: iu32, S: function_private_workgroup, A: access>(vec<N, f32>, ptr<S, vec<N, T>, A>) -> vec<N, f32>
|
||||||
fn fwidth(f32) -> f32
|
fn fwidth(f32) -> f32
|
||||||
fn fwidth<N: num>(vec<N, f32>) -> vec<N, f32>
|
fn fwidth<N: num>(vec<N, f32>) -> vec<N, f32>
|
||||||
fn fwidthCoarse(f32) -> f32
|
fn fwidthCoarse(f32) -> f32
|
||||||
|
@ -339,8 +341,8 @@ fn min<T: fiu32>(T, T) -> T
|
||||||
fn min<N: num, T: fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T>
|
fn min<N: num, T: fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T>
|
||||||
fn mix(f32, f32, f32) -> f32
|
fn mix(f32, f32, f32) -> f32
|
||||||
fn mix<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
|
fn mix<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
|
||||||
fn modf<S: storage_class, A: access>(f32, ptr<S, f32, A>) -> f32
|
fn modf<S: function_private_workgroup, A: access>(f32, ptr<S, f32, A>) -> f32
|
||||||
fn modf<N: num, S: storage_class, A: access>(vec<N, f32>, ptr<S, vec<N, f32>, A>) -> vec<N, f32>
|
fn modf<N: num, S: function_private_workgroup, A: access>(vec<N, f32>, ptr<S, vec<N, f32>, A>) -> vec<N, f32>
|
||||||
fn normalize<N: num>(vec<N, f32>) -> vec<N, f32>
|
fn normalize<N: num>(vec<N, f32>) -> vec<N, f32>
|
||||||
fn pack2x16float(vec2<f32>) -> u32
|
fn pack2x16float(vec2<f32>) -> u32
|
||||||
fn pack2x16snorm(vec2<f32>) -> u32
|
fn pack2x16snorm(vec2<f32>) -> u32
|
||||||
|
|
|
@ -790,11 +790,12 @@ TEST_F(ResolverIntrinsicDataTest, ArrayLength_Error_ArraySized) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to arrayLength(array<i32, 4>)
|
||||||
"error: no matching call to arrayLength(array<i32, 4>)\n\n"
|
|
||||||
"2 candidate functions:\n"
|
2 candidate functions:
|
||||||
" arrayLength(array<T>) -> u32\n"
|
arrayLength(array<T>) -> u32
|
||||||
" arrayLength(ptr<array<T>>) -> u32\n");
|
arrayLength(ptr<array<T>>) -> u32
|
||||||
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ResolverIntrinsicDataTest, Normalize_Vector) {
|
TEST_F(ResolverIntrinsicDataTest, Normalize_Vector) {
|
||||||
|
@ -814,10 +815,11 @@ TEST_F(ResolverIntrinsicDataTest, Normalize_Error_NoParams) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to normalize()
|
||||||
"error: no matching call to normalize()\n\n"
|
|
||||||
"1 candidate function:\n"
|
1 candidate function:
|
||||||
" normalize(vecN<f32>) -> vecN<f32>\n");
|
normalize(vecN<f32>) -> vecN<f32>
|
||||||
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ResolverIntrinsicDataTest, FrexpScalar) {
|
TEST_F(ResolverIntrinsicDataTest, FrexpScalar) {
|
||||||
|
@ -855,8 +857,8 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_FirstParamInt) {
|
||||||
R"(error: no matching call to frexp(i32, ptr<workgroup, i32, read_write>)
|
R"(error: no matching call to frexp(i32, ptr<workgroup, i32, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32
|
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32, S is function, private or workgroup
|
||||||
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32
|
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32, S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -872,8 +874,8 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamFloatPtr) {
|
||||||
R"(error: no matching call to frexp(f32, ptr<workgroup, f32, read_write>)
|
R"(error: no matching call to frexp(f32, ptr<workgroup, f32, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32
|
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32, S is function, private or workgroup
|
||||||
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32
|
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32, S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -883,12 +885,12 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamNotAPointer) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to frexp(f32, i32)
|
||||||
"error: no matching call to frexp(f32, i32)\n\n"
|
|
||||||
"2 candidate functions:\n"
|
2 candidate functions:
|
||||||
" frexp(f32, ptr<T>) -> f32 where: T is i32 or u32\n"
|
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32, S is function, private or workgroup
|
||||||
" frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> "
|
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32, S is function, private or workgroup
|
||||||
"where: T is i32 or u32\n");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ResolverIntrinsicDataTest, Frexp_Error_VectorSizesDontMatch) {
|
TEST_F(ResolverIntrinsicDataTest, Frexp_Error_VectorSizesDontMatch) {
|
||||||
|
@ -903,8 +905,8 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_VectorSizesDontMatch) {
|
||||||
R"(error: no matching call to frexp(vec2<f32>, ptr<workgroup, vec4<i32>, read_write>)
|
R"(error: no matching call to frexp(vec2<f32>, ptr<workgroup, vec4<i32>, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32
|
frexp(f32, ptr<T>) -> f32 where: T is i32 or u32, S is function, private or workgroup
|
||||||
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32
|
frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32> where: T is i32 or u32, S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -943,8 +945,8 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_FirstParamInt) {
|
||||||
R"(error: no matching call to modf(i32, ptr<workgroup, f32, read_write>)
|
R"(error: no matching call to modf(i32, ptr<workgroup, f32, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
modf(f32, ptr<f32>) -> f32
|
modf(f32, ptr<f32>) -> f32 where: S is function, private or workgroup
|
||||||
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
|
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32> where: S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -960,8 +962,8 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamIntPtr) {
|
||||||
R"(error: no matching call to modf(f32, ptr<workgroup, i32, read_write>)
|
R"(error: no matching call to modf(f32, ptr<workgroup, i32, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
modf(f32, ptr<f32>) -> f32
|
modf(f32, ptr<f32>) -> f32 where: S is function, private or workgroup
|
||||||
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
|
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32> where: S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -971,11 +973,12 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamNotAPointer) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to modf(f32, f32)
|
||||||
"error: no matching call to modf(f32, f32)\n\n"
|
|
||||||
"2 candidate functions:\n"
|
2 candidate functions:
|
||||||
" modf(f32, ptr<f32>) -> f32\n"
|
modf(f32, ptr<f32>) -> f32 where: S is function, private or workgroup
|
||||||
" modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>\n");
|
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32> where: S is function, private or workgroup
|
||||||
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ResolverIntrinsicDataTest, Modf_Error_VectorSizesDontMatch) {
|
TEST_F(ResolverIntrinsicDataTest, Modf_Error_VectorSizesDontMatch) {
|
||||||
|
@ -990,8 +993,8 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_VectorSizesDontMatch) {
|
||||||
R"(error: no matching call to modf(vec2<f32>, ptr<workgroup, vec4<f32>, read_write>)
|
R"(error: no matching call to modf(vec2<f32>, ptr<workgroup, vec4<f32>, read_write>)
|
||||||
|
|
||||||
2 candidate functions:
|
2 candidate functions:
|
||||||
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
|
modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32> where: S is function, private or workgroup
|
||||||
modf(f32, ptr<f32>) -> f32
|
modf(f32, ptr<f32>) -> f32 where: S is function, private or workgroup
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1664,10 +1667,11 @@ TEST_F(ResolverIntrinsicTest, Determinant_NotSquare) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to determinant(mat2x3<f32>)
|
||||||
"error: no matching call to determinant(mat2x3<f32>)\n\n"
|
|
||||||
"1 candidate function:\n"
|
1 candidate function:
|
||||||
" determinant(matNxN<f32>) -> f32\n");
|
determinant(matNxN<f32>) -> f32
|
||||||
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ResolverIntrinsicTest, Determinant_NotMatrix) {
|
TEST_F(ResolverIntrinsicTest, Determinant_NotMatrix) {
|
||||||
|
@ -1678,10 +1682,11 @@ TEST_F(ResolverIntrinsicTest, Determinant_NotMatrix) {
|
||||||
|
|
||||||
EXPECT_FALSE(r()->Resolve());
|
EXPECT_FALSE(r()->Resolve());
|
||||||
|
|
||||||
EXPECT_EQ(r()->error(),
|
EXPECT_EQ(r()->error(), R"(error: no matching call to determinant(f32)
|
||||||
"error: no matching call to determinant(f32)\n\n"
|
|
||||||
"1 candidate function:\n"
|
1 candidate function:
|
||||||
" determinant(matNxN<f32>) -> f32\n");
|
determinant(matNxN<f32>) -> f32
|
||||||
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
using ResolverIntrinsicTest_Texture =
|
using ResolverIntrinsicTest_Texture =
|
||||||
|
|
Loading…
Reference in New Issue