diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2017-10-12 10:30:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-10-12 10:30:48 -0700 |
| commit | 9a231a5efb0ddce635e7e40c2d5b086ff4bd389a (patch) | |
| tree | 7e9d6a2b97928820687fbc04927bf2224964d40f /source | |
| parent | 28ca4dc60aecc0acda8b364d0553a72d2e6c7964 (diff) | |
Do loop fix (#209)
* Bug fix: emit logic for `do` loops
This case was never tested, and I was outputting some garbage characters. This comit fixes the codegen and adds a test case.
* Bug fix: make sure to pass through `[allow_uav_condition]`
This also fixes the standard library definition of `IncrementCounter()` so that it returns a `uint` instead of `void`.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/emit.cpp | 8 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang | 2 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp index 8483caefc..7d7553bc5 100644 --- a/source/slang/emit.cpp +++ b/source/slang/emit.cpp @@ -2637,6 +2637,10 @@ struct EmitVisitor { Emit("[unroll]"); } + else if(getText(attr->getName()) == "allow_uav_condition") + { + Emit("[allow_uav_condition]"); + } } } @@ -2790,11 +2794,11 @@ struct EmitVisitor { EmitLoopAttributes(doWhileStmt); - Emit("do("); + Emit("do\n"); EmitBlockStmt(doWhileStmt->Statement); Emit(" while("); EmitExpr(doWhileStmt->Predicate); - Emit(")\n"); + Emit(");\n"); return; } else if (auto discardStmt = stmt.As<DiscardStmt>()) diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 237ca89e4..442903e6f 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -194,7 +194,7 @@ struct RWStructuredBuffer out uint numStructs, out uint stride); - __intrinsic_op void IncrementCounter(); + __intrinsic_op uint IncrementCounter(); __intrinsic_op T Load(int location); __intrinsic_op T Load(int location, out uint status); diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 96cdd4f11..84f5e89ed 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -196,7 +196,7 @@ sb << " __intrinsic_op void GetDimensions(\n"; sb << " out uint numStructs,\n"; sb << " out uint stride);\n"; sb << "\n"; -sb << " __intrinsic_op void IncrementCounter();\n"; +sb << " __intrinsic_op uint IncrementCounter();\n"; sb << "\n"; sb << " __intrinsic_op T Load(int location);\n"; sb << " __intrinsic_op T Load(int location, out uint status);\n"; |
