-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[HLSL] Add empty struct test cases to __builtin_hlsl_is_typed_resource_element_compatible
test file
#115045
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[HLSL] Add empty struct test cases to __builtin_hlsl_is_typed_resource_element_compatible
test file
#115045
Changes from all commits
ef4a7ee
0ed4809
65c6e1a
3456c14
c912bfd
90a73b8
b3b8afb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,109 +1,52 @@ | ||
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -fnative-half-type -verify %s | ||
// expected-no-diagnostics | ||
|
||
struct oneInt { | ||
int i; | ||
}; | ||
|
||
struct twoInt { | ||
int aa; | ||
int ab; | ||
}; | ||
|
||
struct threeInts { | ||
oneInt o; | ||
twoInt t; | ||
}; | ||
|
||
struct oneFloat { | ||
float f; | ||
}; | ||
struct depthDiff { | ||
int i; | ||
oneInt o; | ||
oneFloat f; | ||
}; | ||
|
||
struct notHomogenous{ | ||
int i; | ||
float f; | ||
}; | ||
|
||
struct EightElements { | ||
twoInt x[2]; | ||
twoInt y[2]; | ||
}; | ||
|
||
struct EightHalves { | ||
half x[8]; | ||
}; | ||
|
||
struct intVec { | ||
int2 i; | ||
}; | ||
|
||
struct oneIntWithVec { | ||
int i; | ||
oneInt i2; | ||
int2 i3; | ||
}; | ||
|
||
struct weirdStruct { | ||
int i; | ||
intVec iv; | ||
}; | ||
|
||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(int), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(float), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(float4), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(double2), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(oneInt), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(oneFloat), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(twoInt), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(threeInts), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(notHomogenous), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(depthDiff), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(EightElements), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(EightHalves), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(oneIntWithVec), ""); | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(weirdStruct), ""); | ||
|
||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(RWBuffer<int>), ""); | ||
|
||
struct s { | ||
int x; | ||
}; | ||
|
||
// arrays not allowed | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(half[4]), ""); | ||
struct Empty {}; | ||
|
||
template<typename T> struct TemplatedBuffer { | ||
T a; | ||
__hlsl_resource_t h; | ||
}; | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(TemplatedBuffer<int>), ""); | ||
|
||
struct MyStruct1 : TemplatedBuffer<float> { | ||
float x; | ||
template<typename T> struct TemplatedVector { | ||
vector<T, 4> v; | ||
}; | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(MyStruct1), ""); | ||
|
||
struct MyStruct2 { | ||
const TemplatedBuffer<float> TB[10]; | ||
}; | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(MyStruct2), ""); | ||
// structs not allowed | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This change may be a little too aggressive at removing test cases. All the struct cases should return |
||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(s), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(Empty), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(TemplatedBuffer<int>), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(TemplatedVector<int>), ""); | ||
|
||
template<typename T> struct SimpleTemplate { | ||
T a; | ||
}; | ||
// arrays not allowed | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(half[4]), ""); | ||
|
||
// though the element type is incomplete, the type trait should still technically return true | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(SimpleTemplate<__hlsl_resource_t>), ""); | ||
typedef vector<int, 8> int8; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should also have typedef tests that fail, the only one you have right now is a successful case. What about arrays?
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The typedef test that I have right now does return false when evaluated by the builtin, it's a typedef of 8 ints in a vector. I also test for arrays with half[4]. Are these sufficient? |
||
// too many elements | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(int8), ""); | ||
|
||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(SimpleTemplate<float>), ""); | ||
typedef int MyInt; | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(MyInt), ""); | ||
|
||
// bool and enums not allowed | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(bool), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(vector<bool, 2>), ""); | ||
|
||
typedef int myInt; | ||
enum numbers { one, two, three }; | ||
|
||
struct TypeDefTest { | ||
int x; | ||
myInt y; | ||
}; | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(numbers), ""); | ||
|
||
// size exceeds 16 bytes, and exceeds element count limit after splitting 64 bit types into 32 bit types | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(double3), ""); | ||
|
||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(TypeDefTest), ""); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need to remove all these tests, or just update them to expect false results? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They could be left in and switched to false, but it doesn't seem valuable. All structs are disallowed, so I think just one struct test would suffice. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,9 @@ | ||
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -fnative-half-type -verify %s | ||
|
||
// types must be complete | ||
_Static_assert(__builtin_hlsl_is_typed_resource_element_compatible(__hlsl_resource_t), ""); | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(__hlsl_resource_t), ""); | ||
|
||
// expected-note@+1{{forward declaration of 'notComplete'}} | ||
struct notComplete; | ||
// expected-error@+1{{incomplete type 'notComplete' where a complete type is required}} | ||
_Static_assert(!__builtin_hlsl_is_typed_resource_element_compatible(notComplete), ""); | ||
|
Uh oh!
There was an error while loading. Please reload this page.