summaryrefslogtreecommitdiffstats
path: root/prelude
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-07-03 12:37:17 -0700
committerGitHub <noreply@github.com>2020-07-03 12:37:17 -0700
commitffd0b9c9b06a22d886c77d777d9aa0cd1298d363 (patch)
treef94144c1c8cb5044f630ce839c37eecbe2bce20f /prelude
parentdfc9100bbd451a5752ed543a503e2574d3dcdaa5 (diff)
Emit pointers for CPU target. (#1418)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'prelude')
-rw-r--r--prelude/slang-cpp-scalar-intrinsics.h28
-rw-r--r--prelude/slang-cpp-types.h354
-rw-r--r--prelude/slang-cuda-prelude.h40
3 files changed, 212 insertions, 210 deletions
diff --git a/prelude/slang-cpp-scalar-intrinsics.h b/prelude/slang-cpp-scalar-intrinsics.h
index 07945f1e0..54900c3a3 100644
--- a/prelude/slang-cpp-scalar-intrinsics.h
+++ b/prelude/slang-cpp-scalar-intrinsics.h
@@ -80,16 +80,16 @@ SLANG_FORCE_INLINE float F32_fmod(float a, float b) { return ::fmodf(a, b); }
SLANG_FORCE_INLINE float F32_remainder(float a, float b) { return ::remainderf(a, b); }
SLANG_FORCE_INLINE float F32_atan2(float a, float b) { return float(::atan2(a, b)); }
-SLANG_FORCE_INLINE float F32_frexp(float x, float& e)
+SLANG_FORCE_INLINE float F32_frexp(float x, float* e)
{
int ei;
float m = ::frexpf(x, &ei);
- e = float(ei);
+ *e = float(ei);
return m;
}
-SLANG_FORCE_INLINE float F32_modf(float x, float& ip)
+SLANG_FORCE_INLINE float F32_modf(float x, float* ip)
{
- return ::modff(x, &ip);
+ return ::modff(x, ip);
}
SLANG_FORCE_INLINE uint32_t F32_asuint(float f) { Union32 u; u.f = f; return u.u; }
@@ -147,33 +147,33 @@ SLANG_FORCE_INLINE double F64_fmod(double a, double b) { return ::fmod(a, b); }
SLANG_FORCE_INLINE double F64_remainder(double a, double b) { return ::remainder(a, b); }
SLANG_FORCE_INLINE double F64_atan2(double a, double b) { return ::atan2(a, b); }
-SLANG_FORCE_INLINE double F64_frexp(double x, double& e)
+SLANG_FORCE_INLINE double F64_frexp(double x, double* e)
{
int ei;
double m = ::frexp(x, &ei);
- e = float(ei);
+ *e = float(ei);
return m;
}
-SLANG_FORCE_INLINE double F64_modf(double x, double& ip)
+SLANG_FORCE_INLINE double F64_modf(double x, double* ip)
{
- return ::modf(x, &ip);
+ return ::modf(x, ip);
}
-SLANG_FORCE_INLINE void F64_asuint(double d, uint32_t& low, uint32_t& hi)
+SLANG_FORCE_INLINE void F64_asuint(double d, uint32_t* low, uint32_t* hi)
{
Union64 u;
u.d = d;
- low = uint32_t(u.u);
- hi = uint32_t(u.u >> 32);
+ *low = uint32_t(u.u);
+ *hi = uint32_t(u.u >> 32);
}
-SLANG_FORCE_INLINE void F64_asint(double d, int32_t& low, int32_t& hi)
+SLANG_FORCE_INLINE void F64_asint(double d, int32_t* low, int32_t* hi)
{
Union64 u;
u.d = d;
- low = int32_t(u.u);
- hi = int32_t(u.u >> 32);
+ *low = int32_t(u.u);
+ *hi = int32_t(u.u >> 32);
}
// Ternary
diff --git a/prelude/slang-cpp-types.h b/prelude/slang-cpp-types.h
index 7e951fd63..3bff1873f 100644
--- a/prelude/slang-cpp-types.h
+++ b/prelude/slang-cpp-types.h
@@ -20,7 +20,7 @@ struct FixedArray
{
const T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < SIZE); return m_data[index]; }
T& operator[](size_t index) { SLANG_PRELUDE_ASSERT(index < SIZE); return m_data[index]; }
-
+
T m_data[SIZE];
};
@@ -31,7 +31,7 @@ struct Array
{
const T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
T& operator[](size_t index) { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
-
+
T* data;
size_t count;
};
@@ -99,7 +99,7 @@ struct RWStructuredBuffer
{
SLANG_FORCE_INLINE T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
const T& Load(size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
- void GetDimensions(uint32_t& outNumStructs, uint32_t& outStride) { outNumStructs = uint32_t(count); outStride = uint32_t(sizeof(T)); }
+ void GetDimensions(uint32_t* outNumStructs, uint32_t* outStride) { *outNumStructs = uint32_t(count); *outStride = uint32_t(sizeof(T)); }
T* data;
size_t count;
@@ -110,7 +110,7 @@ struct StructuredBuffer
{
SLANG_FORCE_INLINE const T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
const T& Load(size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
- void GetDimensions(uint32_t& outNumStructs, uint32_t& outStride) { outNumStructs = uint32_t(count); outStride = uint32_t(sizeof(T)); }
+ void GetDimensions(uint32_t* outNumStructs, uint32_t* outStride) { *outNumStructs = uint32_t(count); *outStride = uint32_t(sizeof(T)); }
T* data;
size_t count;
@@ -122,7 +122,7 @@ struct RWBuffer
{
SLANG_FORCE_INLINE T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
const T& Load(size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
- void GetDimensions(uint32_t& outCount) { outCount = uint32_t(count); }
+ void GetDimensions(uint32_t* outCount) { *outCount = uint32_t(count); }
T* data;
size_t count;
@@ -133,7 +133,7 @@ struct Buffer
{
SLANG_FORCE_INLINE const T& operator[](size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
const T& Load(size_t index) const { SLANG_PRELUDE_ASSERT(index < count); return data[index]; }
- void GetDimensions(uint32_t& outCount) { outCount = uint32_t(count); }
+ void GetDimensions(uint32_t* outCount) { *outCount = uint32_t(count); }
T* data;
size_t count;
@@ -142,7 +142,7 @@ struct Buffer
// Missing Load(_In_ int Location, _Out_ uint Status);
struct ByteAddressBuffer
{
- void GetDimensions(uint32_t& outDim) const { outDim = uint32_t(sizeInBytes); }
+ void GetDimensions(uint32_t* outDim) const { *outDim = uint32_t(sizeInBytes); }
uint32_t Load(size_t index) const
{
SLANG_PRELUDE_ASSERT(index + 4 <= sizeInBytes && (index & 3) == 0);
@@ -182,7 +182,7 @@ struct ByteAddressBuffer
// Missing support for Load with status
struct RWByteAddressBuffer
{
- void GetDimensions(uint32_t& outDim) const { outDim = uint32_t(sizeInBytes); }
+ void GetDimensions(uint32_t* outDim) const { *outDim = uint32_t(sizeInBytes); }
uint32_t Load(size_t index) const
{
@@ -385,20 +385,20 @@ struct ITexture
template <typename T>
struct Texture1D
{
- void GetDimensions(uint32_t& outWidth) { outWidth = texture->GetDimensions().width; }
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t* outWidth) { *outWidth = texture->GetDimensions().width; }
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth) { outWidth = texture->GetDimensions().width; }
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outNumberOfLevels)
+ void GetDimensions(float* outWidth) { *outWidth = texture->GetDimensions().width; }
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int2& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -411,31 +411,31 @@ struct Texture1D
template <typename T>
struct Texture2D
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight)
+ void GetDimensions(float* outWidth, float* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int3& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -448,35 +448,35 @@ struct Texture2D
template <typename T>
struct Texture3D
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight, uint32_t& outDepth)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight, uint32_t* outDepth)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outDepth, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outDepth, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight, float& outDepth)
+ void GetDimensions(float* outWidth, float* outHeight, float* outDepth)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outDepth, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outDepth, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int4& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -489,31 +489,31 @@ struct Texture3D
template <typename T>
struct TextureCube
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight)
+ void GetDimensions(float* outWidth, float* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Sample(SamplerState samplerState, const float3& loc) const { T out; texture->Sample(samplerState, &loc.x, &out); return out; }
@@ -525,21 +525,21 @@ struct TextureCube
template <typename T>
struct Texture1DArray
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outElements) { auto dims = texture->GetDimensions(); outWidth = dims.width; outElements = dims.arrayElementCount; }
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outElements, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outElements) { auto dims = texture->GetDimensions(); *outWidth = dims.width; *outElements = dims.arrayElementCount; }
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outElements, uint32_t* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outNumberOfLevels = dims.numberOfLevels;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outNumberOfLevels = dims.numberOfLevels;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(float& outWidth, float& outElements) { auto dims = texture->GetDimensions(); outWidth = dims.width; outElements = dims.arrayElementCount; }
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outElements, float& outNumberOfLevels)
+ void GetDimensions(float* outWidth, float* outElements) { auto dims = texture->GetDimensions(); *outWidth = dims.width; *outElements = dims.arrayElementCount; }
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outElements, float* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outNumberOfLevels = dims.numberOfLevels;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outNumberOfLevels = dims.numberOfLevels;
+ *outElements = dims.arrayElementCount;
}
T Load(const int3& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -552,36 +552,36 @@ struct Texture1DArray
template <typename T>
struct Texture2DArray
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements, uint32_t* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(uint32_t& outWidth, float& outHeight, float& outElements)
+ void GetDimensions(uint32_t* outWidth, float* outHeight, float* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outElements, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outElements, float* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int4& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -594,36 +594,36 @@ struct Texture2DArray
template <typename T>
struct TextureCubeArray
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements, uint32_t* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(uint32_t& outWidth, float& outHeight, float& outElements)
+ void GetDimensions(uint32_t* outWidth, float* outHeight, float* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outElements, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outElements, float* outNumberOfLevels)
{
auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Sample(SamplerState samplerState, const float4& loc) const { T out; texture->Sample(samplerState, &loc.x, &out); return out; }
@@ -647,11 +647,11 @@ struct IRWTexture
template <typename T>
struct RWTexture1D
{
- void GetDimensions(uint32_t& outWidth) { outWidth = texture->GetDimensions().width; }
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outNumberOfLevels) { auto dims = texture->GetDimensions(mipLevel); outWidth = dims.width; outNumberOfLevels = dims.numberOfLevels; }
+ void GetDimensions(uint32_t* outWidth) { *outWidth = texture->GetDimensions().width; }
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outNumberOfLevels) { auto dims = texture->GetDimensions(mipLevel); *outWidth = dims.width; *outNumberOfLevels = dims.numberOfLevels; }
- void GetDimensions(float& outWidth) { outWidth = texture->GetDimensions().width; }
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outNumberOfLevels) { auto dims = texture->GetDimensions(mipLevel); outWidth = dims.width; outNumberOfLevels = dims.numberOfLevels; }
+ void GetDimensions(float* outWidth) { *outWidth = texture->GetDimensions().width; }
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outNumberOfLevels) { auto dims = texture->GetDimensions(mipLevel); *outWidth = dims.width; *outNumberOfLevels = dims.numberOfLevels; }
T Load(int32_t loc) const { T out; texture->Load(&loc, &out); return out; }
T& operator[](uint32_t loc) { return *(T*)texture->refAt(&loc); }
@@ -661,31 +661,31 @@ struct RWTexture1D
template <typename T>
struct RWTexture2D
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight)
+ void GetDimensions(float* outWidth, float* outHeight)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int2& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -696,35 +696,35 @@ struct RWTexture2D
template <typename T>
struct RWTexture3D
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight, uint32_t& outDepth)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight, uint32_t* outDepth)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outDepth, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outDepth, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight, float& outDepth)
+ void GetDimensions(float* outWidth, float* outHeight, float* outDepth)
{
const auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outDepth, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outDepth, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outDepth = dims.depth;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outDepth = dims.depth;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int3& loc) const { T out; texture->Load(&loc.x, &out); return out; }
@@ -736,74 +736,76 @@ struct RWTexture3D
template <typename T>
struct RWTexture1DArray
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outElements)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outElements, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outElements, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outElements)
+ void GetDimensions(float* outWidth, float* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outElements, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outElements, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(int2 loc) const { T out; texture->Load(&loc.x, &out); return out; }
T& operator[](uint2 loc) { return *(T*)texture->refAt(&loc.x); }
+
IRWTexture* texture;
};
template <typename T>
struct RWTexture2DArray
{
- void GetDimensions(uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements)
+ void GetDimensions(uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, uint32_t& outWidth, uint32_t& outHeight, uint32_t& outElements, uint32_t& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outElements, uint32_t* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
- void GetDimensions(float& outWidth, float& outHeight, float& outElements)
+ void GetDimensions(float* outWidth, float* outHeight, float* outElements)
{
auto dims = texture->GetDimensions();
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
}
- void GetDimensions(uint32_t mipLevel, float& outWidth, float& outHeight, float& outElements, float& outNumberOfLevels)
+ void GetDimensions(uint32_t mipLevel, float* outWidth, float* outHeight, float* outElements, float* outNumberOfLevels)
{
const auto dims = texture->GetDimensions(mipLevel);
- outWidth = dims.width;
- outHeight = dims.height;
- outElements = dims.arrayElementCount;
- outNumberOfLevels = dims.numberOfLevels;
+ *outWidth = dims.width;
+ *outHeight = dims.height;
+ *outElements = dims.arrayElementCount;
+ *outNumberOfLevels = dims.numberOfLevels;
}
T Load(const int3& loc) const { T out; texture->Load(&loc.x, &out); return out; }
T& operator[](const uint3& loc) { return *(T*)texture->refAt(&loc.x); }
+
IRWTexture* texture;
};
diff --git a/prelude/slang-cuda-prelude.h b/prelude/slang-cuda-prelude.h
index eb676f03b..d0516b986 100644
--- a/prelude/slang-cuda-prelude.h
+++ b/prelude/slang-cuda-prelude.h
@@ -140,7 +140,7 @@ SLANG_CUDA_CALL float F32_floor(float f) { return ::floorf(f); }
SLANG_CUDA_CALL float F32_round(float f) { return ::roundf(f); }
SLANG_CUDA_CALL float F32_sin(float f) { return ::sinf(f); }
SLANG_CUDA_CALL float F32_cos(float f) { return ::cosf(f); }
-SLANG_CUDA_CALL void F32_sincos(float f, float& s, float& c) { ::sincosf(f, &s, &c); }
+SLANG_CUDA_CALL void F32_sincos(float f, float* s, float* c) { ::sincosf(f, s, c); }
SLANG_CUDA_CALL float F32_tan(float f) { return ::tanf(f); }
SLANG_CUDA_CALL float F32_asin(float f) { return ::asinf(f); }
SLANG_CUDA_CALL float F32_acos(float f) { return ::acosf(f); }
@@ -172,16 +172,16 @@ SLANG_CUDA_CALL float F32_fmod(float a, float b) { return ::fmodf(a, b); }
SLANG_CUDA_CALL float F32_remainder(float a, float b) { return ::remainderf(a, b); }
SLANG_CUDA_CALL float F32_atan2(float a, float b) { return float(::atan2(a, b)); }
-SLANG_CUDA_CALL float F32_frexp(float x, float& e)
+SLANG_CUDA_CALL float F32_frexp(float x, float* e)
{
int ei;
float m = ::frexpf(x, &ei);
- e = ei;
+ *e = ei;
return m;
}
-SLANG_CUDA_CALL float F32_modf(float x, float& ip)
+SLANG_CUDA_CALL float F32_modf(float x, float* ip)
{
- return ::modff(x, &ip);
+ return ::modff(x, ip);
}
SLANG_CUDA_CALL uint32_t F32_asuint(float f) { Union32 u; u.f = f; return u.u; }
@@ -199,7 +199,7 @@ SLANG_CUDA_CALL double F64_floor(double f) { return ::floor(f); }
SLANG_CUDA_CALL double F64_round(double f) { return ::round(f); }
SLANG_CUDA_CALL double F64_sin(double f) { return ::sin(f); }
SLANG_CUDA_CALL double F64_cos(double f) { return ::cos(f); }
-SLANG_CUDA_CALL void F64_sincos(double f, double& s, double& c) { ::sincos(f, &s, &c); }
+SLANG_CUDA_CALL void F64_sincos(double f, double* s, double* c) { ::sincos(f, s, c); }
SLANG_CUDA_CALL double F64_tan(double f) { return ::tan(f); }
SLANG_CUDA_CALL double F64_asin(double f) { return ::asin(f); }
SLANG_CUDA_CALL double F64_acos(double f) { return ::acos(f); }
@@ -231,32 +231,32 @@ SLANG_CUDA_CALL double F64_fmod(double a, double b) { return ::fmod(a, b); }
SLANG_CUDA_CALL double F64_remainder(double a, double b) { return ::remainder(a, b); }
SLANG_CUDA_CALL double F64_atan2(double a, double b) { return ::atan2(a, b); }
-SLANG_CUDA_CALL double F64_frexp(double x, double& e)
+SLANG_CUDA_CALL double F64_frexp(double x, double* e)
{
int ei;
double m = ::frexp(x, &ei);
- e = ei;
+ *e = ei;
return m;
}
-SLANG_CUDA_CALL double F64_modf(double x, double& ip)
+SLANG_CUDA_CALL double F64_modf(double x, double* ip)
{
- return ::modf(x, &ip);
+ return ::modf(x, ip);
}
-SLANG_CUDA_CALL void F64_asuint(double d, uint32_t& low, uint32_t& hi)
+SLANG_CUDA_CALL void F64_asuint(double d, uint32_t* low, uint32_t* hi)
{
Union64 u;
u.d = d;
- low = uint32_t(u.u);
- hi = uint32_t(u.u >> 32);
+ *low = uint32_t(u.u);
+ *hi = uint32_t(u.u >> 32);
}
-SLANG_CUDA_CALL void F64_asint(double d, int32_t& low, int32_t& hi)
+SLANG_CUDA_CALL void F64_asint(double d, int32_t* low, int32_t* hi)
{
Union64 u;
u.d = d;
- low = int32_t(u.u);
- hi = int32_t(u.u >> 32);
+ *low = int32_t(u.u);
+ *hi = int32_t(u.u >> 32);
}
// Ternary
@@ -338,7 +338,7 @@ struct RWStructuredBuffer
{
SLANG_CUDA_CALL T& operator[](size_t index) const { SLANG_CUDA_BOUND_CHECK(index, count); return data[index]; }
SLANG_CUDA_CALL const T& Load(size_t index) const { SLANG_CUDA_BOUND_CHECK(index, count); return data[index]; }
- SLANG_CUDA_CALL void GetDimensions(uint32_t& outNumStructs, uint32_t& outStride) { outNumStructs = uint32_t(count); outStride = uint32_t(sizeof(T)); }
+ SLANG_CUDA_CALL void GetDimensions(uint32_t* outNumStructs, uint32_t* outStride) { *outNumStructs = uint32_t(count); *outStride = uint32_t(sizeof(T)); }
T* data;
size_t count;
@@ -349,7 +349,7 @@ struct StructuredBuffer
{
SLANG_CUDA_CALL const T& operator[](size_t index) const { SLANG_CUDA_BOUND_CHECK(index, count); return data[index]; }
SLANG_CUDA_CALL const T& Load(size_t index) const { SLANG_CUDA_BOUND_CHECK(index, count); return data[index]; }
- SLANG_CUDA_CALL void GetDimensions(uint32_t& outNumStructs, uint32_t& outStride) { outNumStructs = uint32_t(count); outStride = uint32_t(sizeof(T)); }
+ SLANG_CUDA_CALL void GetDimensions(uint32_t* outNumStructs, uint32_t* outStride) { *outNumStructs = uint32_t(count); *outStride = uint32_t(sizeof(T)); }
T* data;
size_t count;
@@ -359,7 +359,7 @@ struct StructuredBuffer
// Missing Load(_In_ int Location, _Out_ uint Status);
struct ByteAddressBuffer
{
- SLANG_CUDA_CALL void GetDimensions(uint32_t& outDim) const { outDim = uint32_t(sizeInBytes); }
+ SLANG_CUDA_CALL void GetDimensions(uint32_t* outDim) const { *outDim = uint32_t(sizeInBytes); }
SLANG_CUDA_CALL uint32_t Load(size_t index) const
{
SLANG_CUDA_BYTE_ADDRESS_BOUND_CHECK(index, 4, sizeInBytes);
@@ -399,7 +399,7 @@ struct ByteAddressBuffer
// Missing support for Load with status
struct RWByteAddressBuffer
{
- SLANG_CUDA_CALL void GetDimensions(uint32_t& outDim) const { outDim = uint32_t(sizeInBytes); }
+ SLANG_CUDA_CALL void GetDimensions(uint32_t* outDim) const { *outDim = uint32_t(sizeInBytes); }
SLANG_CUDA_CALL uint32_t Load(size_t index) const
{