| 94 | } |
| 95 | |
| 96 | void create_resources() |
| 97 | { |
| 98 | // upload |
| 99 | CGPUBufferDescriptor upload_buffer_desc = {}; |
| 100 | upload_buffer_desc.name = u8"UploadBuffer"; |
| 101 | upload_buffer_desc.flags = CGPU_BCF_PERSISTENT_MAP_BIT; |
| 102 | upload_buffer_desc.descriptors = CGPU_RESOURCE_TYPE_NONE; |
| 103 | upload_buffer_desc.memory_usage = CGPU_MEM_USAGE_CPU_ONLY; |
| 104 | upload_buffer_desc.size = sizeof(CubeGeometry) + sizeof(CubeGeometry::g_Indices) + sizeof(CubeGeometry::InstanceData); |
| 105 | auto upload_buffer = cgpu_create_buffer(device, &upload_buffer_desc); |
| 106 | CGPUBufferDescriptor vb_desc = {}; |
| 107 | vb_desc.name = u8"VertexBuffer"; |
| 108 | vb_desc.flags = CGPU_BCF_NONE; |
| 109 | vb_desc.descriptors = CGPU_RESOURCE_TYPE_VERTEX_BUFFER; |
| 110 | vb_desc.memory_usage = CGPU_MEM_USAGE_GPU_ONLY; |
| 111 | vb_desc.size = sizeof(CubeGeometry); |
| 112 | vertex_buffer = cgpu_create_buffer(device, &vb_desc); |
| 113 | CGPUBufferDescriptor ib_desc = {}; |
| 114 | ib_desc.name = u8"IndexBuffer"; |
| 115 | ib_desc.flags = CGPU_BCF_NONE; |
| 116 | ib_desc.descriptors = CGPU_RESOURCE_TYPE_INDEX_BUFFER; |
| 117 | ib_desc.memory_usage = CGPU_MEM_USAGE_GPU_ONLY; |
| 118 | ib_desc.size = sizeof(CubeGeometry::g_Indices); |
| 119 | index_buffer = cgpu_create_buffer(device, &ib_desc); |
| 120 | CGPUBufferDescriptor inb_desc = {}; |
| 121 | inb_desc.name = u8"InstanceBuffer"; |
| 122 | inb_desc.flags = CGPU_BCF_NONE; |
| 123 | inb_desc.descriptors = CGPU_RESOURCE_TYPE_VERTEX_BUFFER; |
| 124 | inb_desc.memory_usage = CGPU_MEM_USAGE_GPU_ONLY; |
| 125 | inb_desc.size = sizeof(CubeGeometry::InstanceData); |
| 126 | instance_buffer = cgpu_create_buffer(device, &inb_desc); |
| 127 | auto pool_desc = CGPUCommandPoolDescriptor(); |
| 128 | auto cmd_pool = cgpu_create_command_pool(gfx_queue, &pool_desc); |
| 129 | auto cmd_desc = CGPUCommandBufferDescriptor(); |
| 130 | auto cpy_cmd = cgpu_create_command_buffer(cmd_pool, &cmd_desc); |
| 131 | { |
| 132 | auto geom = CubeGeometry(); |
| 133 | memcpy(upload_buffer->info->cpu_mapped_address, &geom, upload_buffer_desc.size); |
| 134 | } |
| 135 | cgpu_cmd_begin(cpy_cmd); |
| 136 | CGPUBufferToBufferTransfer vb_cpy = {}; |
| 137 | vb_cpy.dst = vertex_buffer; |
| 138 | vb_cpy.dst_offset = 0; |
| 139 | vb_cpy.src = upload_buffer; |
| 140 | vb_cpy.src_offset = 0; |
| 141 | vb_cpy.size = sizeof(CubeGeometry); |
| 142 | cgpu_cmd_transfer_buffer_to_buffer(cpy_cmd, &vb_cpy); |
| 143 | { |
| 144 | memcpy((char8_t*)upload_buffer->info->cpu_mapped_address + sizeof(CubeGeometry), |
| 145 | CubeGeometry::g_Indices, sizeof(CubeGeometry::g_Indices)); |
| 146 | } |
| 147 | CGPUBufferToBufferTransfer ib_cpy = {}; |
| 148 | ib_cpy.dst = index_buffer; |
| 149 | ib_cpy.dst_offset = 0; |
| 150 | ib_cpy.src = upload_buffer; |
| 151 | ib_cpy.src_offset = sizeof(CubeGeometry); |
| 152 | ib_cpy.size = sizeof(CubeGeometry::g_Indices); |
| 153 | cgpu_cmd_transfer_buffer_to_buffer(cpy_cmd, &ib_cpy); |
no test coverage detected