diff --git a/include/QF/Vulkan/qf_alias.h b/include/QF/Vulkan/qf_alias.h index a7f2cda41..54c7c9e9c 100644 --- a/include/QF/Vulkan/qf_alias.h +++ b/include/QF/Vulkan/qf_alias.h @@ -70,21 +70,10 @@ typedef enum { QFV_aliasNumPasses } QFV_AliasSubpass; -typedef struct aliasframe_s { - qfv_cmdbufferset_t cmdSet; -} aliasframe_t; - -typedef struct aliasframeset_s - DARRAY_TYPE (aliasframe_t) aliasframeset_t; - typedef struct aliasindset_s DARRAY_TYPE (unsigned) aliasindset_t; typedef struct aliasctx_s { - aliasframeset_t frames; - VkPipeline depth; - VkPipeline gbuf; - VkPipelineLayout layout; VkSampler sampler; } aliasctx_t; diff --git a/include/QF/Vulkan/qf_bsp.h b/include/QF/Vulkan/qf_bsp.h index 99a558dfc..0efc60eea 100644 --- a/include/QF/Vulkan/qf_bsp.h +++ b/include/QF/Vulkan/qf_bsp.h @@ -366,7 +366,6 @@ typedef struct bspctx_s { bsp_pass_t main_pass; ///< camera view depth, gbuffer, etc VkSampler sampler; - VkPipelineLayout layout; VkDeviceMemory texture_memory; VkPipeline depth; diff --git a/include/QF/Vulkan/qf_compose.h b/include/QF/Vulkan/qf_compose.h index d777080ce..6364fa962 100644 --- a/include/QF/Vulkan/qf_compose.h +++ b/include/QF/Vulkan/qf_compose.h @@ -39,7 +39,6 @@ #define COMPOSE_IMAGE_INFOS 1 typedef struct composeframe_s { - VkCommandBuffer cmd; VkDescriptorImageInfo imageInfo[COMPOSE_IMAGE_INFOS]; VkWriteDescriptorSet descriptors[COMPOSE_IMAGE_INFOS]; } composeframe_t; @@ -49,8 +48,6 @@ typedef struct composeframeset_s typedef struct composectx_s { composeframeset_t frames; - VkPipeline pipeline; - VkPipelineLayout layout; } composectx_t; struct vulkan_ctx_s; diff --git a/include/QF/Vulkan/qf_iqm.h b/include/QF/Vulkan/qf_iqm.h index 88057f441..1138eaa16 100644 --- a/include/QF/Vulkan/qf_iqm.h +++ b/include/QF/Vulkan/qf_iqm.h @@ -89,9 +89,6 @@ typedef struct iqmindset_s typedef struct iqmctx_s { iqm_frameset_t frames; - VkPipeline depth; - VkPipeline gbuf; - VkPipelineLayout layout; VkSampler sampler; VkDescriptorPool bones_pool; VkDescriptorSetLayout bones_setLayout; diff --git a/include/QF/Vulkan/qf_lighting.h b/include/QF/Vulkan/qf_lighting.h index b6c8437e8..469bb5b4c 100644 --- a/include/QF/Vulkan/qf_lighting.h +++ b/include/QF/Vulkan/qf_lighting.h @@ -61,7 +61,6 @@ typedef struct qfv_light_buffer_s { #define LIGHTING_DESCRIPTORS (LIGHTING_BUFFER_INFOS + LIGHTING_ATTACH_INFOS + 1) typedef struct lightingframe_s { - VkCommandBuffer cmd; VkBuffer light_buffer; VkDescriptorBufferInfo bufferInfo[LIGHTING_BUFFER_INFOS]; VkDescriptorImageInfo attachInfo[LIGHTING_ATTACH_INFOS]; @@ -108,8 +107,6 @@ typedef struct lightingctx_s { VkRenderPass renderpass_4; VkRenderPass renderpass_1; - VkCommandPool cmdpool; - struct lightingdata_s *ldata; struct scene_s *scene; } lightingctx_t; diff --git a/include/QF/Vulkan/qf_matrices.h b/include/QF/Vulkan/qf_matrices.h index 011a69972..057dd6d81 100644 --- a/include/QF/Vulkan/qf_matrices.h +++ b/include/QF/Vulkan/qf_matrices.h @@ -48,7 +48,6 @@ typedef struct qfv_matrix_buffer_s { } qfv_matrix_buffer_t; typedef struct matrixframe_s { - //VkCommandBuffer cmd; VkBuffer buffer; VkDescriptorSet descriptors; } matrixframe_t; @@ -58,8 +57,6 @@ typedef struct matrixframeset_s typedef struct matrixctx_s { matrixframeset_t frames; - VkPipeline pipeline; - VkPipelineLayout layout; VkDeviceMemory memory; qfv_matrix_buffer_t matrices; int dirty; diff --git a/include/QF/Vulkan/qf_output.h b/include/QF/Vulkan/qf_output.h index c81495082..aeaada73d 100644 --- a/include/QF/Vulkan/qf_output.h +++ b/include/QF/Vulkan/qf_output.h @@ -35,7 +35,6 @@ #include "QF/Vulkan/command.h" typedef struct outputframe_s { - VkCommandBuffer cmd; VkImageView input; VkDescriptorSet set; } outputframe_t; @@ -45,12 +44,6 @@ typedef struct outputframeset_s typedef struct outputctx_s { outputframeset_t frames; - VkPipeline output; - VkPipeline waterwarp; - VkPipeline fisheye; - VkPipelineLayout output_layout; - VkPipelineLayout warp_layout; - VkPipelineLayout fish_layout; VkSampler sampler; VkImageView input; VkFramebuffer *framebuffers; // one per swapchain image diff --git a/include/QF/Vulkan/qf_particles.h b/include/QF/Vulkan/qf_particles.h index 381a8edad..ba3d0d906 100644 --- a/include/QF/Vulkan/qf_particles.h +++ b/include/QF/Vulkan/qf_particles.h @@ -37,7 +37,6 @@ typedef enum { } QFV_ParticleSubpass; typedef struct particleframe_s { - VkCommandBuffer compute; VkEvent physicsEvent; VkEvent updateEvent; VkBuffer states; @@ -47,8 +46,6 @@ typedef struct particleframe_s { VkDescriptorSet curDescriptors; VkDescriptorSet inDescriptors; VkDescriptorSet newDescriptors; - - qfv_cmdbufferset_t cmdSet; } particleframe_t; typedef struct particleframeset_s @@ -56,18 +53,12 @@ typedef struct particleframeset_s typedef struct particlectx_s { particleframeset_t frames; - VkPipeline physics; - VkPipeline update; - VkPipeline draw; struct qfv_resource_s *resources; struct qfv_stagebuf_s *stage; VkDescriptorPool pool; VkDescriptorSetLayout setLayout; - VkPipelineLayout physics_layout; - VkPipelineLayout update_layout; - VkPipelineLayout draw_layout; psystem_t *psystem; } particlectx_t; diff --git a/include/QF/Vulkan/qf_sprite.h b/include/QF/Vulkan/qf_sprite.h index 8e1fdf52f..19c552397 100644 --- a/include/QF/Vulkan/qf_sprite.h +++ b/include/QF/Vulkan/qf_sprite.h @@ -58,20 +58,9 @@ typedef enum { QFV_spriteNumPasses } QFV_SpriteSubpass; -typedef struct spriteframe_s { - qfv_cmdbufferset_t cmdSet; -} spriteframe_t; - -typedef struct spriteframeset_s - DARRAY_TYPE (spriteframe_t) spriteframeset_t; - typedef struct spritectx_s { - spriteframeset_t frames; - VkPipeline depth; - VkPipeline gbuf; VkDescriptorPool pool; VkDescriptorSetLayout setLayout; - VkPipelineLayout layout; unsigned maxImages; VkSampler sampler; } spritectx_t; diff --git a/libs/video/renderer/vulkan/pl_quake_def.plist b/libs/video/renderer/vulkan/pl_quake_def.plist index ed3caa0d5..be3764cc4 100644 --- a/libs/video/renderer/vulkan/pl_quake_def.plist +++ b/libs/video/renderer/vulkan/pl_quake_def.plist @@ -254,7 +254,7 @@ setLayouts = { binding = 0; descriptorType = uniform_buffer; descriptorCount = 1; - stageFlags = vertex|geometry; + stageFlags = vertex|geometry|fragment; }, ); }; diff --git a/libs/video/renderer/vulkan/vulkan_alias.c b/libs/video/renderer/vulkan/vulkan_alias.c index 3c68a55c9..bd61b454f 100644 --- a/libs/video/renderer/vulkan/vulkan_alias.c +++ b/libs/video/renderer/vulkan/vulkan_alias.c @@ -64,11 +64,12 @@ static void emit_commands (VkCommandBuffer cmd, int pose1, int pose2, qfv_alias_skin_t *skin, uint32_t numPC, qfv_push_constants_t *constants, - aliashdr_t *hdr, vulkan_ctx_t *ctx, entity_t ent) + aliashdr_t *hdr, qfv_taskctx_t *taskctx, entity_t ent) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; - aliasctx_t *actx = ctx->alias_context; + auto ctx = taskctx->ctx; + auto device = ctx->device; + auto dfunc = device->funcs; + auto layout = taskctx->pipeline->layout; __auto_type mesh = (qfv_alias_mesh_t *) ((byte *) hdr + hdr->commands); @@ -89,13 +90,13 @@ emit_commands (VkCommandBuffer cmd, int pose1, int pose2, dfunc->vkCmdBindVertexBuffers (cmd, 0, bindingCount, buffers, offsets); dfunc->vkCmdBindIndexBuffer (cmd, mesh->index_buffer, 0, VK_INDEX_TYPE_UINT32); - QFV_PushConstants (device, cmd, actx->layout, numPC, constants); + QFV_PushConstants (device, cmd, layout, numPC, constants); if (skin) { VkDescriptorSet sets[] = { skin->descriptor, }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - actx->layout, 2, 1, sets, 0, 0); + layout, 2, 1, sets, 0, 0); } dfunc->vkCmdDrawIndexed (cmd, 3 * hdr->mdl.numtris, 1, 0, 0, 0); @@ -134,7 +135,6 @@ Vulkan_AliasRemoveSkin (vulkan_ctx_t *ctx, qfv_alias_skin_t *skin) static void alias_draw_ent (qfv_taskctx_t *taskctx, entity_t ent, bool pass) { - auto ctx = taskctx->ctx; renderer_t *renderer = Ent_GetComponent (ent.id, scene_renderer, ent.reg); auto model = renderer->model; aliashdr_t *hdr; @@ -187,7 +187,7 @@ alias_draw_ent (qfv_taskctx_t *taskctx, entity_t ent, bool pass) emit_commands (taskctx->cmd, animation->pose1, animation->pose2, pass ? skin : 0, pass ? 5 : 2, push_constants, - hdr, ctx, ent); + hdr, taskctx, ent); } static void @@ -200,14 +200,14 @@ alias_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto ctx = taskctx->ctx; auto device = ctx->device; auto dfunc = device->funcs; - auto actx = ctx->alias_context; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; VkDescriptorSet sets[] = { Vulkan_Matrix_Descriptors (ctx, ctx->curFrame), Vulkan_Palette_Descriptor (ctx), }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - actx->layout, 0, 2, sets, 0, 0); + layout, 0, 2, sets, 0, 0); auto queue = r_ent_queue; //FIXME fetch from scene for (size_t i = 0; i < queue->ent_queues[mod_alias].size; i++) { @@ -246,13 +246,6 @@ Vulkan_Alias_Init (vulkan_ctx_t *ctx) aliasctx_t *actx = calloc (1, sizeof (aliasctx_t)); ctx->alias_context = actx; - auto rctx = ctx->render_context; - size_t frames = rctx->frames.size; - DARRAY_INIT (&actx->frames, frames); - DARRAY_RESIZE (&actx->frames, frames); - actx->frames.grow = 0; - - actx->layout = Vulkan_CreatePipelineLayout (ctx, "alias_layout"); actx->sampler = Vulkan_CreateSampler (ctx, "alias_sampler"); qfvPopDebug (ctx); } @@ -260,12 +253,9 @@ Vulkan_Alias_Init (vulkan_ctx_t *ctx) void Vulkan_Alias_Shutdown (vulkan_ctx_t *ctx) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; + //qfv_device_t *device = ctx->device; + //qfv_devfuncs_t *dfunc = device->funcs; aliasctx_t *actx = ctx->alias_context; - dfunc->vkDestroyPipeline (device->dev, actx->depth, 0); - dfunc->vkDestroyPipeline (device->dev, actx->gbuf, 0); - free (actx->frames.a); free (actx); } diff --git a/libs/video/renderer/vulkan/vulkan_bsp.c b/libs/video/renderer/vulkan/vulkan_bsp.c index 471172ded..a88f9db54 100644 --- a/libs/video/renderer/vulkan/vulkan_bsp.c +++ b/libs/video/renderer/vulkan/vulkan_bsp.c @@ -1472,7 +1472,6 @@ Vulkan_Bsp_Init (vulkan_ctx_t *ctx) DARRAY_RESIZE (&bctx->frames, frames); bctx->frames.grow = 0; - bctx->layout = Vulkan_CreatePipelineLayout (ctx, "quakebsp_layout"); bctx->sampler = Vulkan_CreateSampler (ctx, "quakebsp_sampler"); size_t entid_count = Vulkan_Scene_MaxEntities (ctx); diff --git a/libs/video/renderer/vulkan/vulkan_compose.c b/libs/video/renderer/vulkan/vulkan_compose.c index 8aaa49dba..a00141ed9 100644 --- a/libs/video/renderer/vulkan/vulkan_compose.c +++ b/libs/video/renderer/vulkan/vulkan_compose.c @@ -76,6 +76,7 @@ compose_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto cctx = ctx->compose_context; auto cframe = &cctx->frames.a[ctx->curFrame]; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; auto fb = &taskctx->renderpass->framebuffer; @@ -88,7 +89,7 @@ compose_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) Vulkan_Translucent_Descriptors (ctx, ctx->curFrame), }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - cctx->layout, 0, 2, sets, 0, 0); + layout, 0, 2, sets, 0, 0); dfunc->vkCmdDraw (cmd, 3, 1, 0, 0); } @@ -119,10 +120,6 @@ Vulkan_Compose_Init (vulkan_ctx_t *ctx) DARRAY_RESIZE (&cctx->frames, frames); cctx->frames.grow = 0; - cctx->layout = Vulkan_CreatePipelineLayout (ctx, "compose_layout"); - - __auto_type cmdSet = QFV_AllocCommandBufferSet (1, alloca); - __auto_type attach = QFV_AllocDescriptorSetLayoutSet (frames, alloca); for (size_t i = 0; i < frames; i++) { attach->a[i] = Vulkan_CreateDescriptorSetLayout (ctx, @@ -136,11 +133,6 @@ Vulkan_Compose_Init (vulkan_ctx_t *ctx) for (size_t i = 0; i < frames; i++) { __auto_type cframe = &cctx->frames.a[i]; - QFV_AllocateCommandBuffers (device, ctx->cmdpool, 1, cmdSet); - cframe->cmd = cmdSet->a[0]; - - QFV_duSetObjectName (device, VK_OBJECT_TYPE_COMMAND_BUFFER, - cframe->cmd, "cmd:compose"); for (int j = 0; j < COMPOSE_IMAGE_INFOS; j++) { cframe->imageInfo[j] = base_image_info; cframe->imageInfo[j].sampler = 0; @@ -157,11 +149,8 @@ Vulkan_Compose_Init (vulkan_ctx_t *ctx) void Vulkan_Compose_Shutdown (vulkan_ctx_t *ctx) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; composectx_t *cctx = ctx->compose_context; - dfunc->vkDestroyPipeline (device->dev, cctx->pipeline, 0); free (cctx->frames.a); free (cctx); } diff --git a/libs/video/renderer/vulkan/vulkan_iqm.c b/libs/video/renderer/vulkan/vulkan_iqm.c index b792446ec..5ac1e0318 100644 --- a/libs/video/renderer/vulkan/vulkan_iqm.c +++ b/libs/video/renderer/vulkan/vulkan_iqm.c @@ -65,11 +65,12 @@ static void emit_commands (VkCommandBuffer cmd, int pose1, int pose2, qfv_iqm_skin_t *skins, uint32_t numPC, qfv_push_constants_t *constants, - iqm_t *iqm, vulkan_ctx_t *ctx, entity_t ent) + iqm_t *iqm, qfv_taskctx_t *taskctx, entity_t ent) { + auto ctx = taskctx->ctx; auto device = ctx->device; auto dfunc = device->funcs; - auto ictx = ctx->iqm_context; + auto layout = taskctx->pipeline->layout; auto mesh = (qfv_iqm_t *) iqm->extra_data; @@ -85,7 +86,7 @@ emit_commands (VkCommandBuffer cmd, int pose1, int pose2, dfunc->vkCmdBindVertexBuffers (cmd, 0, bindingCount, buffers, offsets); dfunc->vkCmdBindIndexBuffer (cmd, mesh->index_buffer, 0, VK_INDEX_TYPE_UINT16); - QFV_PushConstants (device, cmd, ictx->layout, numPC, constants); + QFV_PushConstants (device, cmd, layout, numPC, constants); for (int i = 0; i < iqm->num_meshes; i++) { if (skins) { VkDescriptorSet sets[] = { @@ -94,14 +95,14 @@ emit_commands (VkCommandBuffer cmd, int pose1, int pose2, }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - ictx->layout, 1, 2, sets, 0, 0); + layout, 1, 2, sets, 0, 0); } else { VkDescriptorSet sets[] = { mesh->bones_descriptors[ctx->curFrame], }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - ictx->layout, 2, 1, sets, 0, 0); + layout, 2, 1, sets, 0, 0); } dfunc->vkCmdDrawIndexed (cmd, 3 * iqm->meshes[i].num_triangles, 1, 3 * iqm->meshes[i].first_triangle, 0, 0); @@ -260,7 +261,7 @@ iqm_draw_ent (qfv_taskctx_t *taskctx, entity_t ent, bool pass) emit_commands (taskctx->cmd, animation->pose1, animation->pose2, pass ? skins : 0, pass ? 6 : 2, push_constants, - iqm, ctx, ent); + iqm, taskctx, ent); } static void @@ -272,14 +273,14 @@ iqm_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto ctx = taskctx->ctx; auto device = ctx->device; auto dfunc = device->funcs; - auto ictx = ctx->iqm_context; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; VkDescriptorSet sets[] = { Vulkan_Matrix_Descriptors (ctx, ctx->curFrame), }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - ictx->layout, 0, 1, sets, 0, 0); + layout, 0, 1, sets, 0, 0); auto queue = r_ent_queue; //FIXME fetch from scene for (size_t i = 0; i < queue->ent_queues[mod_iqm].size; i++) { @@ -315,7 +316,6 @@ Vulkan_IQM_Init (vulkan_ctx_t *ctx) DARRAY_RESIZE (&ictx->frames, frames); ictx->frames.grow = 0; - ictx->layout = Vulkan_CreatePipelineLayout (ctx, "iqm_layout"); ictx->sampler = Vulkan_CreateSampler (ctx, "alias_sampler"); ictx->bones_pool = Vulkan_CreateDescriptorPool (ctx, "bone_pool"); @@ -327,12 +327,8 @@ Vulkan_IQM_Init (vulkan_ctx_t *ctx) void Vulkan_IQM_Shutdown (vulkan_ctx_t *ctx) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; iqmctx_t *ictx = ctx->iqm_context; - dfunc->vkDestroyPipeline (device->dev, ictx->depth, 0); - dfunc->vkDestroyPipeline (device->dev, ictx->gbuf, 0); free (ictx->frames.a); free (ictx); } diff --git a/libs/video/renderer/vulkan/vulkan_lighting.c b/libs/video/renderer/vulkan/vulkan_lighting.c index e70a4152f..83c585572 100644 --- a/libs/video/renderer/vulkan/vulkan_lighting.c +++ b/libs/video/renderer/vulkan/vulkan_lighting.c @@ -318,8 +318,6 @@ Vulkan_Lighting_Init (vulkan_ctx_t *ctx) rp_cfg = PL_ObjectForKey (rp_def, "renderpass_1"); lctx->renderpass_1 = QFV_ParseRenderPass (ctx, rp_cfg, rp_def); #endif - lctx->cmdpool = QFV_CreateCommandPool (device, device->queue.queueFamily, - 1, 1); DARRAY_INIT (&lctx->light_mats, 16); DARRAY_INIT (&lctx->light_images, 16); @@ -354,8 +352,6 @@ Vulkan_Lighting_Init (vulkan_ctx_t *ctx) lctx->light_memory, "memory:lighting"); - __auto_type cmdSet = QFV_AllocCommandBufferSet (1, alloca); - __auto_type attach = QFV_AllocDescriptorSetLayoutSet (frames, alloca); __auto_type lights = QFV_AllocDescriptorSetLayoutSet (frames, alloca); __auto_type shadow = QFV_AllocDescriptorSetLayoutSet (frames, alloca); @@ -394,16 +390,11 @@ Vulkan_Lighting_Init (vulkan_ctx_t *ctx) shadow_set->a[i], va (ctx->va_ctx, "lighting:shadow_set:%zd", i)); - QFV_AllocateCommandBuffers (device, ctx->cmdpool, 1, cmdSet); - lframe->cmd = cmdSet->a[0]; - lframe->light_buffer = lbuffers->a[i]; QFV_BindBufferMemory (device, lbuffers->a[i], lctx->light_memory, light_offset); light_offset += light_size; - QFV_duSetObjectName (device, VK_OBJECT_TYPE_COMMAND_BUFFER, - lframe->cmd, "cmd:lighting"); for (int j = 0; j < LIGHTING_BUFFER_INFOS; j++) { lframe->bufferInfo[j] = base_buffer_info; lframe->bufferWrite[j] = base_buffer_write; @@ -466,7 +457,6 @@ Vulkan_Lighting_Shutdown (vulkan_ctx_t *ctx) clear_shadows (ctx); - dfunc->vkDestroyCommandPool (device->dev, lctx->cmdpool, 0); dfunc->vkDestroyRenderPass (device->dev, lctx->renderpass_6, 0); dfunc->vkDestroyRenderPass (device->dev, lctx->renderpass_4, 0); dfunc->vkDestroyRenderPass (device->dev, lctx->renderpass_1, 0); diff --git a/libs/video/renderer/vulkan/vulkan_output.c b/libs/video/renderer/vulkan/vulkan_output.c index 9c0c50d42..9c51b49f5 100644 --- a/libs/video/renderer/vulkan/vulkan_output.c +++ b/libs/video/renderer/vulkan/vulkan_output.c @@ -171,9 +171,9 @@ output_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto dfunc = device->funcs; auto octx = ctx->output_context; auto oframe = &octx->frames.a[ctx->curFrame]; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; - auto layout = octx->output_layout; //__auto_type pipeline = octx->output; //if (scr_fisheye) { // pipeline = octx->fisheye; @@ -255,9 +255,6 @@ Vulkan_Output_Init (vulkan_ctx_t *ctx) __auto_type pld = ctx->script_context->pipelineDef;//FIXME ctx->script_context->pipelineDef = Vulkan_GetConfig (ctx, "qf_output"); - octx->output_layout = Vulkan_CreatePipelineLayout (ctx, "output_layout"); - octx->warp_layout = Vulkan_CreatePipelineLayout (ctx, "waterwarp_layout"); - octx->fish_layout = Vulkan_CreatePipelineLayout (ctx, "fisheye_layout"); octx->sampler = Vulkan_CreateSampler (ctx, "linear"); __auto_type layouts = QFV_AllocDescriptorSetLayoutSet (frames, alloca); @@ -276,9 +273,6 @@ Vulkan_Output_Init (vulkan_ctx_t *ctx) oframe->set = sets->a[i]; QFV_AllocateCommandBuffers (device, ctx->cmdpool, 1, cmdSet); - oframe->cmd = cmdSet->a[0]; - QFV_duSetObjectName (device, VK_OBJECT_TYPE_COMMAND_BUFFER, - oframe->cmd, "cmd:output"); } ctx->script_context->pipelineDef = pld; @@ -303,9 +297,6 @@ Vulkan_Output_Shutdown (vulkan_ctx_t *ctx) auto rp = &render->renderpasses[0]; rp->beginInfo.framebuffer = 0; - dfunc->vkDestroyPipeline (device->dev, octx->output, 0); - dfunc->vkDestroyPipeline (device->dev, octx->waterwarp, 0); - dfunc->vkDestroyPipeline (device->dev, octx->fisheye, 0); free (octx->frames.a); free (octx); } diff --git a/libs/video/renderer/vulkan/vulkan_particles.c b/libs/video/renderer/vulkan/vulkan_particles.c index 6eac26572..963f8bda3 100644 --- a/libs/video/renderer/vulkan/vulkan_particles.c +++ b/libs/video/renderer/vulkan/vulkan_particles.c @@ -168,6 +168,7 @@ particles_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto dfunc = device->funcs; auto pctx = ctx->particle_context; auto pframe = &pctx->frames.a[ctx->curFrame]; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; VkDescriptorSet sets[] = { @@ -176,14 +177,14 @@ particles_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) Vulkan_Translucent_Descriptors (ctx, ctx->curFrame), }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - pctx->draw_layout, 0, 3, sets, 0, 0); + layout, 0, 3, sets, 0, 0); mat4f_t mat; mat4fidentity (mat); qfv_push_constants_t push_constants[] = { { VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof (mat4f_t), &mat }, }; - QFV_PushConstants (device, cmd, pctx->draw_layout, 1, push_constants); + QFV_PushConstants (device, cmd, layout, 1, push_constants); VkDeviceSize offsets[] = { 0 }; VkBuffer buffers[] = { pframe->states, @@ -202,6 +203,7 @@ update_particles (const exprval_t **p, exprval_t *result, exprctx_t *ectx) auto dfunc = device->funcs; auto pctx = ctx->particle_context; auto pframe = &pctx->frames.a[ctx->curFrame]; + auto layout = taskctx->pipeline->layout; qfv_packet_t *packet = QFV_PacketAcquire (pctx->stage); @@ -281,7 +283,7 @@ update_particles (const exprval_t **p, exprval_t *result, exprctx_t *ectx) pframe->newDescriptors, }; dfunc->vkCmdBindDescriptorSets (packet->cmd, VK_PIPELINE_BIND_POINT_COMPUTE, - pctx->update_layout, 0, 3, set, 0, 0); + layout, 0, 3, set, 0, 0); dfunc->vkCmdDispatch (packet->cmd, 1, 1, 1); dfunc->vkCmdSetEvent (packet->cmd, pframe->updateEvent, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); @@ -335,6 +337,7 @@ particle_physics (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto dfunc = device->funcs; auto pctx = ctx->particle_context; auto pframe = &pctx->frames.a[ctx->curFrame]; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; dfunc->vkResetEvent (device->dev, pframe->physicsEvent); @@ -345,7 +348,7 @@ particle_physics (const exprval_t **params, exprval_t *result, exprctx_t *ectx) pframe->curDescriptors, }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_COMPUTE, - pctx->physics_layout, 0, 1, set, 0, 0); + layout, 0, 1, set, 0, 0); particle_push_constants_t constants = { .gravity = pctx->psystem->gravity, @@ -359,7 +362,7 @@ particle_physics (const exprval_t **params, exprval_t *result, exprctx_t *ectx) field_offset (particle_push_constants_t, dT), sizeof (float), &constants.dT }, }; - QFV_PushConstants (device, cmd, pctx->physics_layout, 2, push_constants); + QFV_PushConstants (device, cmd, layout, 2, push_constants); dfunc->vkCmdDispatch (cmd, MaxParticles, 1, 1); dfunc->vkCmdSetEvent (cmd, pframe->physicsEvent, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); @@ -435,12 +438,6 @@ Vulkan_Particles_Init (vulkan_ctx_t *ctx) DARRAY_RESIZE (&pctx->frames, frames); pctx->frames.grow = 0; - pctx->physics_layout = Vulkan_CreatePipelineLayout (ctx, - "partphysics_layout"); - pctx->update_layout = Vulkan_CreatePipelineLayout (ctx, - "partupdate_layout"); - pctx->draw_layout = Vulkan_CreatePipelineLayout (ctx, "partdraw_layout"); - pctx->pool = Vulkan_CreateDescriptorPool (ctx, "particle_pool"); pctx->setLayout = Vulkan_CreateDescriptorSetLayout (ctx, "particle_set"); @@ -490,9 +487,6 @@ Vulkan_Particles_Shutdown (vulkan_ctx_t *ctx) QFV_DestroyResource (device, pctx->resources); free (pctx->resources); - dfunc->vkDestroyPipeline (device->dev, pctx->physics, 0); - dfunc->vkDestroyPipeline (device->dev, pctx->update, 0); - dfunc->vkDestroyPipeline (device->dev, pctx->draw, 0); free (pctx->frames.a); free (pctx); } diff --git a/libs/video/renderer/vulkan/vulkan_sprite.c b/libs/video/renderer/vulkan/vulkan_sprite.c index be14aca7f..984db3710 100644 --- a/libs/video/renderer/vulkan/vulkan_sprite.c +++ b/libs/video/renderer/vulkan/vulkan_sprite.c @@ -70,20 +70,21 @@ static void emit_commands (VkCommandBuffer cmd, qfv_sprite_t *sprite, int numPC, qfv_push_constants_t *constants, - vulkan_ctx_t *ctx, entity_t ent) + qfv_taskctx_t *taskctx, entity_t ent) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; - spritectx_t *sctx = ctx->sprite_context; + auto ctx = taskctx->ctx; + auto device = ctx->device; + auto dfunc = device->funcs; + auto layout = taskctx->pipeline->layout; Vulkan_BeginEntityLabel (ctx, cmd, ent); - QFV_PushConstants (device, cmd, sctx->layout, numPC, constants); + QFV_PushConstants (device, cmd, layout, numPC, constants); VkDescriptorSet sets[] = { sprite->descriptors, }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - sctx->layout, 1, 1, sets, 0, 0); + layout, 1, 1, sets, 0, 0); dfunc->vkCmdDraw (cmd, 4, 1, 0, 0); QFV_CmdEndLabel (device, cmd); @@ -157,7 +158,6 @@ Vulkan_Sprint_FreeDescriptors (vulkan_ctx_t *ctx, qfv_sprite_t *sprite) static void sprite_draw_ent (qfv_taskctx_t *taskctx, entity_t ent) { - auto ctx = taskctx->ctx; renderer_t *renderer = Ent_GetComponent (ent.id, scene_renderer, ent.reg); auto model = renderer->model; msprite_t *sprite = model->cache.data; @@ -183,7 +183,7 @@ sprite_draw_ent (qfv_taskctx_t *taskctx, entity_t ent) emit_commands (taskctx->cmd, (qfv_sprite_t *) ((byte *) sprite + sprite->data), - 2, push_constants, ctx, ent); + 2, push_constants, taskctx, ent); } static void @@ -193,14 +193,14 @@ sprite_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) auto ctx = taskctx->ctx; auto device = ctx->device; auto dfunc = device->funcs; - auto sctx = ctx->sprite_context; + auto layout = taskctx->pipeline->layout; auto cmd = taskctx->cmd; VkDescriptorSet sets[] = { Vulkan_Matrix_Descriptors (ctx, ctx->curFrame), }; dfunc->vkCmdBindDescriptorSets (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - sctx->layout, 0, 1, sets, 0, 0); + layout, 0, 1, sets, 0, 0); auto queue = r_ent_queue; //FIXME fetch from scene for (size_t i = 0; i < queue->ent_queues[mod_sprite].size; i++) { @@ -227,13 +227,6 @@ Vulkan_Sprite_Init (vulkan_ctx_t *ctx) spritectx_t *sctx = calloc (1, sizeof (spritectx_t)); ctx->sprite_context = sctx; - auto rctx = ctx->render_context; - size_t frames = rctx->frames.size; - DARRAY_INIT (&sctx->frames, frames); - DARRAY_RESIZE (&sctx->frames, frames); - sctx->frames.grow = 0; - - sctx->layout = Vulkan_CreatePipelineLayout (ctx, "sprite_layout"); sctx->sampler = Vulkan_CreateSampler (ctx, "sprite_sampler"); sctx->pool = Vulkan_CreateDescriptorPool (ctx, "sprite_pool"); @@ -245,12 +238,7 @@ Vulkan_Sprite_Init (vulkan_ctx_t *ctx) void Vulkan_Sprite_Shutdown (vulkan_ctx_t *ctx) { - qfv_device_t *device = ctx->device; - qfv_devfuncs_t *dfunc = device->funcs; spritectx_t *sctx = ctx->sprite_context; - dfunc->vkDestroyPipeline (device->dev, sctx->depth, 0); - dfunc->vkDestroyPipeline (device->dev, sctx->gbuf, 0); - free (sctx->frames.a); free (sctx); }