From 5148c594c19da9466b151ab3b6b11441f265823e Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Tue, 20 Jun 2017 14:38:50 -0700 Subject: HLSL/Slang standard library additions - Vector constructors that take two vectors that add up to the target size (`float4(float2, float2)`) - I now realize I implemented the general case here, but there really is only the one case... - Geometry shader output stream types now have `Append()` and `RestartStrip()` methods --- source/slang/slang-stdlib.cpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'source') 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 __magic_type(HLSLRWStructuredBufferType) struct RWStructuredBuffer __intrinsic __subscript(uint index) -> T { get; set; } }; -__generic __magic_type(HLSLPointStreamType) struct PointStream {}; -__generic __magic_type(HLSLLineStreamType) struct LineStream {}; -__generic __magic_type(HLSLLineStreamType) struct TriangleStream {}; +__generic __magic_type(HLSLPointStreamType) struct PointStream +{ + void Append(T value); + void RestartStrip(); +}; + +__generic __magic_type(HLSLLineStreamType) struct LineStream +{ + void Append(T value); + void RestartStrip(); +}; + +__generic __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 __init(vector);\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 " << kVectorNames[M]; + sb << ", vector "; + for (int ii = 0; ii < K; ++ii) + { + sb << kComponentNames[ii]; + } + sb << ");\n"; + } + sb << "}\n"; } -- cgit v1.2.3