diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2021-12-21 16:35:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-21 16:35:34 -0500 |
| commit | 447b7e0e2be031409b1421b49c81f020353bf7c5 (patch) | |
| tree | 721a1e892b4dc0bcc8c62d7b7e3f9dbb843bf958 /tests/current-bugs | |
| parent | d7ed829c3f85514fc08a12a5701d64390b31040c (diff) | |
Language experiments (#2068)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Moved to experiments.
Added some more tests.
* More tests around associated types.
* Return interface tests.
* More tests.
Diffstat (limited to 'tests/current-bugs')
43 files changed, 0 insertions, 1778 deletions
diff --git a/tests/current-bugs/generic/README.md b/tests/current-bugs/generic/README.md deleted file mode 100644 index 202606979..000000000 --- a/tests/current-bugs/generic/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Generic Tests -============= - -The following tests are currently disabled. - -They are a series of attempts to use generics for a variety of scenarios. There may be multiple versions of an attempt, when this is the case a number will be added to the suffix. In general tests like this can be considered to have been attempts in that order. - -Some of these tests do compile, but are kept because they provide the end of a train of thought. The solution may not be ideal, or the best way to implement in Slang. So they are kept here for completeness. - -Some of the issues may be due to a bug, or unimplemented feature in the compiler. - -Others may not work because it is not the appropriate way to achieve the desired effect. diff --git a/tests/current-bugs/generic/alternative-array-type.slang b/tests/current-bugs/generic/alternative-array-type.slang deleted file mode 100644 index 1e28a85f5..000000000 --- a/tests/current-bugs/generic/alternative-array-type.slang +++ /dev/null @@ -1,25 +0,0 @@ -//DISABLE_TEST:SIMPLE:-target hlsl -entry computeMain -profile cs_6_2 - -/* The docs claim that for arrays we can use the 'alternate' style - -https://github.com/shader-slang/slang/blob/master/docs/language-reference/04-types.md - -> int[10] a; - -But that produces an error: - -.slang(18): error 20001: unexpected '[', expected identifier - int[4] a = { 1, 2, 3, 4 }; -*/ - -RWStructuredBuffer<int> outputBuffer; - -[numthreads(4, 4, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int x = dispatchThreadID.x; - - int[4] a = { 1, 4, 2, 1 }; - - outputBuffer[x] = a[x]; -} diff --git a/tests/current-bugs/generic/built-in-add.slang b/tests/current-bugs/generic/built-in-add.slang deleted file mode 100644 index 1ca20d6a6..000000000 --- a/tests/current-bugs/generic/built-in-add.slang +++ /dev/null @@ -1,23 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test use of a generic with a built in doing something simple. - -Doesn't work because cannot find +. - -.slang(3): error 39999: no overload for '+' applicable to arguments of type (typeof(V), int) -int doThing<V : int>(int b) { return V + b; } - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -int doThing<V : int>(int b) { return V + b; } - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - outputBuffer[dispatchThreadID.x] = doThing<2>(index); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/built-in-extension.slang b/tests/current-bugs/generic/built-in-extension.slang deleted file mode 100644 index b71e3eaa6..000000000 --- a/tests/current-bugs/generic/built-in-extension.slang +++ /dev/null @@ -1,38 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test around extension to a built in, to allow associating types with builtins. - -Doesn't work - -.slang(22): internal error 99999: unexpected condition encountered in Slang compiler: should not appear in input syntax - int.Unsigned v = (int.Unsigned)10; - -*/ - - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -interface IIntegral -{ - associatedtype Unsigned; -}; - -extension int : IIntegral -{ - typedef uint Unsigned; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - // Works - int.Unsigned u = 10; - - // Doesn't work - int.Unsigned v = (int.Unsigned)10; - - outputBuffer[dispatchThreadID.x] = doThing<2>(index); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/byte-address-ptr-2.slang b/tests/current-bugs/generic/byte-address-ptr-2.slang deleted file mode 100644 index 895c0dba4..000000000 --- a/tests/current-bugs/generic/byte-address-ptr-2.slang +++ /dev/null @@ -1,85 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* The purpose of these tests is to use generics to be able to traverse -a 'linked list' of different related types. - -tests/current-bugs/generic/byte-address-ptr-2.slang(75): note 99999: an internal error threw an exception while working on code near this location -(0): error 99999: Slang compilation aborted due to an exception of class Slang::InternalError: assert failure: witnessTableVal->getOp() != kIROp_StructKey -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer - -//TEST_INPUT:ubuffer(data=[0]):name=gB -ByteAddressBuffer gB; - -enum Type : int -{ - A, - B, - C, -}; - -interface IBase -{ - static bool isType(Type type); -}; - -struct Base : IBase -{ - static bool isType(Type type) { return true; } - Type type; -}; - -struct Ptr -{ - Type getType() { return gB.Load<Base>(offset).type; } - - __generic<T : IBase> - bool isType() { return T::isType(getType()); } - // Changing to T : IBase causes an internal compiler crash - __generic<T> - T as() - { - // I want a way to assert if not an appropriate cast. - return gB.Load<T>(offset); - } - int offset; -}; - -struct A : Base -{ - static bool isType(Type type) { return type == Type::A; } - Ptr next; - int something; -}; - -struct B : Base -{ - static bool isType(Type type) { return type == Type::C || type == Type::B; } - int someData; -}; - -struct C : B -{ - static bool isType(Type type) { return type == Type::C; } - int somethingElse; -}; - -RWStructuredBuffer<int> outputBuffer; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - Ptr ptr = { 0 }; - int total = 0; - - while (ptr.isType<A>()) - { - A a = ptr.as<A>(); - total += a.something; - - ptr = a.next; - } - - outputBuffer[dispatchThreadID.x] = total; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/byte-address-ptr.slang b/tests/current-bugs/generic/byte-address-ptr.slang deleted file mode 100644 index 33096b70f..000000000 --- a/tests/current-bugs/generic/byte-address-ptr.slang +++ /dev/null @@ -1,87 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* The purpose of these tests is to use generics to be able to traverse -a 'linked list' of different related types. - -tests/current-bugs/generic/byte-address-ptr.slang(77): note 99999: an internal error threw an exception while working on code near this location -(0): error 99999: Slang compilation aborted due to an exception of class Slang::InternalError: assert failure: witnessTableVal->getOp() != kIROp_StructKey -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer - -//TEST_INPUT:ubuffer(data=[0]):name=gB -ByteAddressBuffer gB; - -enum Type : int -{ - A, - B, - C, -}; - -interface IBase -{ - static bool isType(Type type); -}; - -struct Base : IBase -{ - static bool isType(Type type) { return true; } - Type type; -}; - -struct Ptr -{ - Type getType() { return gB.Load<Base>(offset).type; } - - __generic<T : IBase> - bool isType() { return T::isType(getType()); } - // Changing to T : IBase causes an internal compiler crash - __generic<T : IBase> - T as() - { - bool isOk = isType<T>(); - // I want a way to assert! - // assert(isOk); - return gB.Load<T>(offset); - } - int offset; -}; - -struct A : Base -{ - static bool isType(Type type) { return type == Type::A; } - Ptr next; - int something; -}; - -struct B : Base -{ - static bool isType(Type type) { return type == Type::C || type == Type::B; } - int someData; -}; - -struct C : B -{ - static bool isType(Type type) { return type == Type::C; } - int somethingElse; -}; - -RWStructuredBuffer<int> outputBuffer; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - Ptr ptr = { 0 }; - int total = 0; - - while (ptr.isType<A>()) - { - A a = ptr.as<A>(); - total += a.something; - - ptr = a.next; - } - - outputBuffer[dispatchThreadID.x] = total; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/constraint.slang b/tests/current-bugs/generic/constraint.slang deleted file mode 100644 index 7143d3fd4..000000000 --- a/tests/current-bugs/generic/constraint.slang +++ /dev/null @@ -1,35 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test is to try and see what effects type constraints have. - -This is a bit of a silly example. - -Fails with - -.slang(23): note 99999: an internal error threw an exception while working on code near this location -(0): error 99999: Slang compilation aborted due to an exception of class Slang::InternalError: unimplemented: value lowering - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum XXX {}; - -__generic<T : XXX> -Enum getEnum(T i) -{ - return Enum::A; -} - - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - XXX x; - let e = getEnum(x); - - outputBuffer[index] = int(e); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/enum-flags.slang b/tests/current-bugs/generic/enum-flags.slang deleted file mode 100644 index 2afee720f..000000000 --- a/tests/current-bugs/generic/enum-flags.slang +++ /dev/null @@ -1,40 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test to use generics to treat an enum as a set. - -Doesn't work because the integer ops required for Flags impl, can't be seen */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -enum Enum -{ - A = 0x1, - B = 0x2, - C = 0x4, -}; - -__generic<E, B : __BuiltinIntegerType> -struct Flags -{ - [mutating] void set(E e) { value |= (B)e; } - void isSet(E e) { return (((B)e) & value) != 0; } - B value = 0; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - Flags<Enum, uint8_t> flags; - - if (index & 1) - { - flags.set(Enum::A); - } - bool isASet = flags.isSet(Enum::A); - - outputBuffer[index] = isASet ? 2 : 1; -} - diff --git a/tests/current-bugs/generic/enum-int-flags.slang b/tests/current-bugs/generic/enum-int-flags.slang deleted file mode 100644 index d35b7e6ab..000000000 --- a/tests/current-bugs/generic/enum-int-flags.slang +++ /dev/null @@ -1,42 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test to use generics to treat an enum as a set. */ -/* Doesn't work because doesn't know can convert E into an int type. - -If E could be specified as any enum type then perhaps this could work. -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -enum Enum -{ - A = 0x1, - B = 0x2, - C = 0x4, -}; - -__generic<E> -struct Flags -{ - [mutating] void set(E e) { value |= (int)e; } - void isSet(E e) { return (((int)e) & value) != 0; } - int value = 0; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - Flags<Enum> flags; - - if (index & 1) - { - flags.set(Enum::A); - } - bool isASet = flags.isSet(Enum::A); - - outputBuffer[index] = isASet ? 2 : 1; -} - diff --git a/tests/current-bugs/generic/equality-2.slang b/tests/current-bugs/generic/equality-2.slang deleted file mode 100644 index 8a1f87463..000000000 --- a/tests/current-bugs/generic/equality-2.slang +++ /dev/null @@ -1,42 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test for equality around interface types - -This does work. - -It is here, because it seems like an awkward to do things, and only applys to struct like types. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -interface IEquality -{ - associatedtype Type; - bool isEqual(Type rhs); -}; - -struct A : IEquality -{ - typedef A Type; - bool isEqual(IEquality rhs) - { - return value == rhs.value; - } - int value; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - A a = { 1 }; - A b = { 2 }; - - bool isEqual = a.isEqual(b); - - outputBuffer[index] = 1 + int(isEqual); -} - - diff --git a/tests/current-bugs/generic/equality.slang b/tests/current-bugs/generic/equality.slang deleted file mode 100644 index 604e347b1..000000000 --- a/tests/current-bugs/generic/equality.slang +++ /dev/null @@ -1,43 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test for equality around interface types - -Doesn't work because - -.slang(8): error 38100: type 'A' does not provide required interface member 'isEqual' -struct A : IEquality - ^~~~~~~~~ - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -interface IEquality -{ - bool isEqual(IEquality rhs); -}; - -struct A : IEquality -{ - bool isEqual(IEquality rhs) - { - // Hmm. How can I cant query rhs, and then cast, so how to implement - return true; - } - int value; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - A a = { 1 }; - A b = { 2 }; - - bool isEqual = a.isEqual(b); - - outputBuffer[index] = 1 + int(isEqual); -} - - diff --git a/tests/current-bugs/generic/fixed-array-2.slang b/tests/current-bugs/generic/fixed-array-2.slang deleted file mode 100644 index 00024f80e..000000000 --- a/tests/current-bugs/generic/fixed-array-2.slang +++ /dev/null @@ -1,69 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around use of an array like container. - -Here we just fix the array size, so can test out other characteristics. - -indexOf can't compile because v == elements[i] cannot determine equality. - -It would seem like I should have an IEquality interface, that I could then make -a T require. - -Doesn't work because - -.slang(29): error 30019: expected an expression of type 'Type', got 'T' - if (T::isEqual(v, elements[i])) - - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -interface IEquality -{ - associatedtype Type; - static bool isEqual(Type a, Type b); -}; - -extension int : IEquality -{ - typedef int Type; - static bool isEqual(Type a, Type b) - { - return a == b; - } -}; - - -struct FixedArray<T : IEquality> -{ - static const int SIZE = 4; - - [mutating] void setAt(int i, T value) { elements[i] = value; } - T getAt(int i) { return elements[i]; } - int indexOf(T v) - { - for (int i = 0; i < SIZE; ++i) - { - if (T::isEqual(v, elements[i])) - { - return i; - } - return -1; - } - } - T elements[SIZE]; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - FixedArray<int> arr; - arr.setAt(0, index); - - outputBuffer[index] = 1 + arr.getAt(0); -} - - diff --git a/tests/current-bugs/generic/fixed-array-3.slang b/tests/current-bugs/generic/fixed-array-3.slang deleted file mode 100644 index 16c4c9931..000000000 --- a/tests/current-bugs/generic/fixed-array-3.slang +++ /dev/null @@ -1,68 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around use of an array like container. - -Here we just fix the array size, so can test out other characteristics. - -indexOf can't compile because v == elements[i] cannot determine equality. - -It would seem like I should have an IEquality interface, that I could then make -a T require. - -Doesn't work because - -.slang(29): error 30019: expected an expression of type 'Type', got 'T' - if (T::isEqual(v, elements[i])) - - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -interface IEquality -{ - associatedtype Type; - static bool isEqual(Type a, Type b); -}; - -extension int : IEquality -{ - typedef int Type; - static bool isEqual(Type a, Type b) - { - return a == b; - } -}; - - -struct FixedArray<T : IEquality> -{ - static const int SIZE = 4; - - [mutating] void setAt(int i, T value) { elements[i] = value; } - T getAt(int i) { return elements[i]; } - int indexOf(T v) - { - for (int i = 0; i < SIZE; ++i) - { - if (T::isEqual(v, elements[i])) - { - return i; - } - return -1; - } - } - T elements[SIZE]; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - FixedArray<int> arr; - arr.setAt(0, index); - - outputBuffer[index] = 1 + arr.getAt(0); -} - diff --git a/tests/current-bugs/generic/fixed-array-4.slang b/tests/current-bugs/generic/fixed-array-4.slang deleted file mode 100644 index bf58398d0..000000000 --- a/tests/current-bugs/generic/fixed-array-4.slang +++ /dev/null @@ -1,60 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around use of an array like container. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -/* Here is an attempt to provide an interface to check equality. -But is the definition right anyway? Really I want the This and Type to be -the same type. I guess this enforces that but in an odd manner. -*/ -interface IEquality -{ - associatedtype Type; - bool isEqual(Type rhs); -}; - -extension int : IEquality -{ - typedef int Type; - bool isEqual(Type rhs) - { - // This use of `this` is going to seem odd to a C++ programmer - return this == rhs; - } -}; - -struct FixedArray<T : IEquality> -{ - static const int SIZE = 4; - - [mutating] void setAt(int i, T value) { elements[i] = value; } - T getAt(int i) { return elements[i]; } - int indexOf(T v) - { - for (int i = 0; i < SIZE; ++i) - { - if (v.isEqual(elements[i])) - { - return i; - } - return -1; - } - } - T elements[SIZE]; -}; - - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - FixedArray<int> arr; - arr.setAt(0, index); - - outputBuffer[index] = 1 + arr.getAt(0); -} - diff --git a/tests/current-bugs/generic/fixed-array-5.slang b/tests/current-bugs/generic/fixed-array-5.slang deleted file mode 100644 index 6d0c6f8b9..000000000 --- a/tests/current-bugs/generic/fixed-array-5.slang +++ /dev/null @@ -1,61 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around use of an array like container. - -Here the attempt is to make the equality test separate from the type. -This isn't a great answer because it relies on the right types set -for T and E to work together. - -This doesn't work because... -.slang(25): error 30019: expected an expression of type 'Type', got 'T' - if (E::isEqual(v, elements[i])) - - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -interface IEquality -{ - associatedtype Type; - static bool isEqual(Type a, Type b); -}; - -struct IntEquality : IEquality -{ - typedef int Type; - static bool isEqual(Type a, Type b) { return a == b; } -}; - -struct FixedArray<T, E : IEquality> -{ - static const int SIZE = 4; - - [mutating] void setAt(int i, T value) { elements[i] = value; } - T getAt(int i) { return elements[i]; } - int indexOf(T v) - { - for (int i = 0; i < SIZE; ++i) - { - if (E::isEqual(v, elements[i])) - { - return i; - } - return -1; - } - } - T elements[SIZE]; -}; - - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - FixedArray<int, IntEquality> arr; - arr.setAt(0, index); - - outputBuffer[index] = 1 + arr.getAt(0); -} - diff --git a/tests/current-bugs/generic/fixed-array.slang b/tests/current-bugs/generic/fixed-array.slang deleted file mode 100644 index 32b6d16aa..000000000 --- a/tests/current-bugs/generic/fixed-array.slang +++ /dev/null @@ -1,25 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around use of an array like container. - -Doesn't work because SIZE can't be used to set the element array size */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<float> outputBuffer; - -struct FixedArray<T, SIZE : int> -{ - - T elements[SIZE]; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - FixedArray<int, 8> arr; - - outputBuffer[index] = 1; -} - diff --git a/tests/current-bugs/generic/inheritance.slang b/tests/current-bugs/generic/inheritance.slang deleted file mode 100644 index 6374ccd7f..000000000 --- a/tests/current-bugs/generic/inheritance.slang +++ /dev/null @@ -1,37 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Tests around inheritance. - -Works. - -Docs state inheritance isn't available (although states it might in the future). - -https://github.com/shader-slang/slang/blob/master/docs/language-reference/07-declarations.md - -> Currently only interface types may be named in the inheritance clause of a structure type. When a structure type declares that it inherits from an interface, the programmer asserts that the structure type implements the required members of the interface. - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct A<T> -{ - T a; -}; - -struct B : A<float> -{ - int b; -}; - - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - B b = { 1, 2 + index }; - - outputBuffer[index] = b.b * b.a; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/int-generic-param.slang b/tests/current-bugs/generic/int-generic-param.slang deleted file mode 100644 index ba743d0d3..000000000 --- a/tests/current-bugs/generic/int-generic-param.slang +++ /dev/null @@ -1,30 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test around integer generic parameters. - -Fails with: - -.slang(7): error 30019: expected an expression of type 'int', got 'typeof(N)' - return N; - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -int getN<N : int>() -{ - return N; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - float4 values = { 1, 2, 3, 4 }; - - let val = getN<10>(); - - outputBuffer[index] = val; -} - diff --git a/tests/current-bugs/generic/interface.slang b/tests/current-bugs/generic/interface.slang deleted file mode 100644 index d1d8c60ab..000000000 --- a/tests/current-bugs/generic/interface.slang +++ /dev/null @@ -1,31 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Tests around interface/generics - -.slang(7): error 20001: unexpected '<', expected '{' -interface IThing<T> -*/ - -// Docs say this should work... -// https://github.com/shader-slang/slang/blob/master/docs/language-reference/07-declarations.md - -interface IThing<T> -{ - T get(); -}; - -struct X : IThing<int> -{ - int get() { return 10; } -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - X x; - IThing<int> i = x; - - outputBuffer[index] = i.get(); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/matrix.slang b/tests/current-bugs/generic/matrix.slang deleted file mode 100644 index d660b699c..000000000 --- a/tests/current-bugs/generic/matrix.slang +++ /dev/null @@ -1,28 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test to use generics around resource/built in types. - -Doesn't work - -.slang(5): error 30019: expected an expression of type 'int', got 'typeof(W)' - matrix<float, W, H> values; - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct Another<W : int, H : int> -{ - matrix<float, W, H> values; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - Another<2, 4> a = {}; - - outputBuffer[index] = index; -} - diff --git a/tests/current-bugs/generic/meta-2.slang b/tests/current-bugs/generic/meta-2.slang deleted file mode 100644 index 60f33af86..000000000 --- a/tests/current-bugs/generic/meta-2.slang +++ /dev/null @@ -1,26 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test meta programing. - -Doesn't work: - -.slang(7): error 30019: expected an expression of type 'int', got 'typeof(N)' - static const int Value = N; - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct GetValue<N : int> -{ - static const int Value = N; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - outputBuffer[index] = GetValue<10>::Value; -} - diff --git a/tests/current-bugs/generic/meta.slang b/tests/current-bugs/generic/meta.slang deleted file mode 100644 index 8304593b5..000000000 --- a/tests/current-bugs/generic/meta.slang +++ /dev/null @@ -1,25 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test meta programing. - -Works. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct GetVector4<T> -{ - typedef vector<T, 4> Value; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - GetVector4<float>::Value v = { 1, 2, 3, 4 }; - - outputBuffer[index] = dot(v, v); -} - diff --git a/tests/current-bugs/generic/mutating-interface.slang b/tests/current-bugs/generic/mutating-interface.slang deleted file mode 100644 index 2198b56b2..000000000 --- a/tests/current-bugs/generic/mutating-interface.slang +++ /dev/null @@ -1,51 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test using interfaces with mutation. - -Doesn't work because - -.slang(18): error 30050: mutating method 'lock' cannot be called on an immutable value - lockable.lock(); - -If that section is removed we get on `doThing(count)` - -.slang(31): error 30047: argument passed to parameter '0' must be l-value. - -Which perhaps means an inteface cannot be used as a lvalue? -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -interface ILockable -{ - [mutating] void lock(); - [mutating] void unlock(); -}; - -struct IntCount : ILockable -{ - [mutating] void lock() { count ++; } - [mutating] void unlock() { --count; } - int count = 0; -}; - -int doThing(inout ILockable lockable) -{ - lockable.lock(); - // do something... - - lockable.unlock(); - return 0; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - IntCount count; - doThing(count); - - outputBuffer[dispatchThreadID.x] = count.count; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/operator-overload.slang b/tests/current-bugs/generic/operator-overload.slang deleted file mode 100644 index 590322171..000000000 --- a/tests/current-bugs/generic/operator-overload.slang +++ /dev/null @@ -1,39 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is test out operator overloading. This may not be a feature -that works in user code (it is used within the stdlib). - -This produces: -.slang(10): error 30019: expected an expression of type 'Vec2d', got 'double' - return {a.x + b.x, a.y + b.y}; - -Moreover... - -.slang(18): error 30019: expected an expression of type 'Vec2d', got 'int' - int a = 10 + 11; - -It's as if only this operator+ impl can now be seen. -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct Vec2d -{ - double x, y; -}; - -Vec2d operator+(Vec2d a, Vec2d b) -{ - return {a.x + b.x, a.y + b.y}; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - int a = 10 + 11; - - outputBuffer[dispatchThreadID.x] = int(v); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/param-specialize-2.slang b/tests/current-bugs/generic/param-specialize-2.slang deleted file mode 100644 index 478202f2a..000000000 --- a/tests/current-bugs/generic/param-specialize-2.slang +++ /dev/null @@ -1,43 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* This test trys to specialize an algorithm through generic parameters. - -Using parameters in this way ensures the algorithm in function form -will have those values known at compile time, and presumably lead to a specialized version. - -Here (with 1 == 1) it's testing if a compile time knowable expression can be used. - -Does not work because - -.slang(25): note 99999: an internal error threw an exception while working on code near this location -(0): error 99999: Slang compilation aborted due to an exception of class Slang::InternalError: unexpected: ErrorType -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -int doThing<a : bool, b : int, c : Enum>() -{ - //if (a) - { - return 1; - } - return 0; - //return a ? b + b + int(c) : b - int(c); -} - - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let v = doThing<1 == 1, false, Enum::A>(); - - outputBuffer[dispatchThreadID.x] = v; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/param-specialize.slang b/tests/current-bugs/generic/param-specialize.slang deleted file mode 100644 index 4115184a8..000000000 --- a/tests/current-bugs/generic/param-specialize.slang +++ /dev/null @@ -1,41 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* This test trys to specialize an algorithm through generic parameters. - -Using parameters in this way ensures the algorithm in function form -will have those values known at compile time, and presumably lead to a specialized version. - -Does not work because - -.slang(11): error 30019: expected an expression of type 'bool', got 'typeof(a)' - if (a) -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -int doThing<a : bool, b : int, c : Enum>() -{ - if (a) - { - return 1; - } - return 0; - // A more complex scenario - //return a ? b + b + int(c) : b - int(c); -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let v = doThing<true, false, Enum::A>(); - - outputBuffer[dispatchThreadID.x] = v; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/resource.slang b/tests/current-bugs/generic/resource.slang deleted file mode 100644 index 51cd8a00f..000000000 --- a/tests/current-bugs/generic/resource.slang +++ /dev/null @@ -1,35 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test to use generics around resource/built in types. - -This test shouldn't compile (wrong type for the Texture1D, but gives this error, which doesn't really explain the problem. - -.slang(19): error 30019: expected an expression of type 'Texture1D', got 'Texture1D' - a.tex = tex; - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -// NOTE! This is purposefully wrong to test tex type checking -Texture1D<float> tex; - -struct Another<T> -{ - T z; - Texture1D<T> tex; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - Another<int> a; - - a.z = index; - a.tex = tex; - - outputBuffer[index] = a.z + a.tex.Load(index); -} - diff --git a/tests/current-bugs/generic/return-generic-2.slang b/tests/current-bugs/generic/return-generic-2.slang deleted file mode 100644 index 487b20e44..000000000 --- a/tests/current-bugs/generic/return-generic-2.slang +++ /dev/null @@ -1,38 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic function returning a generic struct. types. - -Failed: - -.slang(20): note 99999: an internal error threw an exception while working on code near this location -(0): error 99999: Slang compilation aborted due to an exception of class Slang::InternalError: unexpected: ErrorType - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -// NOTE, that really I'd prefer, but that won't work because -// the : int doesn't currently allow -// vector<T, SIZE> makeVector4<T, SIZE : int>(T values[SIZE]) - -vector<T> makeVector4<T>(T values[4]) -{ - vector<T, 4> v; - v.x = values[0]; - v.y = values[1]; - v.z = values[2]; - v.w = values[3]; - return v; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - float values[] = { 1, 2, 3, 4}; - - let vec = makeVector4<float>(values); - - outputBuffer[index] = dot(vec, vec); -} diff --git a/tests/current-bugs/generic/return-generic-3.slang b/tests/current-bugs/generic/return-generic-3.slang deleted file mode 100644 index 645312d1d..000000000 --- a/tests/current-bugs/generic/return-generic-3.slang +++ /dev/null @@ -1,26 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic function returning a generic struct. types. - -Works, and deduces the input type of broadcast. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -vector<T, 4> broadcast4<T>(T v) -{ - vector<T, 4> vec; - vec.x = vec.y = vec.z = vec.w = v; - return vec; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let vec = broadcast4(2.0f); - - outputBuffer[index] = dot(vec, vec); -} diff --git a/tests/current-bugs/generic/return-generic-4.slang b/tests/current-bugs/generic/return-generic-4.slang deleted file mode 100644 index d9454169e..000000000 --- a/tests/current-bugs/generic/return-generic-4.slang +++ /dev/null @@ -1,36 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic function returning a generic struct. types. - -Was unable to determine T - -Failed: - -.slang(35): error 39999: could not specialize generic for arguments of type (float[4]) - let vec = makeVector4(values); - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -vector<T> makeVector4<T>(T values[4]) -{ - vector<T, 4> v; - v.x = values[0]; - v.y = values[1]; - v.z = values[2]; - v.w = values[3]; - return v; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - float values[] = { 1, 2, 3, 4}; - - let vec = makeVector4(values); - - outputBuffer[index] = dot(vec, vec); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/return-generic.slang b/tests/current-bugs/generic/return-generic.slang deleted file mode 100644 index d107bdafe..000000000 --- a/tests/current-bugs/generic/return-generic.slang +++ /dev/null @@ -1,38 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic function returning a generic struct. types. - -Since T could be any type, the compiler can't determine if it's convertable from an int. That may be surprising. - -Fails because: - -.slang(11): error 30019: expected an expression of type 'T', got 'int' - a.value = i; - ^ - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct Another<T> -{ - T value; -}; - -Another<T> getAnother<T>(int i) -{ - Another<T> a; - a.value = i; - return a; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - Another<int> a = getAnother<int>(index); - - outputBuffer[index] = a.value; -} - diff --git a/tests/current-bugs/generic/scope-type.slang b/tests/current-bugs/generic/scope-type.slang deleted file mode 100644 index 01c9bfc62..000000000 --- a/tests/current-bugs/generic/scope-type.slang +++ /dev/null @@ -1,36 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -This may be a similar problem as with scope-value-2.slang. -This doesn't work *only* if Thing derives from IIntegral. Remove that and it's fine. - -.slang(19): internal error 99999: unexpected condition encountered in Slang compiler: should not appear in input syntax - let v = (Thing::Unsigned)10; - ^~ - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -interface IIntegral -{ - associatedtype Unsigned; -}; - -struct Thing : IIntegral -{ - typedef uint Unsigned; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - // Doesn't work - let v = (Thing::Unsigned)10; - - outputBuffer[dispatchThreadID.x] = int(v); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/scope-value-2.slang b/tests/current-bugs/generic/scope-value-2.slang deleted file mode 100644 index 9b30934b4..000000000 --- a/tests/current-bugs/generic/scope-value-2.slang +++ /dev/null @@ -1,37 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -Doesn't work -D:\local\Temp\a3393a41-6d61-4049-816b-4edcc04f47fb.slang(24): error 30027: 'kE' is not a member of 'overload group'. - let e = A::Type::kE; - -The only change here was to make A implement IHasType -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -interface IHasType -{ - associatedtype Type; -}; - -struct A : IHasType -{ - typedef A Type; - static const Enum kE = Enum::A; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - let e = A::Type::kE; - outputBuffer[index] = int(e); -} diff --git a/tests/current-bugs/generic/scope-value.slang b/tests/current-bugs/generic/scope-value.slang deleted file mode 100644 index 8b71c7dcc..000000000 --- a/tests/current-bugs/generic/scope-value.slang +++ /dev/null @@ -1,34 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -Works -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -struct A -{ - typedef A Type; - static const Enum kE = Enum::A; -}; - -struct B -{ - typedef B Type; - static const Enum kE = Enum::B; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - let e = B::Type::kE; - outputBuffer[index] = int(e); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/tuple.slang b/tests/current-bugs/generic/tuple.slang deleted file mode 100644 index e5362ed6e..000000000 --- a/tests/current-bugs/generic/tuple.slang +++ /dev/null @@ -1,55 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Tuple experiment. - -Works. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -struct Tuple2<T0, T1> -{ - T0 _0; - T1 _1; -}; - -struct Tuple3<T0, T1, T2> -{ - T0 _0; - T1 _1; - T2 _2; -}; - -Tuple2<T0, T1> makeTuple<T0, T1>(T0 t0, T1 t1) -{ - Tuple2<T0, T1> t; - t._0 = t0; - t._1 = t1; - return t; -} - -Tuple3<T0, T1, T2> makeTuple<T0, T1, T2>(T0 t0, T1 t1, T2 t2) -{ - Tuple3<T0, T1, T2> t; - t._0 = t0; - t._1 = t1; - t._2 = t2; - return t; -} - -int doThing(Tuple2<float, int> v) -{ - return v._0 + v._1; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let t = makeTuple(index + 1.0f, index - 1); - - outputBuffer[index] = doThing(t); -} - diff --git a/tests/current-bugs/generic/type-inference-2.slang b/tests/current-bugs/generic/type-inference-2.slang deleted file mode 100644 index 5108ec90d..000000000 --- a/tests/current-bugs/generic/type-inference-2.slang +++ /dev/null @@ -1,26 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic functions with type inference. - -Does work. - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -T getFirst<T>(vector<T, 4> val) -{ - return val.x; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - float4 values = { 1, 2, 3, 4 }; - - let val = getFirst(values); - - outputBuffer[index] = val; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-inference.slang b/tests/current-bugs/generic/type-inference.slang deleted file mode 100644 index 5c8d7efe7..000000000 --- a/tests/current-bugs/generic/type-inference.slang +++ /dev/null @@ -1,33 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* A test of a generic functions with type inference. - -.slang(17): error 39999: could not specialize generic for arguments of type (float[4]) - let val = get0(values); - ^ -.slang(5): note 39999: see declaration of func get0<T>(T[4]) -> T - - */ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -T get0<T>(T values[4]) -{ - return values[0]; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - float values[] = { 1, 2, 3, 4}; - - // NOTE if we specify T then this works. Ie - // let val = get0<float>(values); - - let val = get0(values); - - outputBuffer[index] = val; -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value-2.slang b/tests/current-bugs/generic/type-to-value-2.slang deleted file mode 100644 index 1be4e59fc..000000000 --- a/tests/current-bugs/generic/type-to-value-2.slang +++ /dev/null @@ -1,48 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -Lets see if we can do something with a built in type - -Doesn't work because - -error 30052: invalid swizzle pattern 'getType' on type 'int' - let type = i.getType(); - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Type -{ - Unknown, - Float, - Int, -}; - -interface IHasType -{ - Type getType() -}; - -extension int : IHasType -{ - Type getType() { return Type::Int; } -}; - -extension float : IHasType -{ - Type getType() { return Type::Float; } -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - int i; - let type = i.getType(); - - outputBuffer[dispatchThreadID.x] = int(type); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value-3.slang b/tests/current-bugs/generic/type-to-value-3.slang deleted file mode 100644 index 773c0fe5c..000000000 --- a/tests/current-bugs/generic/type-to-value-3.slang +++ /dev/null @@ -1,43 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -This does work. -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Type -{ - Unknown, - Float, - Int, -}; - -interface IHasType -{ - static Type getType(); -}; - -extension int : IHasType -{ - static Type getType() { return Type::Int; } -}; - -extension float : IHasType -{ - static Type getType() { return Type::Float; } -}; - -Type getType<T : IHasType>() { return T::getType(); } - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let type = getType<float>(); - - outputBuffer[dispatchThreadID.x] = int(type); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value-4.slang b/tests/current-bugs/generic/type-to-value-4.slang deleted file mode 100644 index 986fffaf7..000000000 --- a/tests/current-bugs/generic/type-to-value-4.slang +++ /dev/null @@ -1,49 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -This doesn't work - it produces dynamic dispatch code, that is uncompilable because cases -are missing. - -.slang(24): error : control reaches end of non-void function [-Wreturn-type] -dxc: note : } -dxc: note : ^ - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -interface IGetE -{ - static Enum getE(); -}; - -struct A : IGetE -{ - static Enum getE() { return Enum::A; } -}; - -struct B : IGetE -{ - static Enum getE() { return Enum::B; } -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - // Err.. even though IGetE doesn't require an instanciation, not clear how to set it. So lets try with instanciation - B b; - IGetE g = b; - - let e = g.getE(); - - outputBuffer[dispatchThreadID.x] = int(e); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value-5.slang b/tests/current-bugs/generic/type-to-value-5.slang deleted file mode 100644 index ce3271d47..000000000 --- a/tests/current-bugs/generic/type-to-value-5.slang +++ /dev/null @@ -1,56 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -Here we try to associate by having a value defined on the type, and then set the type -on the associated type. - -Doesn't work because ... - -.slang(29): error 30027: 'Type' is not a member of '.This'. - return e::Type::kE; - -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -interface IHasType -{ - associatedtype Type; -}; - -// This is a little perverse, because I'm defining as an associated type that is -// the same as itself -struct A : IHasType -{ - typedef A Type; - static const Enum kE = Enum::A; -}; - -struct B : IHasType -{ - typedef B Type; - static const Enum kE = Enum::B; -}; - -Enum getType(IHasType e) -{ - return e::Type::kE; -} - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - B b; - let e = getType(b); - - outputBuffer[dispatchThreadID.x] = int(e); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value-6.slang b/tests/current-bugs/generic/type-to-value-6.slang deleted file mode 100644 index fa7b05cbd..000000000 --- a/tests/current-bugs/generic/type-to-value-6.slang +++ /dev/null @@ -1,49 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -Here we try to associate by having a value defined on the type, and then set the type -on the associated type. - -Doesn't work because ... - -.slang(34): error 30027: 'kE' is not a member of 'overload group'. - let e = B::Type::kE; -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, B -}; - -interface IHasType -{ - associatedtype Type; -}; - -// This is a little perverse, because I'm defining as an associated type that is -// the same as itself -struct A : IHasType -{ - typedef A Type; - static const Enum kE = Enum::A; -}; - -struct B : IHasType -{ - typedef B Type; - static const Enum kE = Enum::B; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - let e = B::Type::kE; - - outputBuffer[dispatchThreadID.x] = int(e); -}
\ No newline at end of file diff --git a/tests/current-bugs/generic/type-to-value.slang b/tests/current-bugs/generic/type-to-value.slang deleted file mode 100644 index 65442212f..000000000 --- a/tests/current-bugs/generic/type-to-value.slang +++ /dev/null @@ -1,33 +0,0 @@ -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj - -/* Test here is to try and associate a value with a type - -This works. -*/ - -//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer -RWStructuredBuffer<int> outputBuffer; - -enum class Enum -{ - A, - B, -}; - -struct A -{ - static const Enum kE = Enum::A; -}; - -struct B -{ - static const Enum kE = Enum::B; -}; - -[numthreads(4, 1, 1)] -void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) -{ - int index = dispatchThreadID.x; - - outputBuffer[dispatchThreadID.x] = int(B::kE); -}
\ No newline at end of file |
