diff options
| author | lucy96chen <47800040+lucy96chen@users.noreply.github.com> | 2022-07-27 15:53:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-27 15:53:36 -0700 |
| commit | ed37dcbc175d07134cb0493f5e379a19e97c82f5 (patch) | |
| tree | 0abd3202401d89e76a979ab7c18569afd63db8a6 /tools/gfx/cpu/cpu-resource-views.h | |
| parent | de0f8cf1be0770b87a117b637943db4ad4e1158b (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.h | 82 |
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 |
