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 }