mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-04-08 02:12:17 +00:00
[vulkan] Clean out old pipeline and layout refs
It's not perfect as some subsystems still create resources from the old system (necessarily), but this cleans up a lot of the mess.
This commit is contained in:
parent
5140346c22
commit
92368eafb2
18 changed files with 43 additions and 157 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -254,7 +254,7 @@ setLayouts = {
|
|||
binding = 0;
|
||||
descriptorType = uniform_buffer;
|
||||
descriptorCount = 1;
|
||||
stageFlags = vertex|geometry;
|
||||
stageFlags = vertex|geometry|fragment;
|
||||
},
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue