mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 12:52:46 +00:00
[vulkan] Use vkCmdPushDescriptorSetKHR for bsp
This makes switching textures on the fly much easier.
This commit is contained in:
parent
9e03096da6
commit
2c1a335715
5 changed files with 18 additions and 36 deletions
|
@ -170,6 +170,7 @@ DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdBindPipeline)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdClearColorImage)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdClearColorImage)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdExecuteCommands)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdExecuteCommands)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdPushConstants)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdPushConstants)
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdPushDescriptorSetKHR)
|
||||||
|
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdSetViewport)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdSetViewport)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdSetScissor)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCmdSetScissor)
|
||||||
|
|
|
@ -64,7 +64,6 @@ typedef struct bspframe_s {
|
||||||
VkCommandBuffer bsp_cmd;
|
VkCommandBuffer bsp_cmd;
|
||||||
VkCommandBuffer turb_cmd;
|
VkCommandBuffer turb_cmd;
|
||||||
VkCommandBuffer sky_cmd;
|
VkCommandBuffer sky_cmd;
|
||||||
VkDescriptorSet descriptors;
|
|
||||||
} bspframe_t;
|
} bspframe_t;
|
||||||
|
|
||||||
typedef struct bspframeset_s
|
typedef struct bspframeset_s
|
||||||
|
|
|
@ -63,20 +63,6 @@
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
quakebsp = {
|
|
||||||
flags = 0;
|
|
||||||
maxSets = $framebuffers.size;
|
|
||||||
bindings = (
|
|
||||||
{
|
|
||||||
type = uniform_buffer;
|
|
||||||
descriptorCount = $framebuffers.size;
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = combined_image_sampler;
|
|
||||||
descriptorCount = "5z * $framebuffers.size";
|
|
||||||
},
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
setLayouts = {
|
setLayouts = {
|
||||||
twod = {
|
twod = {
|
||||||
|
@ -96,6 +82,7 @@
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
quakebsp = {
|
quakebsp = {
|
||||||
|
flags = push_descriptor;
|
||||||
bindings = (
|
bindings = (
|
||||||
{
|
{
|
||||||
binding = 0;
|
binding = 0;
|
||||||
|
|
|
@ -831,32 +831,31 @@ bsp_begin (vulkan_ctx_t *ctx)
|
||||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL },
|
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL },
|
||||||
};
|
};
|
||||||
VkWriteDescriptorSet write[] = {
|
VkWriteDescriptorSet write[] = {
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 0, 0, 1,
|
0, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
||||||
0, &bufferInfo, 0 },
|
0, &bufferInfo, 0 },
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 1, 0, 1,
|
1, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
&imageInfo[0], 0, 0 },
|
&imageInfo[0], 0, 0 },
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 2, 0, 1,
|
2, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
&imageInfo[1], 0, 0 },
|
&imageInfo[1], 0, 0 },
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 3, 0, 1,
|
3, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
&imageInfo[2], 0, 0 },
|
&imageInfo[2], 0, 0 },
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 4, 0, 1,
|
4, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
&imageInfo[3], 0, 0 },
|
&imageInfo[3], 0, 0 },
|
||||||
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0,
|
{ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 0, 0,
|
||||||
bframe->descriptors, 5, 0, 1,
|
5, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
&imageInfo[4], 0, 0 },
|
&imageInfo[4], 0, 0 },
|
||||||
};
|
};
|
||||||
dfunc->vkUpdateDescriptorSets (device->dev, 5, write, 0, 0);
|
|
||||||
|
|
||||||
dfunc->vkResetCommandBuffer (cmd, 0);
|
dfunc->vkResetCommandBuffer (cmd, 0);
|
||||||
VkCommandBufferInheritanceInfo inherit = {
|
VkCommandBufferInheritanceInfo inherit = {
|
||||||
|
@ -884,10 +883,8 @@ bsp_begin (vulkan_ctx_t *ctx)
|
||||||
dfunc->vkCmdBindIndexBuffer (cmd, bctx->index_buffer, bframe->index_offset,
|
dfunc->vkCmdBindIndexBuffer (cmd, bctx->index_buffer, bframe->index_offset,
|
||||||
VK_INDEX_TYPE_UINT32);
|
VK_INDEX_TYPE_UINT32);
|
||||||
|
|
||||||
VkDescriptorSet set = bframe->descriptors;
|
dfunc->vkCmdPushDescriptorSetKHR (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
VkPipelineLayout layout = bctx->layout;
|
bctx->layout, 0, 5, write);
|
||||||
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;
|
||||||
|
@ -1296,20 +1293,16 @@ Vulkan_Bsp_Init (vulkan_ctx_t *ctx)
|
||||||
for (size_t i = 0; i < layouts->size; i++) {
|
for (size_t i = 0; i < layouts->size; i++) {
|
||||||
layouts->a[i] = QFV_GetDescriptorSetLayout (ctx, "quakebsp");
|
layouts->a[i] = QFV_GetDescriptorSetLayout (ctx, "quakebsp");
|
||||||
}
|
}
|
||||||
__auto_type pool = QFV_GetDescriptorPool (ctx, "quakebsp");
|
|
||||||
|
|
||||||
__auto_type cmdBuffers = QFV_AllocCommandBufferSet (3 * frames, alloca);
|
__auto_type cmdBuffers = QFV_AllocCommandBufferSet (3 * frames, alloca);
|
||||||
QFV_AllocateCommandBuffers (device, ctx->cmdpool, 1, cmdBuffers);
|
QFV_AllocateCommandBuffers (device, ctx->cmdpool, 1, cmdBuffers);
|
||||||
|
|
||||||
__auto_type sets = QFV_AllocateDescriptorSet (device, pool, layouts);
|
|
||||||
for (size_t i = 0; i < frames; i++) {
|
for (size_t i = 0; i < frames; i++) {
|
||||||
__auto_type bframe = &bctx->frames.a[i];
|
__auto_type bframe = &bctx->frames.a[i];
|
||||||
bframe->descriptors = sets->a[i];
|
|
||||||
bframe->bsp_cmd = cmdBuffers->a[i];
|
bframe->bsp_cmd = cmdBuffers->a[i];
|
||||||
bframe->turb_cmd = cmdBuffers->a[i];
|
bframe->turb_cmd = cmdBuffers->a[i];
|
||||||
bframe->sky_cmd = cmdBuffers->a[i];
|
bframe->sky_cmd = cmdBuffers->a[i];
|
||||||
}
|
}
|
||||||
free (sets);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -132,11 +132,13 @@ Vulkan_Init_Cvars (void)
|
||||||
|
|
||||||
static const char *instance_extensions[] = {
|
static const char *instance_extensions[] = {
|
||||||
VK_KHR_SURFACE_EXTENSION_NAME,
|
VK_KHR_SURFACE_EXTENSION_NAME,
|
||||||
|
VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *device_extensions[] = {
|
static const char *device_extensions[] = {
|
||||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
||||||
|
VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue