summaryrefslogtreecommitdiff
path: root/tools/gfx/cpu/cpu-resource-views.h
diff options
context:
space:
mode:
authorlucy96chen <47800040+lucy96chen@users.noreply.github.com>2022-07-27 15:53:36 -0700
committerGitHub <noreply@github.com>2022-07-27 15:53:36 -0700
commited37dcbc175d07134cb0493f5e379a19e97c82f5 (patch)
tree0abd3202401d89e76a979ab7c18569afd63db8a6 /tools/gfx/cpu/cpu-resource-views.h
parentde0f8cf1be0770b87a117b637943db4ad4e1158b (diff)
Split render-cpu into smaller files (#2340)
* render-cpu split, does not compile * split finished, one compile error * added missing include and missing destructor implementation * Rerun TeamCity CI
Diffstat (limited to 'tools/gfx/cpu/cpu-resource-views.h')
-rw-r--r--tools/gfx/cpu/cpu-resource-views.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/tools/gfx/cpu/cpu-resource-views.h b/tools/gfx/cpu/cpu-resource-views.h
new file mode 100644
index 000000000..bec1339a3
--- /dev/null
+++ b/tools/gfx/cpu/cpu-resource-views.h
@@ -0,0 +1,82 @@
+// cpu-resource-views.h
+#pragma once
+#include "cpu-base.h"
+
+#include "cpu-buffer.h"
+#include "cpu-texture.h"
+
+namespace gfx
+{
+using namespace Slang;
+
+namespace cpu
+{
+
+class ResourceViewImpl : public ResourceViewBase
+{
+public:
+ enum class Kind
+ {
+ Buffer,
+ Texture,
+ };
+ Kind getViewKind() const { return m_kind; }
+ Desc const& getDesc() const { return m_desc; }
+
+protected:
+ ResourceViewImpl(Kind kind, Desc const& desc);
+
+private:
+ Kind m_kind;
+};
+
+class BufferResourceViewImpl : public ResourceViewImpl
+{
+public:
+ BufferResourceViewImpl(Desc const& desc, BufferResourceImpl* buffer)
+ : ResourceViewImpl(Kind::Buffer, desc)
+ , m_buffer(buffer)
+ {}
+
+ BufferResourceImpl* getBuffer() const;
+
+private:
+ RefPtr<BufferResourceImpl> m_buffer;
+};
+
+class TextureResourceViewImpl : public ResourceViewImpl, public slang_prelude::IRWTexture
+{
+public:
+ TextureResourceViewImpl(Desc const& desc, TextureResourceImpl* texture)
+ : ResourceViewImpl(Kind::Texture, desc)
+ , m_texture(texture)
+ {}
+
+ TextureResourceImpl* getTexture() const;
+
+ //
+ // ITexture interface
+ //
+
+ slang_prelude::TextureDimensions GetDimensions(int mipLevel = -1) SLANG_OVERRIDE;
+
+ void Load(const int32_t* texelCoords, void* outData, size_t dataSize) SLANG_OVERRIDE;
+
+ void Sample(slang_prelude::SamplerState samplerState, const float* coords, void* outData, size_t dataSize) SLANG_OVERRIDE;
+
+ void SampleLevel(slang_prelude::SamplerState samplerState, const float* coords, float level, void* outData, size_t dataSize) SLANG_OVERRIDE;
+
+ //
+ // IRWTexture interface
+ //
+
+ void* refAt(const uint32_t* texelCoords) SLANG_OVERRIDE;
+
+private:
+ RefPtr<TextureResourceImpl> m_texture;
+
+ void* _getTexelPtr(int32_t const* texelCoords);
+};
+
+} // namespace cpu
+} // namespace gfx