mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-18 01:51:44 +00:00
vk: force clean up vertex push constants
This commit is contained in:
parent
833932ce44
commit
b685aa4683
6 changed files with 25 additions and 12 deletions
|
@ -213,6 +213,8 @@ typedef enum
|
||||||
// Vulkan constants: command and dynamic buffer count
|
// Vulkan constants: command and dynamic buffer count
|
||||||
#define NUM_CMDBUFFERS 32
|
#define NUM_CMDBUFFERS 32
|
||||||
#define NUM_DYNBUFFERS 2
|
#define NUM_DYNBUFFERS 2
|
||||||
|
#define PUSH_CONSTANT_VERTEX_SIZE 17
|
||||||
|
#define PUSH_CONSTANT_FRAGMENT_SIZE 11
|
||||||
|
|
||||||
// Vulkan instance
|
// Vulkan instance
|
||||||
extern VkInstance vk_instance;
|
extern VkInstance vk_instance;
|
||||||
|
|
|
@ -2676,6 +2676,7 @@ QVk_Draw2DCallsRender(void)
|
||||||
uint8_t *vertData, *uboData;
|
uint8_t *vertData, *uboData;
|
||||||
VkBuffer vbo;
|
VkBuffer vbo;
|
||||||
uint32_t uboOffset;
|
uint32_t uboOffset;
|
||||||
|
float dummy[PUSH_CONSTANT_VERTEX_SIZE] = {0};
|
||||||
|
|
||||||
float imgTransform[] = {
|
float imgTransform[] = {
|
||||||
0, 0,
|
0, 0,
|
||||||
|
@ -2692,6 +2693,8 @@ QVk_Draw2DCallsRender(void)
|
||||||
memcpy(vertData, draw2dcolor_calls, vertSize);
|
memcpy(vertData, draw2dcolor_calls, vertSize);
|
||||||
|
|
||||||
QVk_BindPipeline(&vk_drawColorQuadPipeline[draw2dcolor_rpType]);
|
QVk_BindPipeline(&vk_drawColorQuadPipeline[draw2dcolor_rpType]);
|
||||||
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_worldWarpPipeline.layout,
|
||||||
|
VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(dummy), dummy);
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
vk_drawColorQuadPipeline[draw2dcolor_rpType].layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
vk_drawColorQuadPipeline[draw2dcolor_rpType].layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1,
|
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1,
|
||||||
|
@ -2708,6 +2711,7 @@ QVk_Draw2DCallsRender(void)
|
||||||
VkBuffer vbo;
|
VkBuffer vbo;
|
||||||
uint32_t uboOffset;
|
uint32_t uboOffset;
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
float dummy[PUSH_CONSTANT_VERTEX_SIZE] = {0};
|
||||||
|
|
||||||
float imgTransform[] = {
|
float imgTransform[] = {
|
||||||
0, 0, 1.0, 1.0,
|
0, 0, 1.0, 1.0,
|
||||||
|
@ -2723,8 +2727,10 @@ QVk_Draw2DCallsRender(void)
|
||||||
uboDescriptorSet
|
uboDescriptorSet
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_worldWarpPipeline.layout,
|
||||||
|
VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(dummy), dummy);
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
vertSize = draw2dcolor_num * 16 * sizeof(float);
|
vertSize = draw2dcolor_num * 16 * sizeof(float);
|
||||||
vertData = QVk_GetVertexBuffer(vertSize, &vbo, &vboOffset);
|
vertData = QVk_GetVertexBuffer(vertSize, &vbo, &vboOffset);
|
||||||
|
|
|
@ -217,7 +217,7 @@ R_DrawSpriteModel(entity_t *currententity, const model_t *currentmodel)
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
if (currententity->frame < currentmodel->numskins)
|
if (currententity->frame < currentmodel->numskins)
|
||||||
{
|
{
|
||||||
|
@ -510,7 +510,7 @@ Vk_DrawParticles(int num_particles, const particle_t particles[])
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
if (vk_custom_particles->value == 2)
|
if (vk_custom_particles->value == 2)
|
||||||
{
|
{
|
||||||
|
@ -898,7 +898,8 @@ R_SetupVulkan (void)
|
||||||
// precalculate view-projection matrix
|
// precalculate view-projection matrix
|
||||||
Mat_Mul(r_view_matrix, r_projection_matrix, r_viewproj_matrix);
|
Mat_Mul(r_view_matrix, r_projection_matrix, r_viewproj_matrix);
|
||||||
// view-projection matrix will always be stored as the first push constant item, so set no offset
|
// view-projection matrix will always be stored as the first push constant item, so set no offset
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
|
VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void R_Flash( void )
|
static void R_Flash( void )
|
||||||
|
@ -989,6 +990,8 @@ RE_RenderView(refdef_t *fd)
|
||||||
|
|
||||||
qboolean RE_EndWorldRenderpass(void)
|
qboolean RE_EndWorldRenderpass(void)
|
||||||
{
|
{
|
||||||
|
float dummy[PUSH_CONSTANT_VERTEX_SIZE] = {0};
|
||||||
|
|
||||||
// still some issues?
|
// still some issues?
|
||||||
if (!vk_frameStarted)
|
if (!vk_frameStarted)
|
||||||
{
|
{
|
||||||
|
@ -1035,7 +1038,9 @@ qboolean RE_EndWorldRenderpass(void)
|
||||||
r_newrefdef.height,
|
r_newrefdef.height,
|
||||||
};
|
};
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_worldWarpPipeline.layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_worldWarpPipeline.layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(pushConsts), pushConsts);
|
VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(dummy), dummy);
|
||||||
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_worldWarpPipeline.layout,
|
||||||
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(pushConsts), pushConsts);
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_worldWarpPipeline.layout, 0, 1, &vk_colorbuffer.descriptorSet, 0, NULL);
|
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_worldWarpPipeline.layout, 0, 1, &vk_colorbuffer.descriptorSet, 0, NULL);
|
||||||
QVk_BindPipeline(&vk_worldWarpPipeline);
|
QVk_BindPipeline(&vk_worldWarpPipeline);
|
||||||
// Restore full viewport for future steps.
|
// Restore full viewport for future steps.
|
||||||
|
@ -1068,7 +1073,7 @@ R_SetVulkan2D(const VkViewport* viewport, const VkRect2D* scissor)
|
||||||
{
|
{
|
||||||
float pushConsts[] = { vk_postprocess->value, (2.1 - vid_gamma->value)};
|
float pushConsts[] = { vk_postprocess->value, (2.1 - vid_gamma->value)};
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_postprocessPipeline.layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_postprocessPipeline.layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(pushConsts), pushConsts);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(pushConsts), pushConsts);
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_postprocessPipeline.layout, 0, 1, &vk_colorbufferWarp.descriptorSet, 0, NULL);
|
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_postprocessPipeline.layout, 0, 1, &vk_colorbufferWarp.descriptorSet, 0, NULL);
|
||||||
QVk_BindPipeline(&vk_postprocessPipeline);
|
QVk_BindPipeline(&vk_postprocessPipeline);
|
||||||
vkCmdDraw(vk_activeCmdbuffer, 3, 1, 0, 0);
|
vkCmdDraw(vk_activeCmdbuffer, 3, 1, 0, 0);
|
||||||
|
|
|
@ -164,12 +164,12 @@ void QVk_CreatePipeline(const VkDescriptorSetLayout *descriptorLayout,
|
||||||
{
|
{
|
||||||
.stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
|
.stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
|
||||||
.offset = 0,
|
.offset = 0,
|
||||||
.size = 17 * sizeof(float)
|
.size = PUSH_CONSTANT_VERTEX_SIZE * sizeof(float)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
|
.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||||
.offset = 17 * sizeof(float),
|
.offset = PUSH_CONSTANT_VERTEX_SIZE * sizeof(float),
|
||||||
.size = 11 * sizeof(float)
|
.size = PUSH_CONSTANT_FRAGMENT_SIZE * sizeof(float)
|
||||||
}};
|
}};
|
||||||
|
|
||||||
VkPipelineLayoutCreateInfo plCreateInfo = {
|
VkPipelineLayoutCreateInfo plCreateInfo = {
|
||||||
|
|
|
@ -78,7 +78,7 @@ DrawVkPoly(msurface_t *fa, image_t *texture, const float *color)
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
Mesh_VertsRealloc((p->numverts - 2) * 3);
|
Mesh_VertsRealloc((p->numverts - 2) * 3);
|
||||||
GenFanIndexes(vertIdxData, 0, p->numverts - 2);
|
GenFanIndexes(vertIdxData, 0, p->numverts - 2);
|
||||||
|
|
|
@ -109,7 +109,7 @@ EmitWaterPolys(msurface_t *fa, image_t *texture, const float *modelMatrix,
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
if (solid_surface)
|
if (solid_surface)
|
||||||
{
|
{
|
||||||
|
@ -253,7 +253,7 @@ R_DrawSkyBox(void)
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
float gamma = 2.1F - vid_gamma->value;
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
VK_SHADER_STAGE_FRAGMENT_BIT, PUSH_CONSTANT_VERTEX_SIZE * sizeof(float), sizeof(gamma), &gamma);
|
||||||
|
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
vk_drawSkyboxPipeline.layout, 0, 2, descriptorSets, 1, &uboOffset);
|
vk_drawSkyboxPipeline.layout, 0, 2, descriptorSets, 1, &uboOffset);
|
||||||
|
|
Loading…
Reference in a new issue