1 /// GrAAL buffer module 2 module gfx.graal.buffer; 3 4 import gfx.core.rc; 5 import gfx.graal.format; 6 import gfx.graal.memory; 7 8 enum BufferUsage 9 { 10 transferSrc = 0x0001, 11 transferDst = 0x0002, 12 uniformTexel = 0x0004, 13 storageTexel = 0x0008, 14 uniform = 0x0010, 15 storage = 0x0020, 16 index = 0x0040, 17 vertex = 0x0080, 18 indirect = 0x0100, 19 } 20 21 enum IndexType { 22 u16, u32 23 } 24 25 interface Buffer : AtomicRefCounted 26 { 27 import gfx.graal.device : Device; 28 29 /// Get the parent device 30 @property Device device(); 31 32 @property size_t size(); 33 @property BufferUsage usage(); 34 @property MemoryRequirements memoryRequirements(); 35 /// The buffer keeps a reference to the device memory 36 void bindMemory(DeviceMemory mem, in size_t offset) 37 in { 38 assert(mem); 39 assert(!boundMemory); 40 } 41 out { 42 assert(boundMemory); 43 } 44 45 @property DeviceMemory boundMemory(); 46 47 BufferView createView(Format format, size_t offset, size_t size); 48 } 49 50 interface BufferView : AtomicRefCounted 51 { 52 @property Format format(); 53 @property Buffer buffer(); 54 @property size_t offset(); 55 @property size_t size(); 56 }