aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.cc
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-04-24 08:54:11 -0400
committerGitHub <noreply@github.com>2019-04-24 08:54:11 -0400
commita795d9ced3ce50c952d80289c02bffddf822ff8b (patch)
tree13d97b3f5e88bfc2aec7c23b63f6011d4a7dc8a1 /src/buffer.cc
parentd4c369f69e52d687c6928407e2e7a73c235202c8 (diff)
downloadamber-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.cc15
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