From 4e2d713400cb7b611aa449ef8a934426455f2f0d Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 18 Apr 2024 10:16:44 +0900 Subject: [PATCH] [vulkan] Optionally include vertex shader in tex update The particle renderer uses the palette texture in the vertex shader, so updating the palette needs the vertex shader stage included in the barrier, but I imagine not all texture updates will need it, so add a parameter to Vulkan_UpdateTex to select inclusion. --- include/QF/Vulkan/qf_texture.h | 2 +- libs/video/renderer/vulkan/vulkan_palette.c | 2 +- libs/video/renderer/vulkan/vulkan_texture.c | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/QF/Vulkan/qf_texture.h b/include/QF/Vulkan/qf_texture.h index 6035d38ed..b6d6c0a66 100644 --- a/include/QF/Vulkan/qf_texture.h +++ b/include/QF/Vulkan/qf_texture.h @@ -26,7 +26,7 @@ qfv_tex_t *Vulkan_LoadEnvSides (struct vulkan_ctx_s *ctx, tex_t **tex, const char *name); VkImageView Vulkan_TexImageView (qfv_tex_t *tex) __attribute__((pure)); void Vulkan_UpdateTex (struct vulkan_ctx_s *ctx, qfv_tex_t *tex, tex_t *src, - int x, int y, int layer, int mip); + int x, int y, int layer, int mip, bool vert); void Vulkan_UnloadTex (struct vulkan_ctx_s *ctx, qfv_tex_t *tex); void Vulkan_Texture_Init (struct vulkan_ctx_s *ctx); VkDescriptorSet Vulkan_CreateCombinedImageSampler (struct vulkan_ctx_s *ctx, diff --git a/libs/video/renderer/vulkan/vulkan_palette.c b/libs/video/renderer/vulkan/vulkan_palette.c index 08efdc998..01ae697d9 100644 --- a/libs/video/renderer/vulkan/vulkan_palette.c +++ b/libs/video/renderer/vulkan/vulkan_palette.c @@ -60,7 +60,7 @@ Vulkan_Palette_Update (vulkan_ctx_t *ctx, const byte *palette) .loaded = 1, .data = (byte *) palette, }; - Vulkan_UpdateTex (ctx, pctx->palette, &tex, 0, 0, 0, 0); + Vulkan_UpdateTex (ctx, pctx->palette, &tex, 0, 0, 0, 0, true); } static void diff --git a/libs/video/renderer/vulkan/vulkan_texture.c b/libs/video/renderer/vulkan/vulkan_texture.c index de0f920ed..f8eeeb5ff 100644 --- a/libs/video/renderer/vulkan/vulkan_texture.c +++ b/libs/video/renderer/vulkan/vulkan_texture.c @@ -413,7 +413,7 @@ Vulkan_TexImageView (qfv_tex_t *tex) void Vulkan_UpdateTex (vulkan_ctx_t *ctx, qfv_tex_t *tex, tex_t *src, - int x, int y, int layer, int mip) + int x, int y, int layer, int mip, bool vert) { qfv_device_t *device = ctx->device; qfv_devfuncs_t *dfunc = device->funcs; @@ -451,6 +451,9 @@ Vulkan_UpdateTex (vulkan_ctx_t *ctx, qfv_tex_t *tex, tex_t *src, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©); ib = imageBarriers[qfv_LT_TransferDst_to_ShaderReadOnly]; + if (vert) { + ib.dstStages |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT; + } ib.barrier.image = tex->image; ib.barrier.subresourceRange.levelCount = VK_REMAINING_MIP_LEVELS; ib.barrier.subresourceRange.layerCount = VK_REMAINING_ARRAY_LAYERS;