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 |