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 /tools/render-test/cpu-compute-util.cpp | |
| 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 'tools/render-test/cpu-compute-util.cpp')
| -rw-r--r-- | tools/render-test/cpu-compute-util.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tools/render-test/cpu-compute-util.cpp b/tools/render-test/cpu-compute-util.cpp index 7be1a6c88..608da9461 100644 --- a/tools/render-test/cpu-compute-util.cpp +++ b/tools/render-test/cpu-compute-util.cpp @@ -182,6 +182,71 @@ struct ValueTexture1DArray : public CPUComputeUtil::Resource, public CPPPrelude: float m_value; }; +template <int COUNT> +struct ValueTexture2DArray : public CPUComputeUtil::Resource, public CPPPrelude::ITexture2DArray +{ + void set(void* out) + { + float* dst = (float*)out; + for (int i = 0; i < COUNT; ++i) + { + dst[i] = m_value; + } + } + + virtual void Load(const CPPPrelude::int4& v, void* out) SLANG_OVERRIDE + { + set(out); + } + virtual void Sample(CPPPrelude::SamplerState samplerState, const CPPPrelude::float3& loc, void* out) SLANG_OVERRIDE + { + set(out); + } + virtual void SampleLevel(CPPPrelude::SamplerState samplerState, const CPPPrelude::float3& loc, float level, void* out) SLANG_OVERRIDE + { + set(out); + } + + ValueTexture2DArray(float value) : + m_value(value) + { + m_interface = static_cast<CPPPrelude::ITexture2DArray*>(this); + } + + float m_value; +}; + + +template <int COUNT> +struct ValueTextureCubeArray : public CPUComputeUtil::Resource, public CPPPrelude::ITextureCubeArray +{ + void set(void* out) + { + float* dst = (float*)out; + for (int i = 0; i < COUNT; ++i) + { + dst[i] = m_value; + } + } + + virtual void Sample(CPPPrelude::SamplerState samplerState, const CPPPrelude::float4& loc, void* out) SLANG_OVERRIDE + { + set(out); + } + virtual void SampleLevel(CPPPrelude::SamplerState samplerState, const CPPPrelude::float4& loc, float level, void* out) SLANG_OVERRIDE + { + set(out); + } + + ValueTextureCubeArray(float value) : + m_value(value) + { + m_interface = static_cast<CPPPrelude::ITextureCubeArray*>(this); + } + + float m_value; +}; + static CPUComputeUtil::Resource* _newValueTexture(SlangResourceShape shape, int elemCount, float value) { switch (shape) @@ -243,6 +308,31 @@ static CPUComputeUtil::Resource* _newValueTexture(SlangResourceShape shape, int } break; } + case SLANG_TEXTURE_2D_ARRAY: + { + switch (elemCount) + { + case 1: return new ValueTexture2DArray<1>(value); + case 2: return new ValueTexture2DArray<2>(value); + case 3: return new ValueTexture2DArray<3>(value); + case 4: return new ValueTexture2DArray<4>(value); + default: break; + } + break; + } + case SLANG_TEXTURE_CUBE_ARRAY: + { + switch (elemCount) + { + case 1: return new ValueTextureCubeArray<1>(value); + case 2: return new ValueTextureCubeArray<2>(value); + case 3: return new ValueTextureCubeArray<3>(value); + case 4: return new ValueTextureCubeArray<4>(value); + default: break; + } + break; + } + default: break; } |
