diff --git a/src/client/refresh/vk/header/qvk.h b/src/client/refresh/vk/header/qvk.h index dc14499e..f36c1be1 100644 --- a/src/client/refresh/vk/header/qvk.h +++ b/src/client/refresh/vk/header/qvk.h @@ -329,7 +329,6 @@ void QVk_DestroyPipeline(qvkpipeline_t *pipeline); uint8_t* QVk_GetVertexBuffer(VkDeviceSize size, VkBuffer *dstBuffer, VkDeviceSize *dstOffset); uint8_t* QVk_GetUniformBuffer(VkDeviceSize size, uint32_t *dstOffset, VkDescriptorSet *dstUboDescriptorSet); uint8_t* QVk_GetStagingBuffer(VkDeviceSize size, int alignment, VkCommandBuffer *cmdBuffer, VkBuffer *buffer, uint32_t *dstOffset); -VkBuffer QVk_GetTriangleFanIbo(VkDeviceSize indexCount, VkDeviceSize *dstOffset); void GenFanIndexes(uint16_t *data, int from, int to); void GenStripIndexes(uint16_t *data, int from, int to); VkBuffer* UpdateIndexBuffer(uint16_t *data, VkDeviceSize bufferSize, VkDeviceSize *dstOffset); diff --git a/src/client/refresh/vk/vk_common.c b/src/client/refresh/vk/vk_common.c index a5f93fa0..2f73994a 100644 --- a/src/client/refresh/vk/vk_common.c +++ b/src/client/refresh/vk/vk_common.c @@ -236,10 +236,6 @@ static qvkstagingbuffer_t vk_stagingBuffers[NUM_DYNBUFFERS]; static int vk_activeDynBufferIdx = 0; static int vk_activeSwapBufferIdx = 0; static int vk_dynIndex = 0; -/* cache tri between calls */ -static VkBuffer *vk_fanBuffercache = NULL; -static VkDeviceSize vk_fanOffset = 0; -static int vk_fanBuffersize = 0; // swap buffers used if primary dynamic buffers get full #define NUM_SWAPBUFFER_SLOTS 4 @@ -2138,10 +2134,6 @@ qboolean QVk_Init(void) CreateDynamicBuffers(); // create staging buffers CreateStagingBuffers(); - /* reset fan buffer */ - vk_fanOffset = 0; - vk_fanBuffersize = 512; - vk_fanBuffercache = NULL; CreatePipelines(); CreateSamplers(); @@ -2178,9 +2170,6 @@ VkResult QVk_BeginFrame(const VkViewport* viewport, const VkRect2D* scissor) vk_config.vertex_buffer_usage = 0; vk_config.index_buffer_usage = 0; vk_config.uniform_buffer_usage = 0; - /* reset fan buffer */ - vk_fanOffset = 0; - vk_fanBuffercache = NULL; ReleaseSwapBuffers(); @@ -2617,37 +2606,6 @@ uint8_t *QVk_GetStagingBuffer(VkDeviceSize size, int alignment, VkCommandBuffer return data; } -VkBuffer -QVk_GetTriangleFanIbo(VkDeviceSize indexCount, VkDeviceSize *dstOffset) -{ - VkDeviceSize bufferSize; - VkBuffer *buffer; - uint16_t *data; - - if (vk_fanBuffercache && (vk_fanBuffersize > indexCount)) - { - *dstOffset = vk_fanOffset; - return *vk_fanBuffercache; - } - - indexCount = ROUNDUP(Q_max(indexCount, vk_fanBuffersize), 4); - - bufferSize = 3 * indexCount * sizeof(uint16_t); - data = malloc(bufferSize); - - GenFanIndexes(data, 0, indexCount); - buffer = UpdateIndexBuffer(data, bufferSize, dstOffset); - - free(data); - - /* save to cache */ - vk_fanOffset = *dstOffset; - vk_fanBuffersize = indexCount; - vk_fanBuffercache = buffer; - - return *buffer; -} - void QVk_SubmitStagingBuffers() { for (int i = 0; i < NUM_DYNBUFFERS; ++i) diff --git a/src/client/refresh/vk/vk_surf.c b/src/client/refresh/vk/vk_surf.c index f57716f7..1c5301e3 100644 --- a/src/client/refresh/vk/vk_surf.c +++ b/src/client/refresh/vk/vk_surf.c @@ -103,9 +103,8 @@ DrawVkFlowingPoly(msurface_t *fa, image_t *texture, const float *color) QVk_BindPipeline(&vk_drawPolyPipeline); - - VkDeviceSize vboOffset, fanOffset; - VkBuffer vbo, fan; + VkDeviceSize vboOffset, dstOffset; + VkBuffer vbo, *buffer; uint32_t uboOffset; VkDescriptorSet uboDescriptorSet; uint8_t *vertData = QVk_GetVertexBuffer(sizeof(mvtx_t) * p->numverts, &vbo, &vboOffset); @@ -123,11 +122,13 @@ DrawVkFlowingPoly(msurface_t *fa, image_t *texture, const float *color) vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma); + Mesh_VertsRealloc((p->numverts - 2) * 3); + GenFanIndexes(vertIdxData, 0, p->numverts - 2); + buffer = UpdateIndexBuffer(vertIdxData, (p->numverts - 2) * 3 * sizeof(uint16_t), &dstOffset); - fan = QVk_GetTriangleFanIbo((p->numverts - 2) * 3, &fanOffset); vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_drawPolyPipeline.layout, 0, 2, descriptorSets, 1, &uboOffset); vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset); - vkCmdBindIndexBuffer(vk_activeCmdbuffer, fan, fanOffset, VK_INDEX_TYPE_UINT16); + vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16); vkCmdDrawIndexed(vk_activeCmdbuffer, (p->numverts - 2) * 3, 1, 0, 0, 0); } @@ -508,8 +509,8 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha for (p = surf->polys; p; p = p->chain) { - VkBuffer fan; - VkDeviceSize fanOffset; + VkBuffer *buffer; + VkDeviceSize dstOffset; memcpy(verts_buffer, p->verts, sizeof(mvtx_t) * nv); @@ -522,9 +523,12 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha uint8_t *vertData = QVk_GetVertexBuffer(sizeof(mvtx_t) * nv, &vbo, &vboOffset); memcpy(vertData, verts_buffer, sizeof(mvtx_t) * nv); - fan = QVk_GetTriangleFanIbo((nv - 2) * 3, &fanOffset); + Mesh_VertsRealloc((nv - 2) * 3); + GenFanIndexes(vertIdxData, 0, nv - 2); + buffer = UpdateIndexBuffer(vertIdxData, (nv - 2) * 3 * sizeof(uint16_t), &dstOffset); + vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset); - vkCmdBindIndexBuffer(vk_activeCmdbuffer, fan, fanOffset, VK_INDEX_TYPE_UINT16); + vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16); vkCmdDrawIndexed(vk_activeCmdbuffer, (nv - 2) * 3, 1, 0, 0, 0); } } @@ -535,16 +539,19 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha for (p = surf->polys; p; p = p->chain) { - VkDeviceSize fanOffset; + VkDeviceSize dstOffset; uint8_t *vertData; - VkBuffer fan; + VkBuffer *buffer; vertData = QVk_GetVertexBuffer(sizeof(mvtx_t) * nv, &vbo, &vboOffset); memcpy(vertData, p->verts, sizeof(mvtx_t) * nv); - fan = QVk_GetTriangleFanIbo((nv - 2) * 3, &fanOffset); + Mesh_VertsRealloc((nv - 2) * 3); + GenFanIndexes(vertIdxData, 0, nv - 2); + buffer = UpdateIndexBuffer(vertIdxData, (nv - 2) * 3 * sizeof(uint16_t), &dstOffset); + vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset); - vkCmdBindIndexBuffer(vk_activeCmdbuffer, fan, fanOffset, VK_INDEX_TYPE_UINT16); + vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16); vkCmdDrawIndexed(vk_activeCmdbuffer, (nv - 2) * 3, 1, 0, 0, 0); } } @@ -565,8 +572,8 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha for (p = surf->polys; p; p = p->chain) { - VkDeviceSize vboOffset, fanOffset; - VkBuffer vbo, fan; + VkDeviceSize vboOffset, dstOffset; + VkBuffer vbo, *buffer; uint8_t *vertData; memcpy(verts_buffer, p->verts, sizeof(mvtx_t) * nv); @@ -580,9 +587,12 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha vertData = QVk_GetVertexBuffer(sizeof(mvtx_t) * nv, &vbo, &vboOffset); memcpy(vertData, verts_buffer, sizeof(mvtx_t) * nv); - fan = QVk_GetTriangleFanIbo((nv - 2) * 3, &fanOffset); + Mesh_VertsRealloc((nv - 2) * 3); + GenFanIndexes(vertIdxData, 0, nv - 2); + buffer = UpdateIndexBuffer(vertIdxData, (nv - 2) * 3 * sizeof(uint16_t), &dstOffset); + vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset); - vkCmdBindIndexBuffer(vk_activeCmdbuffer, fan, fanOffset, VK_INDEX_TYPE_UINT16); + vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16); vkCmdDrawIndexed(vk_activeCmdbuffer, (nv - 2) * 3, 1, 0, 0, 0); } } @@ -592,16 +602,19 @@ Vk_RenderLightmappedPoly(msurface_t *surf, const float *modelMatrix, float alpha //========== for (p = surf->polys; p; p = p->chain) { - VkDeviceSize vboOffset, fanOffset; - VkBuffer vbo, fan; + VkDeviceSize vboOffset, dstOffset; + VkBuffer vbo, *buffer; uint8_t *vertData; vertData = QVk_GetVertexBuffer(sizeof(mvtx_t) * nv, &vbo, &vboOffset); memcpy(vertData, p->verts, sizeof(mvtx_t) * nv); - fan = QVk_GetTriangleFanIbo((nv - 2) * 3, &fanOffset); + Mesh_VertsRealloc((nv - 2) * 3); + GenFanIndexes(vertIdxData, 0, nv - 2); + buffer = UpdateIndexBuffer(vertIdxData, (nv - 2) * 3 * sizeof(uint16_t), &dstOffset); + vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset); - vkCmdBindIndexBuffer(vk_activeCmdbuffer, fan, fanOffset, VK_INDEX_TYPE_UINT16); + vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16); vkCmdDrawIndexed(vk_activeCmdbuffer, (nv - 2) * 3, 1, 0, 0, 0); } //==========