diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-10-15 15:19:46 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-15 15:19:46 -0400 |
| commit | fb44993b38dd98261f20e718c3e282634902b391 (patch) | |
| tree | 3483d51b1c804fc5988183f62c7e45e80d840c8e /source | |
| parent | 2420f47b56647d33e5dbb6730718905a767c7244 (diff) | |
GetDimension on GLSL for StructuredBuffer (#1081)
* Fix GetDimensions for glsl.
* Add test for Load on RWStructuredBuffer as part of GetDimension.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 5 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 15 |
2 files changed, 13 insertions, 7 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 9bd1c2928..a24d6c414 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -48,6 +48,7 @@ __magic_type(HLSLStructuredBufferType) __intrinsic_type($(kIROp_HLSLStructuredBufferType)) struct StructuredBuffer { + __target_intrinsic(glsl, "$1 = $0._data.length(); $2 = 0") void GetDimensions( out uint numStructs, out uint stride); @@ -252,7 +253,7 @@ static const struct { char const* name; } kMutableStructuredBufferCases[] = { - { kIROp_HLSLRWStructuredBufferType, "RWStructuredBuffer" }, + { kIROp_HLSLRWStructuredBufferType, "RWStructuredBuffer" }, { kIROp_HLSLRasterizerOrderedStructuredBufferType, "RasterizerOrderedStructuredBuffer" }, }; for(auto item : kMutableStructuredBufferCases) { @@ -266,12 +267,14 @@ struct $(item.name) { uint DecrementCounter(); + __target_intrinsic(glsl, "$1 = $0._data.length(); $2 = 0") void GetDimensions( out uint numStructs, out uint stride); uint IncrementCounter(); + __target_intrinsic(glsl, "$0._data[$1]") T Load(int location); T Load(int location, out uint status); diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 9989915f0..86ec0c556 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -57,6 +57,7 @@ SLANG_SPLICE(kIROp_HLSLStructuredBufferType SLANG_RAW(")\n") SLANG_RAW("struct StructuredBuffer\n") SLANG_RAW("{\n") +SLANG_RAW(" __target_intrinsic(glsl, \"$1 = $0._data.length(); $2 = 0\")\n") SLANG_RAW(" void GetDimensions(\n") SLANG_RAW(" out uint numStructs,\n") SLANG_RAW(" out uint stride);\n") @@ -119,7 +120,7 @@ static const struct { { kIROp_HLSLRasterizerOrderedByteAddressBufferType, "RasterizerOrderedByteAddressBuffer" }, }; for(auto item : kMutableByteAddressBufferCases) { -SLANG_RAW("#line 104 \"hlsl.meta.slang\"") +SLANG_RAW("#line 105 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("__magic_type(HLSL") @@ -272,7 +273,7 @@ SLANG_RAW("};\n") SLANG_RAW("\n") } -SLANG_RAW("#line 247 \"hlsl.meta.slang\"") +SLANG_RAW("#line 248 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") @@ -281,11 +282,11 @@ static const struct { char const* name; } kMutableStructuredBufferCases[] = { - { kIROp_HLSLRWStructuredBufferType, "RWStructuredBuffer" }, + { kIROp_HLSLRWStructuredBufferType, "RWStructuredBuffer" }, { kIROp_HLSLRasterizerOrderedStructuredBufferType, "RasterizerOrderedStructuredBuffer" }, }; for(auto item : kMutableStructuredBufferCases) { -SLANG_RAW("#line 259 \"hlsl.meta.slang\"") +SLANG_RAW("#line 260 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("\n") @@ -305,12 +306,14 @@ SLANG_RAW("\n") SLANG_RAW("{\n") SLANG_RAW(" uint DecrementCounter();\n") SLANG_RAW("\n") +SLANG_RAW(" __target_intrinsic(glsl, \"$1 = $0._data.length(); $2 = 0\")\n") SLANG_RAW(" void GetDimensions(\n") SLANG_RAW(" out uint numStructs,\n") SLANG_RAW(" out uint stride);\n") SLANG_RAW("\n") SLANG_RAW(" uint IncrementCounter();\n") SLANG_RAW("\n") +SLANG_RAW(" __target_intrinsic(glsl, \"$0._data[$1]\")\n") SLANG_RAW(" T Load(int location);\n") SLANG_RAW(" T Load(int location, out uint status);\n") SLANG_RAW("\n") @@ -323,7 +326,7 @@ SLANG_RAW("};\n") SLANG_RAW("\n") } -SLANG_RAW("#line 287 \"hlsl.meta.slang\"") +SLANG_RAW("#line 290 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("__generic<T>\n") @@ -1568,7 +1571,7 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa) sb << "};\n"; } -SLANG_RAW("#line 1495 \"hlsl.meta.slang\"") +SLANG_RAW("#line 1498 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("\n") |
