diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-08-26 15:45:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-26 15:45:28 -0400 |
| commit | 2c4307a9c1a5d1ec92599bb6afe065636ff81df3 (patch) | |
| tree | dda2f66dedfefa5b730a65250edff4a6eec66358 /tools/render-test/cpu-memory-binding.h | |
| parent | 6a0ca6c6a23b8a29320b86be6aec50263f5d7d97 (diff) | |
WIP: CPU sample working with Texture2D (#1033)
* WIP: Memory binding.
* WIP for binding.
* Fix handling of writing to constant buffer.
* Fix bug in handling indices.
Diffstat (limited to 'tools/render-test/cpu-memory-binding.h')
| -rw-r--r-- | tools/render-test/cpu-memory-binding.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/render-test/cpu-memory-binding.h b/tools/render-test/cpu-memory-binding.h new file mode 100644 index 000000000..4ca9091b8 --- /dev/null +++ b/tools/render-test/cpu-memory-binding.h @@ -0,0 +1,62 @@ +#ifndef CPU_MEMORY_BINDING_H +#define CPU_MEMORY_BINDING_H + +#include "core/slang-basic.h" + +#include "core/slang-memory-arena.h" + +namespace renderer_test { + +struct CPUMemoryBinding +{ + struct Buffer + { + Buffer() : m_data(nullptr), m_sizeInBytes(0) {} + uint8_t* m_data; + size_t m_sizeInBytes; + }; + + struct Location + { + bool isValid() const { return m_cur != nullptr; } + bool isInvalid() const { return m_cur == nullptr; } + + Location():m_cur(nullptr) {} + + slang::TypeLayoutReflection* m_typeLayout; + uint8_t* m_cur; + }; + + slang::VariableLayoutReflection* getParameterByName(const char* name); + + Location find(const char* name); + + Location toField(const Location& location, const char* name); + Location toIndex(const Location& location, int index); + + SlangResult setBufferContents(const Location& location, const void* initialData, size_t sizeInBytes); + SlangResult setNewBuffer(const Location& location, const void* initialData, size_t sizeInBytes, Buffer& outBuffer); + SlangResult setObject(const Location& location, void* object); + SlangResult setInplace(const Location& location, const void* data, size_t sizeInBytes); + + SlangResult init(slang::ShaderReflection* reflection); + CPUMemoryBinding(); + + Buffer _allocateBuffer(size_t size); + Buffer _allocateBuffer(size_t size, const void* initialData, size_t initialSize); + + SlangResult _add(slang::VariableLayoutReflection* var, slang::TypeLayoutReflection* type, void* dst, Buffer& outBuffer); + + Slang::MemoryArena m_arena; ///< Storage for buffers + + Buffer m_rootBuffer; + + slang::ShaderReflection* m_reflection; + + // All buffers + Slang::List<Buffer> m_allBuffers; +}; + +} // renderer_test + +#endif //CPU_MEMORY_BINDING_H |
