mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 04:42:32 +00:00
[vulkan] Destroy frame buffers on shutdown
With this, the new render system, though not doing anything useful, at least passes validation.
This commit is contained in:
parent
25cfef18d6
commit
3de39f5408
3 changed files with 35 additions and 26 deletions
|
@ -384,6 +384,7 @@ void QFV_Render_AddTasks (struct vulkan_ctx_s *ctx, exprsym_t *task_sys);
|
||||||
void QFV_CreateFramebuffer (struct vulkan_ctx_s *ctx, qfv_renderpass_t *rp);
|
void QFV_CreateFramebuffer (struct vulkan_ctx_s *ctx, qfv_renderpass_t *rp);
|
||||||
|
|
||||||
qfv_step_t *QFV_GetStep (const exprval_t *param, qfv_job_t *job);
|
qfv_step_t *QFV_GetStep (const exprval_t *param, qfv_job_t *job);
|
||||||
|
qfv_step_t *QFV_FindStep (const char *step, qfv_job_t *job) __attribute__((pure));
|
||||||
#endif//__QFCC__
|
#endif//__QFCC__
|
||||||
|
|
||||||
#endif//__QF_Vulkan_render_h
|
#endif//__QF_Vulkan_render_h
|
||||||
|
|
|
@ -280,24 +280,6 @@ QFV_RunRenderJob (vulkan_ctx_t *ctx)
|
||||||
dfunc->vkQueuePresentKHR (queue->queue, &presentInfo);
|
dfunc->vkQueuePresentKHR (queue->queue, &presentInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void
|
|
||||||
QFV_DestroyFramebuffer (vulkan_ctx_t *ctx)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
__auto_type rctx = ctx->render_context;
|
|
||||||
__auto_type job = rctx->job;
|
|
||||||
__auto_type rp = &job->renderpasses[0];
|
|
||||||
|
|
||||||
if (rp->beginInfo.framebuffer) {
|
|
||||||
VkFramebuffer framebuffer = rp->beginInfo.framebuffer;
|
|
||||||
rp->beginInfo.framebuffer = 0;
|
|
||||||
dfunc->vkDestroyFramebuffer (device->dev, framebuffer, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static VkImageView __attribute__((pure))
|
static VkImageView __attribute__((pure))
|
||||||
find_imageview (qfv_reference_t *ref, qfv_renderctx_t *rctx)
|
find_imageview (qfv_reference_t *ref, qfv_renderctx_t *rctx)
|
||||||
{
|
{
|
||||||
|
@ -485,6 +467,18 @@ QFV_Render_Shutdown (vulkan_ctx_t *ctx)
|
||||||
QFV_DestroyResource (ctx->device, job->resources);
|
QFV_DestroyResource (ctx->device, job->resources);
|
||||||
free (job->resources);
|
free (job->resources);
|
||||||
}
|
}
|
||||||
|
for (uint32_t i = 0; i < job->num_steps; i++) {
|
||||||
|
if (job->steps[i].render) {
|
||||||
|
auto render = job->steps[i].render;
|
||||||
|
for (uint32_t j = 0; j < render->num_renderpasses; j++) {
|
||||||
|
auto bi = &render->renderpasses[j].beginInfo;
|
||||||
|
if (bi->framebuffer) {
|
||||||
|
dfunc->vkDestroyFramebuffer (device->dev,
|
||||||
|
bi->framebuffer, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
job->command_pool = 0;
|
job->command_pool = 0;
|
||||||
DARRAY_CLEAR (&job->commands);
|
DARRAY_CLEAR (&job->commands);
|
||||||
free (rctx->job);
|
free (rctx->job);
|
||||||
|
@ -525,6 +519,18 @@ QFV_Render_AddTasks (vulkan_ctx_t *ctx, exprsym_t *task_syms)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qfv_step_t *
|
||||||
|
QFV_FindStep (const char *name, qfv_job_t *job)
|
||||||
|
{
|
||||||
|
for (uint32_t i = 0; i < job->num_steps; i++) {
|
||||||
|
auto step = &job->steps[i];
|
||||||
|
if (!strcmp (step->label.name, name)) {
|
||||||
|
return step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
qfv_step_t *
|
qfv_step_t *
|
||||||
QFV_GetStep (const exprval_t *param, qfv_job_t *job)
|
QFV_GetStep (const exprval_t *param, qfv_job_t *job)
|
||||||
{
|
{
|
||||||
|
@ -540,14 +546,7 @@ QFV_GetStep (const exprval_t *param, qfv_job_t *job)
|
||||||
}
|
}
|
||||||
auto name = *(const char **)stepref->value;
|
auto name = *(const char **)stepref->value;
|
||||||
stepref->type = &cexpr_voidptr;
|
stepref->type = &cexpr_voidptr;
|
||||||
*(void **)stepref->value = 0;
|
*(qfv_step_t **)stepref->value = QFV_FindStep (name, job);
|
||||||
for (uint32_t i = 0; i < job->num_steps; i++) {
|
|
||||||
auto step = &job->steps[i];
|
|
||||||
if (!strcmp (step->label.name, name)) {
|
|
||||||
*(void **)stepref->value = step;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return *(qfv_step_t **)stepref->value;
|
return *(qfv_step_t **)stepref->value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -442,6 +442,15 @@ Vulkan_Output_Shutdown (vulkan_ctx_t *ctx)
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
qfv_devfuncs_t *dfunc = device->funcs;
|
||||||
outputctx_t *octx = ctx->output_context;
|
outputctx_t *octx = ctx->output_context;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < ctx->swapchain->imageViews->size; i++) {
|
||||||
|
dfunc->vkDestroyFramebuffer (device->dev, octx->framebuffers[i], 0);
|
||||||
|
}
|
||||||
|
free (octx->framebuffers);
|
||||||
|
auto step = QFV_FindStep ("output", ctx->render_context->job);
|
||||||
|
auto render = step->render;
|
||||||
|
auto rp = &render->renderpasses[0];
|
||||||
|
rp->beginInfo.framebuffer = 0;
|
||||||
|
|
||||||
dfunc->vkDestroyPipeline (device->dev, octx->output, 0);
|
dfunc->vkDestroyPipeline (device->dev, octx->output, 0);
|
||||||
dfunc->vkDestroyPipeline (device->dev, octx->waterwarp, 0);
|
dfunc->vkDestroyPipeline (device->dev, octx->waterwarp, 0);
|
||||||
dfunc->vkDestroyPipeline (device->dev, octx->fisheye, 0);
|
dfunc->vkDestroyPipeline (device->dev, octx->fisheye, 0);
|
||||||
|
|
Loading…
Reference in a new issue