summaryrefslogtreecommitdiffstats
path: root/tools/render-test/cpu-memory-binding.h
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2019-08-26 15:45:28 -0400
committerGitHub <noreply@github.com>2019-08-26 15:45:28 -0400
commit2c4307a9c1a5d1ec92599bb6afe065636ff81df3 (patch)
treedda2f66dedfefa5b730a65250edff4a6eec66358 /tools/render-test/cpu-memory-binding.h
parent6a0ca6c6a23b8a29320b86be6aec50263f5d7d97 (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.h62
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