summaryrefslogtreecommitdiff
path: root/tests/experiments/generic/mutating-interface.slang
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2021-12-21 16:35:34 -0500
committerGitHub <noreply@github.com>2021-12-21 16:35:34 -0500
commit447b7e0e2be031409b1421b49c81f020353bf7c5 (patch)
tree721a1e892b4dc0bcc8c62d7b7e3f9dbb843bf958 /tests/experiments/generic/mutating-interface.slang
parentd7ed829c3f85514fc08a12a5701d64390b31040c (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/experiments/generic/mutating-interface.slang')
-rw-r--r--tests/experiments/generic/mutating-interface.slang51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/experiments/generic/mutating-interface.slang b/tests/experiments/generic/mutating-interface.slang
new file mode 100644
index 000000000..2198b56b2
--- /dev/null
+++ b/tests/experiments/generic/mutating-interface.slang
@@ -0,0 +1,51 @@
+//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