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();
|
||||
|
||||
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();
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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, ©);
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user