From 739c3a7b53dc6489065fcd5e9f0a04370c5f9c8f Mon Sep 17 00:00:00 2001 From: Sai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com> Date: Tue, 19 Sep 2023 18:51:24 -0400 Subject: Added `[AutoPyBindCUDA]` for automatic kernel binding + `[PyExport]` for exporting type information (#3209) * Initial: add a DiffTensor impl * Auto-binding and diff tensor implementations now work * Refactored diff-tensor implementation + added py-export for struct types * Cleanup * Update slang-ir-pytorch-cpp-binding.cpp * Updated test names * Update autodiff-data-flow.slang.expected * Add more versions of load/store & default generic args for DiffTensorView. * Add diagnostic for default generic arg and more tests * Add more `[AutoPyBind]` tests --- .../diagnostics/autodiff-data-flow.slang.expected | 3 -- .../generic-incorrect-default-arg.slang | 53 ++++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 tests/diagnostics/generic-incorrect-default-arg.slang (limited to 'tests/diagnostics') diff --git a/tests/diagnostics/autodiff-data-flow.slang.expected b/tests/diagnostics/autodiff-data-flow.slang.expected index 301f84985..6840bfd3c 100644 --- a/tests/diagnostics/autodiff-data-flow.slang.expected +++ b/tests/diagnostics/autodiff-data-flow.slang.expected @@ -3,9 +3,6 @@ standard error = { tests/diagnostics/autodiff-data-flow.slang(15): error 41020: derivative cannot be propagated through call to non-forward-differentiable function `nonDiff`, use 'no_diff' to clarify intention. val = nonDiff(x * 2.0f); ^ -tests/diagnostics/autodiff-data-flow.slang(22): error 41021: a differentiable function must have at least one differentiable output. -void g(float x) - ^ tests/diagnostics/autodiff-data-flow.slang(28): error 30510: loops inside a differentiable function need to provide either '[MaxIters(n)]' or '[ForceUnroll]' attribute. for (int i = 0; i < 5; i++) // Not ok, we can't infer the loop iterations because the body modifies induction var. ^~~ diff --git a/tests/diagnostics/generic-incorrect-default-arg.slang b/tests/diagnostics/generic-incorrect-default-arg.slang new file mode 100644 index 000000000..14192293c --- /dev/null +++ b/tests/diagnostics/generic-incorrect-default-arg.slang @@ -0,0 +1,53 @@ +//TEST:SIMPLE(filecheck=CHECK): -target hlsl -profile cs_5_0 -entry computeMain -line-directive-mode none + +// Check that user code can declare and use a generic +// `struct` type. + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +interface ITest +{ + int doThing(int x); +}; + +struct Impl1 : ITest +{ + int doThing(int x) + { + return x * 2; + } +}; + +struct Impl2 +{ + int doSomethingElse(int x) + { + return x * 3; + } +}; + +__generic +// CHECK: tests/diagnostics/generic-incorrect-default-arg.slang([[@LINE-1]]): error 38029: type argument 'Impl2' does not conform to the required interface 'ITest' +struct GenStruct +{ + T obj; +}; + +int test(GenStruct gs, int val) +{ + return gs.obj.doThing(val); +} + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + + int outVal = 0; + + GenStruct gs; + outVal += test(gs, tid); + + outputBuffer[tid] = outVal; +} \ No newline at end of file -- cgit v1.2.3