diff options
| author | Andre Weissflog <floooh@gmail.com> | 2025-11-18 18:16:00 +0100 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2025-11-18 18:16:00 +0100 |
| commit | 09a31200a381974c0ecd2b1e94be9f66f62a35a5 (patch) | |
| tree | bc019b6211b22dff1767b2eb8c59b5aedea7e468 | |
| parent | 56c14ffa42f83543796d05607d3cf8b2d7014fbe (diff) | |
sokol_gfx.h vk: fix remaining sync-validation errors
| -rw-r--r-- | sokol_gfx.h | 59 |
1 files changed, 18 insertions, 41 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h index c1535cbb..c0c45268 100644 --- a/sokol_gfx.h +++ b/sokol_gfx.h @@ -18553,43 +18553,15 @@ _SOKOL_PRIVATE bool _sg_vk_is_read_access(_sg_vk_access_t access) { return 0 == (access & ~read_bits); } -// return pipeline stages on 'before' side of a barrier -_SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_src_stage_mask(_sg_vk_access_t access) { +_SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_stage_mask(_sg_vk_access_t access, bool is_dst_access) { access &= ~_SG_VK_ACCESS_DISCARD; + if (is_dst_access) { + SOKOL_ASSERT(access != _SG_VK_ACCESS_NONE); + } VkPipelineStageFlags2 f = 0; if (access == _SG_VK_ACCESS_NONE) { return VK_PIPELINE_STAGE_2_NONE; } - if (_sg_vk_is_read_access(access)) { - return VK_PIPELINE_STAGE_2_NONE; - } - if (access & _SG_VK_ACCESS_STAGING) { - f |= VK_PIPELINE_STAGE_2_COPY_BIT; - } - if (access & _SG_VK_ACCESS_STORAGEBUFFER_RW) { - f |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; - } - if (access & _SG_VK_ACCESS_STORAGEIMAGE) { - f |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; - } - if (access & _SG_VK_ACCESS_COLOR_ATTACHMENT) { - f |= VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; - } - if (access & _SG_VK_ACCESS_RESOLVE_ATTACHMENT) { - f |= VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; - } - if (access & (_SG_VK_ACCESS_DEPTH_ATTACHMENT|_SG_VK_ACCESS_STENCIL_ATTACHMENT)) { - f |= VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT; - } - SOKOL_ASSERT(f != 0); - return f; -} - -// return pipeline stage on 'after side' of a barrier -_SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_dst_stage_mask(_sg_vk_access_t access) { - access &= ~_SG_VK_ACCESS_DISCARD; - SOKOL_ASSERT(access != _SG_VK_ACCESS_NONE); - VkPipelineStageFlags2 f = 0; if (access & _SG_VK_ACCESS_PRESENT) { return VK_PIPELINE_STAGE_2_NONE; } @@ -18602,24 +18574,19 @@ _SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_dst_stage_mask(_sg_vk_access_t acces if (access & _SG_VK_ACCESS_INDEXBUFFER) { f |= VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT; } - if (access & _SG_VK_ACCESS_STORAGEBUFFER_RO) { + if (access & (_SG_VK_ACCESS_STORAGEBUFFER_RO|_SG_VK_ACCESS_TEXTURE)) { f |= VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; } if (access & _SG_VK_ACCESS_STORAGEBUFFER_RW) { - f |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; - } - if (access & _SG_VK_ACCESS_TEXTURE) { - f |= VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT | - VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | - VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + f |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; } if (access & _SG_VK_ACCESS_STORAGEIMAGE) { - f |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; + f |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; } if (access & _SG_VK_ACCESS_COLOR_ATTACHMENT) { - f |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + f |= VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; } if (access & _SG_VK_ACCESS_RESOLVE_ATTACHMENT) { f |= VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; @@ -18631,6 +18598,16 @@ _SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_dst_stage_mask(_sg_vk_access_t acces return f; } +// return pipeline stages on 'before' side of a barrier +_SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_src_stage_mask(_sg_vk_access_t access) { + return _sg_vk_stage_mask(access, false); +} + +// return pipeline stage on 'after side' of a barrier +_SOKOL_PRIVATE VkPipelineStageFlags2 _sg_vk_dst_stage_mask(_sg_vk_access_t access) { + return _sg_vk_stage_mask(access, true); +} + _SOKOL_PRIVATE VkAccessFlags2 _sg_vk_access_mask(_sg_vk_access_t access, bool is_dst_access) { access &= ~_SG_VK_ACCESS_DISCARD; if (access == _SG_VK_ACCESS_NONE) { |