summaryrefslogtreecommitdiff
path: root/video.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'video.cpp')
-rw-r--r--video.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/video.cpp b/video.cpp
index 09261b5..d5efb34 100644
--- a/video.cpp
+++ b/video.cpp
@@ -3900,3 +3900,41 @@ Vram_Allocator::Allocation Vram_Allocator::alloc(
void Vram_Allocator::free(Allocation& alloc) {
alloc.chunk->free = true;
}
+
+void Staged_Buffer::init(
+ Device* dev,
+ const char* name,
+ int s,
+ int flags
+) {
+ size = s;
+ stage = dev->create_buffer(
+ name,
+ size,
+ Buffer_Flags::copy_src |
+ Buffer_Flags::cpu_readwrite
+ );
+ gpuonly = dev->create_buffer(
+ name,
+ size,
+ Buffer_Flags::copy_dst |
+ flags
+ );
+}
+
+void Staged_Buffer::destroy(Device* dev) {
+ dev->destroy_buffer(stage);
+ dev->destroy_buffer(gpuonly);
+}
+
+void* Staged_Buffer::map(Device* dev) {
+ return dev->map_buffer(stage, 0, size);
+}
+
+void Staged_Buffer::unmap(Device* dev) {
+ dev->unmap_buffer(stage);
+}
+
+void Staged_Buffer::update(Context& ctx) {
+ ctx.copy(gpuonly, stage);
+}