diff options
-rw-r--r-- | video.cpp | 38 | ||||
-rw-r--r-- | video.hpp | 17 |
2 files changed, 55 insertions, 0 deletions
@@ -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); +} @@ -492,4 +492,21 @@ struct Shader : public Asset { int descriptor_stage(int slot); }; +struct Staged_Buffer { + Buffer_Id stage; + Buffer_Id gpuonly; + int size; + + void init( + Device* dev, + const char* name, + int size, + int flags + ); + void destroy(Device* dev); + void* map(Device* dev); + void unmap(Device* dev); + void update(Context& ctx); +}; + #endif |