mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-25 14:00:58 +00:00
vk: get rid of QVk_GetTriangleFanIbo
This commit is contained in:
parent
1382b02a3c
commit
a60ec01de9
3 changed files with 34 additions and 64 deletions
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
//==========
|
||||
|
|
Loading…
Reference in a new issue