aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2025-11-18 18:16:00 +0100
committerAndre Weissflog <floooh@gmail.com>2025-11-18 18:16:00 +0100
commit09a31200a381974c0ecd2b1e94be9f66f62a35a5 (patch)
treebc019b6211b22dff1767b2eb8c59b5aedea7e468
parent56c14ffa42f83543796d05607d3cf8b2d7014fbe (diff)
sokol_gfx.h vk: fix remaining sync-validation errors
-rw-r--r--sokol_gfx.h59
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) {