clean up, wip making code less trash
This commit is contained in:
parent
e628f2b323
commit
d4146466ce
@ -74,7 +74,7 @@ gRunCycle(gGameCtx *ctx, pGameInput *inputs, u32 i_count)
|
|||||||
|
|
||||||
u64 index = vFrameIndex();
|
u64 index = vFrameIndex();
|
||||||
|
|
||||||
rDescHandle yoder = rGetAsset("models/yoda");
|
//rDescHandle yoder = rGetAsset("models/yoda");
|
||||||
|
|
||||||
rViewportSize(&ctx->pc.res);
|
rViewportSize(&ctx->pc.res);
|
||||||
ctx->pc.time = (f32)pCPUTimerRead();
|
ctx->pc.time = (f32)pCPUTimerRead();
|
||||||
@ -92,9 +92,9 @@ gRunCycle(gGameCtx *ctx, pGameInput *inputs, u32 i_count)
|
|||||||
//rBufferBindGUIVertex();
|
//rBufferBindGUIVertex();
|
||||||
//rBufferBindGUIIndex();
|
//rBufferBindGUIIndex();
|
||||||
|
|
||||||
rBufferBindMesh(&ctx->pc, yoder);
|
//rBufferBindMesh(&ctx->pc, yoder);
|
||||||
|
|
||||||
rDrawMesh(yoder);
|
//rDrawMesh(yoder);
|
||||||
|
|
||||||
rFrameFinish();
|
rFrameFinish();
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,6 @@
|
|||||||
|
|
||||||
typedef struct rDescHandle rDescHandle;
|
typedef struct rDescHandle rDescHandle;
|
||||||
|
|
||||||
// @requirement rRenderBufferType type
|
|
||||||
// @requirement u32 size
|
|
||||||
// @requirement u32 index
|
|
||||||
typedef struct rRenderBuffer rRenderBuffer;
|
|
||||||
|
|
||||||
// @requirement rTextureBufferType type
|
// @requirement rTextureBufferType type
|
||||||
// @requirement u32 width
|
// @requirement u32 width
|
||||||
// @requirement u32 height
|
// @requirement u32 height
|
||||||
@ -80,20 +75,6 @@ typedef struct rPBRVertex
|
|||||||
Vec4 col;
|
Vec4 col;
|
||||||
} rPBRVertex;
|
} rPBRVertex;
|
||||||
|
|
||||||
typedef struct rUploadQueue
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
rRenderBuffer **queued_buffers;
|
|
||||||
rTextureBuffer **queued_textures;
|
|
||||||
rawptr *queued_ptrs;
|
|
||||||
};
|
|
||||||
rawptr *data;
|
|
||||||
TicketMut ticket_mut;
|
|
||||||
Mut mut;
|
|
||||||
JobQueue job_queue;
|
|
||||||
} rUploadQueue;
|
|
||||||
|
|
||||||
typedef struct rMappedBuffer
|
typedef struct rMappedBuffer
|
||||||
{
|
{
|
||||||
rawptr ptr;
|
rawptr ptr;
|
||||||
@ -110,8 +91,6 @@ void rDestroy();
|
|||||||
// ::Renderer::Buffers::Header::
|
// ::Renderer::Buffers::Header::
|
||||||
|
|
||||||
static b32 rBufferMap();
|
static b32 rBufferMap();
|
||||||
static void rBufferBindVertex(rRenderBuffer *buffer);
|
|
||||||
static void rBufferBindIndex(rRenderBuffer *buffer);
|
|
||||||
static rawptr rBufferGUIVertMapping();
|
static rawptr rBufferGUIVertMapping();
|
||||||
static rawptr rBufferGUIIdxMapping();
|
static rawptr rBufferGUIIdxMapping();
|
||||||
static void rBufferBindGUIVertex();
|
static void rBufferBindGUIVertex();
|
||||||
|
|||||||
@ -503,11 +503,9 @@ vAssetSearch(c8 *asset_name)
|
|||||||
vAsset *asset = NULL;
|
vAsset *asset = NULL;
|
||||||
|
|
||||||
u64 hash = HashFromString(String8CStr(asset_name));
|
u64 hash = HashFromString(String8CStr(asset_name));
|
||||||
Printfln("hash %llu", hash);
|
|
||||||
vAssetArray assets = v_Renderer.buffers.assets;
|
vAssetArray assets = v_Renderer.buffers.assets;
|
||||||
for (u64 i = 0; i < assets.length; i += 1)
|
for (u64 i = 0; i < assets.length; i += 1)
|
||||||
{
|
{
|
||||||
Printfln("asset_hash %llu", assets.data[i].hash);
|
|
||||||
if (hash == assets.data[i].hash)
|
if (hash == assets.data[i].hash)
|
||||||
{
|
{
|
||||||
asset = assets.data + i;
|
asset = assets.data + i;
|
||||||
@ -521,7 +519,6 @@ vAssetSearch(c8 *asset_name)
|
|||||||
static vAsset *
|
static vAsset *
|
||||||
vAssetLookupIndex(u32 asset_idx)
|
vAssetLookupIndex(u32 asset_idx)
|
||||||
{
|
{
|
||||||
Printfln("asset_idx %llu", asset_idx);
|
|
||||||
Assert(asset_idx < ASSET_MAX, "asset index is out of range");
|
Assert(asset_idx < ASSET_MAX, "asset index is out of range");
|
||||||
return v_Renderer.buffers.assets.data + asset_idx;
|
return v_Renderer.buffers.assets.data + asset_idx;
|
||||||
}
|
}
|
||||||
@ -620,6 +617,71 @@ vMapBuffer(VmaAllocation alloc)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ::Vulkan::Transfers::Start::
|
||||||
|
|
||||||
|
static b32
|
||||||
|
vTransferBufferCopy(vMappedBuffer *transfer, vCopyTarget *target)
|
||||||
|
{
|
||||||
|
u64 rem_data = target->data.len - target->offset;
|
||||||
|
u64 rem_tfer = transfer->data.len - transfer->offset;
|
||||||
|
u64 copy_len = Minu64(rem_data, rem_tfer);
|
||||||
|
|
||||||
|
rawptr data_ptr = PtrAdd(target->data.ptr, target->offset);
|
||||||
|
rawptr tfer_ptr = PtrAdd(transfer->data.ptr, transfer->offset);
|
||||||
|
|
||||||
|
MemCpy(tfer_ptr, data_ptr, copy_len);
|
||||||
|
|
||||||
|
transfer->offset += copy_len;
|
||||||
|
target->offset += copy_len;
|
||||||
|
|
||||||
|
return transfer->offset == transfer->data.len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static b32
|
||||||
|
vBufferCopy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ::Vulkan::Transfers::End::
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ::Vulkan::Misc::Start::
|
||||||
|
|
||||||
|
static void
|
||||||
|
vCopyTargetSet(vCopyTarget *target, rawptr data, u64 len)
|
||||||
|
{
|
||||||
|
target->data.ptr = data;
|
||||||
|
target->data.len = len;
|
||||||
|
target->offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static b32
|
||||||
|
vMappedBufferInit(vMappedBuffer *buffer, u64 len, rRenderBufferType type)
|
||||||
|
{
|
||||||
|
b32 success = true;
|
||||||
|
|
||||||
|
VkResult result = vBufferCreate(&buffer->alloc, type, len);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printfln("vMappedBufferInit failure: %s", vVkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
buffer->data.ptr = vMapBuffer(buffer->alloc.alloc);
|
||||||
|
buffer->data.len = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ::Vulkan::Misc::End::
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ::Vulkan::Init::Functions::Start::
|
// ::Vulkan::Init::Functions::Start::
|
||||||
|
|
||||||
static b32
|
static b32
|
||||||
@ -1726,7 +1788,7 @@ vAssetsInit()
|
|||||||
.bufferOffset = 0,
|
.bufferOffset = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
MemCpy(transfer->ptr, asset.bytes, asset.len);
|
MemCpy(transfer->data.ptr, asset.bytes, asset.len);
|
||||||
|
|
||||||
vImageTransitionLayout(cmd, view->image.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
vImageTransitionLayout(cmd, view->image.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
vkCmdCopyBufferToImage(cmd, transfer->alloc.buffer, view->image.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©);
|
vkCmdCopyBufferToImage(cmd, transfer->alloc.buffer, view->image.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©);
|
||||||
@ -1767,7 +1829,7 @@ vAssetsInit()
|
|||||||
.size = sizeof(vMesh),
|
.size = sizeof(vMesh),
|
||||||
};
|
};
|
||||||
|
|
||||||
rawptr ptr = transfer->ptr;
|
rawptr ptr = transfer->data.ptr;
|
||||||
|
|
||||||
MemCpy(ptr, &mesh, sizeof(vMesh));
|
MemCpy(ptr, &mesh, sizeof(vMesh));
|
||||||
|
|
||||||
@ -1824,30 +1886,9 @@ vBuffersInit()
|
|||||||
b32 success = true;
|
b32 success = true;
|
||||||
VkResult result;
|
VkResult result;
|
||||||
|
|
||||||
result = vBufferCreate(&buf->gui_vert.alloc, rRBT_VERTEX | rRBT_HOST, VERTEX_BUFFER_CAP);
|
success &= vMappedBufferInit(&buf->gui_vert, VERTEX_BUFFER_CAP, rRBT_VERTEX | rRBT_HOST);
|
||||||
if (result != VK_SUCCESS)
|
success &= vMappedBufferInit(&buf->gui_idx, INDEX_BUFFER_CAP, rRBT_INDEX | rRBT_HOST);
|
||||||
success = false;
|
success &= vMappedBufferInit(&buf->transfer, TRANSFER_BUFFER_CAP, rRBT_STAGING);
|
||||||
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
result = vBufferCreate(&buf->gui_idx.alloc, rRBT_INDEX | rRBT_HOST, INDEX_BUFFER_CAP); // TODO: figure out ratio of memory alloc from vertex -> index
|
|
||||||
if (result != VK_SUCCESS)
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
result = vBufferCreate(&buf->transfer.alloc, rRBT_STAGING, TRANSFER_BUFFER_CAP);
|
|
||||||
if (result != VK_SUCCESS)
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf->gui_vert.ptr = vMapBuffer(buf->gui_vert.alloc.alloc);
|
|
||||||
buf->gui_vert.cap = MB(32);
|
|
||||||
buf->gui_idx.ptr = vMapBuffer(buf->gui_idx.alloc.alloc);
|
|
||||||
buf->gui_idx.cap = MB(8);
|
|
||||||
buf->transfer.ptr = vMapBuffer(buf->transfer.alloc.alloc);
|
|
||||||
buf->transfer.cap = MB(64);
|
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
@ -1877,7 +1918,7 @@ vTransferUpload(vTransfer **transfers, u32 count)
|
|||||||
rawptr data_ptr = NULL;
|
rawptr data_ptr = NULL;
|
||||||
u64 data_len = 0;
|
u64 data_len = 0;
|
||||||
|
|
||||||
rawptr ptr = transfer->ptr;
|
rawptr ptr = transfer->data.ptr;
|
||||||
u64 ptr_pos = 0;
|
u64 ptr_pos = 0;
|
||||||
u64 transfer_size = 0;
|
u64 transfer_size = 0;
|
||||||
VkDeviceSize offset = 0;
|
VkDeviceSize offset = 0;
|
||||||
@ -1903,12 +1944,12 @@ vTransferUpload(vTransfer **transfers, u32 count)
|
|||||||
data_ptr = transfers[i]->data;
|
data_ptr = transfers[i]->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ptr_pos == transfer->cap)
|
if (ptr_pos == transfer->data.len)
|
||||||
{
|
{
|
||||||
vImmSubmitFinish(device, fence, buffer, queue);
|
vImmSubmitFinish(device, fence, buffer, queue);
|
||||||
vkWaitForFences(device, 1, &fence, VK_TRUE, 999999999);
|
vkWaitForFences(device, 1, &fence, VK_TRUE, 999999999);
|
||||||
|
|
||||||
ptr = transfer->ptr;
|
ptr = transfer->data.ptr;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
imm_started = false;
|
imm_started = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -196,6 +196,12 @@ typedef struct vAssetInfo
|
|||||||
u64 asset_id;
|
u64 asset_id;
|
||||||
} vAssetInfo;
|
} vAssetInfo;
|
||||||
|
|
||||||
|
typedef struct vCopyTarget
|
||||||
|
{
|
||||||
|
DataPtr data;
|
||||||
|
u64 offset;
|
||||||
|
} vCopyTarget;
|
||||||
|
|
||||||
typedef struct vDeviceQueues
|
typedef struct vDeviceQueues
|
||||||
{
|
{
|
||||||
i32 graphics, transfer;
|
i32 graphics, transfer;
|
||||||
@ -384,8 +390,8 @@ typedef struct vRImages
|
|||||||
typedef struct vMappedBuffer
|
typedef struct vMappedBuffer
|
||||||
{
|
{
|
||||||
vBuffer alloc;
|
vBuffer alloc;
|
||||||
rawptr ptr;
|
DataPtr data;
|
||||||
u64 cap;
|
u64 offset;
|
||||||
} vMappedBuffer;
|
} vMappedBuffer;
|
||||||
|
|
||||||
typedef struct vRBuffers
|
typedef struct vRBuffers
|
||||||
@ -471,16 +477,6 @@ typedef struct rTextureBuffer
|
|||||||
u32 index;
|
u32 index;
|
||||||
} rTextureBuffer;
|
} rTextureBuffer;
|
||||||
|
|
||||||
typedef struct rRenderBuffer
|
|
||||||
{
|
|
||||||
rRenderBufferType type;
|
|
||||||
VkBuffer buffer;
|
|
||||||
VmaAllocation alloc;
|
|
||||||
VmaAllocationInfo info;
|
|
||||||
u32 size;
|
|
||||||
u32 index; // TODO(MA): use this
|
|
||||||
} rRenderBuffer;
|
|
||||||
|
|
||||||
typedef struct rPushConst
|
typedef struct rPushConst
|
||||||
{
|
{
|
||||||
Vec2 res;
|
Vec2 res;
|
||||||
@ -601,6 +597,16 @@ static vAsset *vAssetLookupIndex(u32 asset_idx);
|
|||||||
static VkResult vBufferCreate(vBuffer* buf, rRenderBufferType type, u64 size);
|
static VkResult vBufferCreate(vBuffer* buf, rRenderBufferType type, u64 size);
|
||||||
static rawptr vMapBuffer(VmaAllocation alloc);
|
static rawptr vMapBuffer(VmaAllocation alloc);
|
||||||
|
|
||||||
|
// ::Vulkan::Transfers::Header::
|
||||||
|
|
||||||
|
static b32 vTransferBufferCopy(vMappedBuffer *transfer, vCopyTarget *target);
|
||||||
|
static b32 vBufferCopy();
|
||||||
|
|
||||||
|
// ::Vulkan::Misc::Header::
|
||||||
|
|
||||||
|
static b32 vMappedBufferInit(vMappedBuffer *buffer, u64 len, rRenderBufferType type);
|
||||||
|
static void vCopyTargetSet(vCopyTarget *target, rawptr data, u64 len);
|
||||||
|
|
||||||
// ::Vulkan::CleanUp::Functions::Header::
|
// ::Vulkan::CleanUp::Functions::Header::
|
||||||
|
|
||||||
static void vSwapchainDestroy();
|
static void vSwapchainDestroy();
|
||||||
|
|||||||
@ -117,27 +117,6 @@ rDestroy()
|
|||||||
|
|
||||||
// ::Vulkan::Renderer::Buffers::Functions::Start::
|
// ::Vulkan::Renderer::Buffers::Functions::Start::
|
||||||
|
|
||||||
static void
|
|
||||||
rBufferBindVertex(rRenderBuffer *buffer)
|
|
||||||
{
|
|
||||||
Assert(buffer && buffer->type == rRBT_VERTEX, "rBufferBindVertex: invalid buffer provided");
|
|
||||||
|
|
||||||
VkCommandBuffer cmd = vFrameCmdBuf();
|
|
||||||
VkDeviceSize offsets = 0;
|
|
||||||
|
|
||||||
vkCmdBindVertexBuffers(cmd, 0, 1, &buffer->buffer, &offsets);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
rBufferBindIndex(rRenderBuffer *buffer)
|
|
||||||
{
|
|
||||||
Assert(buffer && buffer->type == rRBT_INDEX, "rBufferBindIndex: invalid buffer provided");
|
|
||||||
|
|
||||||
VkCommandBuffer cmd = vFrameCmdBuf();
|
|
||||||
|
|
||||||
vkCmdBindIndexBuffer(cmd, buffer->buffer, 0, VK_INDEX_TYPE_UINT32);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vBufferQueueWait()
|
vBufferQueueWait()
|
||||||
{
|
{
|
||||||
@ -151,13 +130,13 @@ vBufferQueueWait()
|
|||||||
static rawptr
|
static rawptr
|
||||||
rBufferGUIVertMapping()
|
rBufferGUIVertMapping()
|
||||||
{
|
{
|
||||||
return v_Renderer.buffers.gui_vert.ptr;
|
return v_Renderer.buffers.gui_vert.data.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rawptr
|
static rawptr
|
||||||
rBufferGUIIdxMapping()
|
rBufferGUIIdxMapping()
|
||||||
{
|
{
|
||||||
return v_Renderer.buffers.gui_idx.ptr;
|
return v_Renderer.buffers.gui_idx.data.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -267,7 +246,7 @@ rFrameBegin()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO(MA): make this work with VK_PRESENT_MODE_MAILBOX_KHR and remove assignment of present mode to FIFO
|
// TODO(MA): make this work with VK_PRESENT_MODE_MAILBOX_KHR and remove assignment of present mode to FIFO
|
||||||
result = vkWaitForFences(device, 1, &fence, VK_TRUE, 1000000000);
|
result = vkWaitForFences(device, 1, &fence, VK_TRUE, 10000000000);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
{
|
{
|
||||||
Printfln("vkWaitForFences failure: %s", vVkResultStr(result));
|
Printfln("vkWaitForFences failure: %s", vVkResultStr(result));
|
||||||
|
|||||||
@ -51,6 +51,12 @@ typedef uint32_t b32;
|
|||||||
|
|
||||||
typedef void * rawptr;
|
typedef void * rawptr;
|
||||||
|
|
||||||
|
typedef struct DataPtr
|
||||||
|
{
|
||||||
|
rawptr ptr;
|
||||||
|
u64 len;
|
||||||
|
} DataPtr;
|
||||||
|
|
||||||
typedef struct String8
|
typedef struct String8
|
||||||
{
|
{
|
||||||
c8 *value;
|
c8 *value;
|
||||||
@ -677,7 +683,7 @@ i32 _EPrintf(char *fmt, va_list arg);
|
|||||||
#define BitEq(var, bits) (((var) & (bits)) == (bits))
|
#define BitEq(var, bits) (((var) & (bits)) == (bits))
|
||||||
#define AlignPow2(x, b) (((x) + (b) - 1) & (~((b) - 1)))
|
#define AlignPow2(x, b) (((x) + (b) - 1) & (~((b) - 1)))
|
||||||
#define IsPow2(x) ((x) != 0 && ((x) &((x) - 1)) == 0)
|
#define IsPow2(x) ((x) != 0 && ((x) &((x) - 1)) == 0)
|
||||||
#define PtrAdd(ptr, add) (((u8 *)ptr) + add)
|
#define PtrAdd(ptr, add) ((rawptr)(((uintptr)ptr) + ((uintptr)add)))
|
||||||
#define PtrAddAdjustLen(ptr, len, add) \
|
#define PtrAddAdjustLen(ptr, len, add) \
|
||||||
ptr = PtrAdd(ptr, add); \
|
ptr = PtrAdd(ptr, add); \
|
||||||
len -= add
|
len -= add
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user