summaryrefslogtreecommitdiff
path: root/prelude
diff options
context:
space:
mode:
Diffstat (limited to 'prelude')
-rw-r--r--prelude/slang-cpp-types.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/prelude/slang-cpp-types.h b/prelude/slang-cpp-types.h
index 4c6848b9f..f62333f68 100644
--- a/prelude/slang-cpp-types.h
+++ b/prelude/slang-cpp-types.h
@@ -311,6 +311,38 @@ struct Texture1DArray
ITexture1DArray* texture;
};
+struct ITexture2DArray
+{
+ virtual void Load(const int4& v, void* out) = 0;
+ virtual void Sample(SamplerState samplerState, const float3& loc, void* out) = 0;
+ virtual void SampleLevel(SamplerState samplerState, const float3& loc, float level, void* out) = 0;
+};
+
+template <typename T>
+struct Texture2DArray
+{
+ T Load(const int4& v) const { T out; texture->Load(v, &out); return out; }
+ T Sample(SamplerState samplerState, const float3& v) const { T out; texture->Sample(samplerState, v, &out); return out; }
+ T SampleLevel(SamplerState samplerState, const float3& v, float level) { T out; texture->SampleLevel(samplerState, v, level, &out); return out; }
+
+ ITexture2DArray* texture;
+};
+
+struct ITextureCubeArray
+{
+ virtual void Sample(SamplerState samplerState, const float4& loc, void* out) = 0;
+ virtual void SampleLevel(SamplerState samplerState, const float4& loc, float level, void* out) = 0;
+};
+
+template <typename T>
+struct TextureCubeArray
+{
+ T Sample(SamplerState samplerState, const float4& v) const { T out; texture->Sample(samplerState, v, &out); return out; }
+ T SampleLevel(SamplerState samplerState, const float4& v, float level) { T out; texture->SampleLevel(samplerState, v, level, &out); return out; }
+
+ ITextureCubeArray* texture;
+};
+
/* Varying input for Compute */
/* Used when running a single thread */