diff options
Diffstat (limited to 'source/slang/slang-stdlib.cpp')
| -rw-r--r-- | source/slang/slang-stdlib.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/source/slang/slang-stdlib.cpp b/source/slang/slang-stdlib.cpp index 19827285c..387b6fbb2 100644 --- a/source/slang/slang-stdlib.cpp +++ b/source/slang/slang-stdlib.cpp @@ -230,9 +230,23 @@ __generic<T> __magic_type(HLSLRWStructuredBufferType) struct RWStructuredBuffer __intrinsic __subscript(uint index) -> T { get; set; } }; -__generic<T> __magic_type(HLSLPointStreamType) struct PointStream {}; -__generic<T> __magic_type(HLSLLineStreamType) struct LineStream {}; -__generic<T> __magic_type(HLSLLineStreamType) struct TriangleStream {}; +__generic<T> __magic_type(HLSLPointStreamType) struct PointStream +{ + void Append(T value); + void RestartStrip(); +}; + +__generic<T> __magic_type(HLSLLineStreamType) struct LineStream +{ + void Append(T value); + void RestartStrip(); +}; + +__generic<T> __magic_type(HLSLLineStreamType) struct TriangleStream +{ + void Append(T value); + void RestartStrip(); +}; )=", R"=( @@ -1203,6 +1217,21 @@ namespace Slang // conversions directly in the stdlib instead... sb << "__generic<U> __init(vector<U," << N << ">);\n"; + // Initialize from two vectors, of size M and N-M + for(int M = 2; M <= (N-2); ++M) + { + int K = N - M; + assert(K >= 2); + + sb << "__init(vector<T," << M << "> " << kVectorNames[M]; + sb << ", vector<T," << K << "> "; + for (int ii = 0; ii < K; ++ii) + { + sb << kComponentNames[ii]; + } + sb << ");\n"; + } + sb << "}\n"; } |
