summaryrefslogtreecommitdiffstats
path: root/prelude
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-02-20 10:34:58 -0500
committerGitHub <noreply@github.com>2020-02-20 10:34:58 -0500
commitdcc3af7bf4fdfb6926db039506137be0e16ae3bd (patch)
treed11c051624952fb3ef7614338a9b617e1bf059f4 /prelude
parent788556aaaab1b5767e24cf86dc2f71fd285c06f5 (diff)
CUDA/CPU support for 1D, 2D, CubeArray (#1232)
* CUDA support for array of resources. * * Add support for Texture2DArray on CPU * Expand texture-simple.slang to test Texture2DArray * Reorganise CUDAComputeUtil to split out createTextureResource. * Add TextureCubeArray support for CPU/CUDA targets.
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 */