diff options
author | dan sinclair <dj2@everburning.com> | 2019-04-24 08:54:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-24 08:54:11 -0400 |
commit | a795d9ced3ce50c952d80289c02bffddf822ff8b (patch) | |
tree | 13d97b3f5e88bfc2aec7c23b63f6011d4a7dc8a1 /src/buffer.cc | |
parent | d4c369f69e52d687c6928407e2e7a73c235202c8 (diff) | |
download | amber-a795d9ced3ce50c952d80289c02bffddf822ff8b.tar.gz |
[amberscript] Add push_constant support. (#486)
This CL adds support for binding push constant buffers into pipelines.
Fixes #480.
Diffstat (limited to 'src/buffer.cc')
-rw-r--r-- | src/buffer.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/buffer.cc b/src/buffer.cc index eaa0163..0495c4c 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -15,6 +15,7 @@ #include "src/buffer.h" #include <cassert> +#include <cstring> namespace amber { namespace { @@ -72,8 +73,8 @@ Result Buffer::CopyTo(Buffer* buffer) const { } Result Buffer::IsEqual(Buffer* buffer) const { - if (buffer->buffer_type_ != buffer_type_) - return Result{"Buffers have a different type"}; + if (!buffer->format_->Equal(format_.get())) + return Result{"Buffers have a different format"}; if (buffer->element_count_ != element_count_) return Result{"Buffers have a different size"}; if (buffer->width_ != width_) @@ -215,4 +216,14 @@ void Buffer::ResizeTo(uint32_t element_count) { bytes_.resize(element_count * format_->SizeInBytes()); } +Result Buffer::SetDataFromBuffer(const Buffer* src, uint32_t offset) { + if (bytes_.size() < offset + src->bytes_.size()) + bytes_.resize(offset + src->bytes_.size()); + + std::memcpy(bytes_.data() + offset, src->bytes_.data(), src->bytes_.size()); + element_count_ = + static_cast<uint32_t>(bytes_.size()) / format_->SizeInBytes(); + return {}; +} + } // namespace amber |