summaryrefslogtreecommitdiffstats
path: root/tools/render-test/cpu-compute-util.cpp
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 /tools/render-test/cpu-compute-util.cpp
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 'tools/render-test/cpu-compute-util.cpp')
-rw-r--r--tools/render-test/cpu-compute-util.cpp90
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;
}