From 2c4307a9c1a5d1ec92599bb6afe065636ff81df3 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Mon, 26 Aug 2019 15:45:28 -0400 Subject: 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. --- tools/render-test/cpu-memory-binding.h | 62 ++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tools/render-test/cpu-memory-binding.h (limited to 'tools/render-test/cpu-memory-binding.h') 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 m_allBuffers; +}; + +} // renderer_test + +#endif //CPU_MEMORY_BINDING_H -- cgit v1.2.3