diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-14 16:23:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-14 16:23:19 -0700 |
| commit | 661d6198bbb9857d3fdc6df477e0742ed0b0765c (patch) | |
| tree | 974a57cfa2e43624e91502e9e652a0cc78105b3a /source/slang/hlsl.meta.slang | |
| parent | 0403e0556b470f6b316153caea2dc6f5c314da5b (diff) | |
Support per field matrix layout (#3101)
* Support per field matrix layout
* Fix warnings.
* Fix.
* Fix tests.
* Fix spiv gen.
* Fix.
* More test fixes.
* Fix.
* Run only GPU tests on self-hosted servers.
* Remove -use-glsl-matrix-layout-modifier.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 9de14ad96..015b1c4ad 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -235,19 +235,20 @@ struct StructuredBuffer out uint numStructs, out uint stride); - __target_intrinsic(glsl, "$0._data[$1]") - __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") - [__readNone] + //__target_intrinsic(glsl, "$0._data[$1]") + //__target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") + __intrinsic_op($(kIROp_StructuredBufferLoad)) T Load(int location); - [__readNone] + __intrinsic_op($(kIROp_StructuredBufferLoadStatus)) T Load(int location, out uint status); __subscript(uint index) -> T { - __target_intrinsic(glsl, "$0._data[$1]") - __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") + //__target_intrinsic(glsl, "$0._data[$1]") + //__target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") [__readNone] + __intrinsic_op($(kIROp_StructuredBufferLoad)) get; }; }; @@ -709,7 +710,6 @@ static const struct { for(auto item : kMutableStructuredBufferCases) { }}}} - __generic<T> __magic_type(HLSL$(item.name)Type) __intrinsic_type($(item.op)) @@ -724,18 +724,22 @@ struct $(item.name) uint IncrementCounter(); - __target_intrinsic(glsl, "$0._data[$1]") - __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") + //__target_intrinsic(glsl, "$0._data[$1]") + //__target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;") [__NoSideEffect] + __intrinsic_op($(kIROp_RWStructuredBufferLoad)) T Load(int location); + [__NoSideEffect] + __intrinsic_op($(kIROp_RWStructuredBufferLoadStatus)) T Load(int location, out uint status); __subscript(uint index) -> T { - __target_intrinsic(glsl, "$0._data[$1]") - __target_intrinsic(spirv_direct, "*StorageBuffer OpAccessChain resultType resultId _0 const(int, 0) _1") + //__target_intrinsic(glsl, "$0._data[$1]") + //__target_intrinsic(spirv_direct, "*StorageBuffer OpAccessChain resultType resultId _0 const(int, 0) _1") [__NoSideEffect] + __intrinsic_op($(kIROp_RWStructuredBufferGetElementPtr)) ref; } }; @@ -2248,10 +2252,10 @@ vector<T, N> frexp(vector<T, N> x, out vector<T, N> exp) VECTOR_MAP_BINARY(T, N, frexp, x, exp); } -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : int> __target_intrinsic(hlsl) [__readNone] -matrix<T, N, M> frexp(matrix<T, N, M> x, out matrix<T, N, M> exp) +matrix<T, N, M> frexp(matrix<T, N, M> x, out matrix<T, N, M, L> exp) { MATRIX_MAP_BINARY(T, N, M, frexp, x, exp); } @@ -2924,10 +2928,10 @@ vector<T,N> modf(vector<T,N> x, out vector<T,N> ip) VECTOR_MAP_BINARY(T, N, modf, x, ip); } -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : int> __target_intrinsic(hlsl) [__readNone] -matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M> ip) +matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M,L> ip) { MATRIX_MAP_BINARY(T, N, M, modf, x, ip); } @@ -3664,10 +3668,10 @@ void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c) c = cos(x); } -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L1: int, let L2 : int> __target_intrinsic(hlsl) [__readNone] -void sincos(matrix<T,N,M> x, out matrix<T,N,M> s, out matrix<T,N,M> c) +void sincos(matrix<T,N,M> x, out matrix<T,N,M,L1> s, out matrix<T,N,M,L2> c) { s = sin(x); c = cos(x); |
