mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-07 00:11:39 +00:00
[vulkan] Bind the bsp main pipeline
No drawing commands are issued yet, but vulkan seems to be happy with the state.
This commit is contained in:
parent
9ebecf08bb
commit
1080c89a26
2 changed files with 26 additions and 5 deletions
|
@ -59,6 +59,7 @@ typedef struct elechain_s {
|
||||||
typedef struct bspframe_s {
|
typedef struct bspframe_s {
|
||||||
uint32_t *index_data;
|
uint32_t *index_data;
|
||||||
uint32_t index_count;
|
uint32_t index_count;
|
||||||
|
uint32_t index_offset;
|
||||||
VkCommandBuffer bsp_cmd;
|
VkCommandBuffer bsp_cmd;
|
||||||
VkCommandBuffer turb_cmd;
|
VkCommandBuffer turb_cmd;
|
||||||
VkCommandBuffer sky_cmd;
|
VkCommandBuffer sky_cmd;
|
||||||
|
|
|
@ -522,7 +522,7 @@ Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx)
|
||||||
bctx->index_buffer
|
bctx->index_buffer
|
||||||
= QFV_CreateBuffer (device, index_buffer_size,
|
= QFV_CreateBuffer (device, index_buffer_size,
|
||||||
VK_BUFFER_USAGE_TRANSFER_DST_BIT
|
VK_BUFFER_USAGE_TRANSFER_DST_BIT
|
||||||
| VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
|
| VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
|
||||||
bctx->index_memory
|
bctx->index_memory
|
||||||
= QFV_AllocBufferMemory (device, bctx->index_buffer,
|
= QFV_AllocBufferMemory (device, bctx->index_buffer,
|
||||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
|
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
|
||||||
|
@ -535,7 +535,9 @@ Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx)
|
||||||
index_buffer_size, 0, &data);
|
index_buffer_size, 0, &data);
|
||||||
uint32_t *index_data = data;
|
uint32_t *index_data = data;
|
||||||
for (size_t i = 0; i < frames; i++) {
|
for (size_t i = 0; i < frames; i++) {
|
||||||
bctx->frames.a[i].index_data = index_data + index_count * i;
|
uint32_t offset = index_count * i;
|
||||||
|
bctx->frames.a[i].index_data = index_data + offset;
|
||||||
|
bctx->frames.a[i].index_offset = offset * sizeof (uint32_t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (vertex_buffer_size > bctx->vertex_buffer_size) {
|
if (vertex_buffer_size > bctx->vertex_buffer_size) {
|
||||||
|
@ -809,9 +811,10 @@ bsp_begin (vulkan_ctx_t *ctx)
|
||||||
|
|
||||||
__auto_type cframe = &ctx->framebuffers.a[ctx->curFrame];
|
__auto_type cframe = &ctx->framebuffers.a[ctx->curFrame];
|
||||||
bspframe_t *bframe = &bctx->frames.a[ctx->curFrame];
|
bspframe_t *bframe = &bctx->frames.a[ctx->curFrame];
|
||||||
DARRAY_APPEND (cframe->subCommand, bframe->bsp_cmd);
|
VkCommandBuffer cmd = bframe->bsp_cmd;
|
||||||
|
DARRAY_APPEND (cframe->subCommand, cmd);
|
||||||
|
|
||||||
dfunc->vkResetCommandBuffer (bframe->bsp_cmd, 0);
|
dfunc->vkResetCommandBuffer (cmd, 0);
|
||||||
VkCommandBufferInheritanceInfo inherit = {
|
VkCommandBufferInheritanceInfo inherit = {
|
||||||
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, 0,
|
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, 0,
|
||||||
ctx->renderpass.renderpass, 0,
|
ctx->renderpass.renderpass, 0,
|
||||||
|
@ -823,7 +826,24 @@ bsp_begin (vulkan_ctx_t *ctx)
|
||||||
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
|
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
|
||||||
| VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, &inherit,
|
| VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, &inherit,
|
||||||
};
|
};
|
||||||
dfunc->vkBeginCommandBuffer (bframe->bsp_cmd, &beginInfo);
|
dfunc->vkBeginCommandBuffer (cmd, &beginInfo);
|
||||||
|
|
||||||
|
dfunc->vkCmdBindPipeline (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
|
bctx->main);
|
||||||
|
VkViewport viewport = {0, 0, vid.width, vid.height, 0, 1};
|
||||||
|
VkRect2D scissor = { {0, 0}, {vid.width, vid.height} };
|
||||||
|
dfunc->vkCmdSetViewport (cmd, 0, 1, &viewport);
|
||||||
|
dfunc->vkCmdSetScissor (cmd, 0, 1, &scissor);
|
||||||
|
|
||||||
|
VkDeviceSize offsets[] = { 0 };
|
||||||
|
dfunc->vkCmdBindVertexBuffers (cmd, 0, 1, &bctx->vertex_buffer, offsets);
|
||||||
|
dfunc->vkCmdBindIndexBuffer (cmd, bctx->index_buffer, bframe->index_offset,
|
||||||
|
VK_INDEX_TYPE_UINT32);
|
||||||
|
|
||||||
|
VkDescriptorSet set = bframe->descriptors;
|
||||||
|
VkPipelineLayout layout = bctx->layout;
|
||||||
|
dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
|
layout, 0, 1, &set, 0, 0);
|
||||||
|
|
||||||
//XXX glsl_Fog_GetColor (fog);
|
//XXX glsl_Fog_GetColor (fog);
|
||||||
//XXX fog[3] = glsl_Fog_GetDensity () / 64.0;
|
//XXX fog[3] = glsl_Fog_GetDensity () / 64.0;
|
||||||
|
|
Loading…
Reference in a new issue