diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-02-20 10:34:58 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-20 10:34:58 -0500 |
| commit | dcc3af7bf4fdfb6926db039506137be0e16ae3bd (patch) | |
| tree | d11c051624952fb3ef7614338a9b617e1bf059f4 /prelude/slang-cpp-types.h | |
| parent | 788556aaaab1b5767e24cf86dc2f71fd285c06f5 (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/slang-cpp-types.h')
| -rw-r--r-- | prelude/slang-cpp-types.h | 32 |
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 */ |
