clean up, wip making code less trash

This commit is contained in:
Matthew 2025-06-02 21:19:05 +10:00
parent e628f2b323
commit d4146466ce
6 changed files with 105 additions and 94 deletions

View File

@ -74,7 +74,7 @@ gRunCycle(gGameCtx *ctx, pGameInput *inputs, u32 i_count)
u64 index = vFrameIndex();
rDescHandle yoder = rGetAsset("models/yoda");
//rDescHandle yoder = rGetAsset("models/yoda");
rViewportSize(&ctx->pc.res);
ctx->pc.time = (f32)pCPUTimerRead();
@ -92,9 +92,9 @@ gRunCycle(gGameCtx *ctx, pGameInput *inputs, u32 i_count)
//rBufferBindGUIVertex();
//rBufferBindGUIIndex();
rBufferBindMesh(&ctx->pc, yoder);
//rBufferBindMesh(&ctx->pc, yoder);
rDrawMesh(yoder);
//rDrawMesh(yoder);
rFrameFinish();

View File

@ -4,11 +4,6 @@
typedef struct rDescHandle rDescHandle;
// @requirement rRenderBufferType type
// @requirement u32 size
// @requirement u32 index
typedef struct rRenderBuffer rRenderBuffer;
// @requirement rTextureBufferType type
// @requirement u32 width
// @requirement u32 height
@ -80,20 +75,6 @@ typedef struct rPBRVertex
Vec4 col;
} 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
{
rawptr ptr;
@ -110,8 +91,6 @@ void rDestroy();
// ::Renderer::Buffers::Header::
static b32 rBufferMap();
static void rBufferBindVertex(rRenderBuffer *buffer);
static void rBufferBindIndex(rRenderBuffer *buffer);
static rawptr rBufferGUIVertMapping();
static rawptr rBufferGUIIdxMapping();
static void rBufferBindGUIVertex();

View File

@ -503,11 +503,9 @@ vAssetSearch(c8 *asset_name)
vAsset *asset = NULL;
u64 hash = HashFromString(String8CStr(asset_name));
Printfln("hash %llu", hash);
vAssetArray assets = v_Renderer.buffers.assets;
for (u64 i = 0; i < assets.length; i += 1)
{
Printfln("asset_hash %llu", assets.data[i].hash);
if (hash == assets.data[i].hash)
{
asset = assets.data + i;
@ -521,7 +519,6 @@ vAssetSearch(c8 *asset_name)
static vAsset *
vAssetLookupIndex(u32 asset_idx)
{
Printfln("asset_idx %llu", asset_idx);
Assert(asset_idx < ASSET_MAX, "asset index is out of range");
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::
static b32
@ -1726,7 +1788,7 @@ vAssetsInit()
.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);
vkCmdCopyBufferToImage(cmd, transfer->alloc.buffer, view->image.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &copy);
@ -1767,7 +1829,7 @@ vAssetsInit()
.size = sizeof(vMesh),
};
rawptr ptr = transfer->ptr;
rawptr ptr = transfer->data.ptr;
MemCpy(ptr, &mesh, sizeof(vMesh));
@ -1824,30 +1886,9 @@ vBuffersInit()
b32 success = true;
VkResult result;
result = vBufferCreate(&buf->gui_vert.alloc, rRBT_VERTEX | rRBT_HOST, VERTEX_BUFFER_CAP);
if (result != VK_SUCCESS)
success = false;
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);
success &= vMappedBufferInit(&buf->gui_vert, VERTEX_BUFFER_CAP, rRBT_VERTEX | rRBT_HOST);
success &= vMappedBufferInit(&buf->gui_idx, INDEX_BUFFER_CAP, rRBT_INDEX | rRBT_HOST);
success &= vMappedBufferInit(&buf->transfer, TRANSFER_BUFFER_CAP, rRBT_STAGING);
return success;
}
@ -1877,7 +1918,7 @@ vTransferUpload(vTransfer **transfers, u32 count)
rawptr data_ptr = NULL;
u64 data_len = 0;
rawptr ptr = transfer->ptr;
rawptr ptr = transfer->data.ptr;
u64 ptr_pos = 0;
u64 transfer_size = 0;
VkDeviceSize offset = 0;
@ -1903,12 +1944,12 @@ vTransferUpload(vTransfer **transfers, u32 count)
data_ptr = transfers[i]->data;
}
if (ptr_pos == transfer->cap)
if (ptr_pos == transfer->data.len)
{
vImmSubmitFinish(device, fence, buffer, queue);
vkWaitForFences(device, 1, &fence, VK_TRUE, 999999999);
ptr = transfer->ptr;
ptr = transfer->data.ptr;
offset = 0;
imm_started = false;
}

View File

@ -196,6 +196,12 @@ typedef struct vAssetInfo
u64 asset_id;
} vAssetInfo;
typedef struct vCopyTarget
{
DataPtr data;
u64 offset;
} vCopyTarget;
typedef struct vDeviceQueues
{
i32 graphics, transfer;
@ -383,9 +389,9 @@ typedef struct vRImages
typedef struct vMappedBuffer
{
vBuffer alloc;
rawptr ptr;
u64 cap;
vBuffer alloc;
DataPtr data;
u64 offset;
} vMappedBuffer;
typedef struct vRBuffers
@ -471,16 +477,6 @@ typedef struct rTextureBuffer
u32 index;
} rTextureBuffer;
typedef struct rRenderBuffer
{
rRenderBufferType type;
VkBuffer buffer;
VmaAllocation alloc;
VmaAllocationInfo info;
u32 size;
u32 index; // TODO(MA): use this
} rRenderBuffer;
typedef struct rPushConst
{
Vec2 res;
@ -601,6 +597,16 @@ static vAsset *vAssetLookupIndex(u32 asset_idx);
static VkResult vBufferCreate(vBuffer* buf, rRenderBufferType type, u64 size);
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::
static void vSwapchainDestroy();

View File

@ -117,27 +117,6 @@ rDestroy()
// ::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
vBufferQueueWait()
{
@ -151,13 +130,13 @@ vBufferQueueWait()
static rawptr
rBufferGUIVertMapping()
{
return v_Renderer.buffers.gui_vert.ptr;
return v_Renderer.buffers.gui_vert.data.ptr;
}
static rawptr
rBufferGUIIdxMapping()
{
return v_Renderer.buffers.gui_idx.ptr;
return v_Renderer.buffers.gui_idx.data.ptr;
}
static void
@ -267,7 +246,7 @@ rFrameBegin()
#endif
// 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)
{
Printfln("vkWaitForFences failure: %s", vVkResultStr(result));

View File

@ -51,6 +51,12 @@ typedef uint32_t b32;
typedef void * rawptr;
typedef struct DataPtr
{
rawptr ptr;
u64 len;
} DataPtr;
typedef struct String8
{
c8 *value;
@ -677,7 +683,7 @@ i32 _EPrintf(char *fmt, va_list arg);
#define BitEq(var, bits) (((var) & (bits)) == (bits))
#define AlignPow2(x, b) (((x) + (b) - 1) & (~((b) - 1)))
#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) \
ptr = PtrAdd(ptr, add); \
len -= add