blob: 0460a6aae3c04411a18b3ae785d9b5cb1d460cf2 [file] [log] [blame]
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
// See helper_file_generator.py for modifications
/***************************************************************************
*
* Copyright (c) 2015-2021 The Khronos Group Inc.
* Copyright (c) 2015-2021 Valve Corporation
* Copyright (c) 2015-2021 LunarG, Inc.
* Copyright (c) 2015-2021 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Author: Mark Lobodzinski <mark@lunarg.com>
* Author: Courtney Goeltzenleuchter <courtneygo@google.com>
* Author: Tobin Ehlis <tobine@google.com>
* Author: Chris Forbes <chrisforbes@google.com>
* Author: John Zulauf<jzulauf@lunarg.com>
*
****************************************************************************/
#include "synchronization_validation_types.h"
// clang-format off
// Unique bit for each stage/access combination
// Map of the StageAccessIndices from the StageAccess Bit
const std::unordered_map<SyncStageAccessFlags, SyncStageAccessIndex> syncStageAccessIndexByStageAccessBit = {
{ SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT, SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ },
{ SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT },
{ SYNC_VERTEX_INPUT_INDEX_READ_BIT, SYNC_VERTEX_INPUT_INDEX_READ },
{ SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ_BIT, SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ },
{ SYNC_VERTEX_SHADER_SHADER_READ_BIT, SYNC_VERTEX_SHADER_SHADER_READ },
{ SYNC_VERTEX_SHADER_SHADER_WRITE_BIT, SYNC_VERTEX_SHADER_SHADER_WRITE },
{ SYNC_VERTEX_SHADER_UNIFORM_READ_BIT, SYNC_VERTEX_SHADER_UNIFORM_READ },
{ SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ_BIT, SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ },
{ SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE_BIT, SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE },
{ SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT, SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ },
{ SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ },
{ SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE },
{ SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ },
{ SYNC_GEOMETRY_SHADER_SHADER_READ_BIT, SYNC_GEOMETRY_SHADER_SHADER_READ },
{ SYNC_GEOMETRY_SHADER_SHADER_WRITE_BIT, SYNC_GEOMETRY_SHADER_SHADER_WRITE },
{ SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT, SYNC_GEOMETRY_SHADER_UNIFORM_READ },
{ SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT },
{ SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT },
{ SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT },
{ SYNC_TASK_SHADER_NV_SHADER_READ_BIT, SYNC_TASK_SHADER_NV_SHADER_READ },
{ SYNC_TASK_SHADER_NV_SHADER_WRITE_BIT, SYNC_TASK_SHADER_NV_SHADER_WRITE },
{ SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT, SYNC_TASK_SHADER_NV_UNIFORM_READ },
{ SYNC_MESH_SHADER_NV_SHADER_READ_BIT, SYNC_MESH_SHADER_NV_SHADER_READ },
{ SYNC_MESH_SHADER_NV_SHADER_WRITE_BIT, SYNC_MESH_SHADER_NV_SHADER_WRITE },
{ SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT, SYNC_MESH_SHADER_NV_UNIFORM_READ },
{ SYNC_SHADING_RATE_IMAGE_BIT_NV_SHADING_RATE_IMAGE_READ_BIT_NV, SYNC_SHADING_RATE_IMAGE_NV_SHADING_RATE_IMAGE_READ_NV },
{ SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ },
{ SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE },
{ SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT, SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ },
{ SYNC_FRAGMENT_SHADER_SHADER_READ_BIT, SYNC_FRAGMENT_SHADER_SHADER_READ },
{ SYNC_FRAGMENT_SHADER_SHADER_WRITE_BIT, SYNC_FRAGMENT_SHADER_SHADER_WRITE },
{ SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT, SYNC_FRAGMENT_SHADER_UNIFORM_READ },
{ SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ },
{ SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE },
{ SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ },
{ SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT },
{ SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE },
{ SYNC_COMPUTE_SHADER_SHADER_READ_BIT, SYNC_COMPUTE_SHADER_SHADER_READ },
{ SYNC_COMPUTE_SHADER_SHADER_WRITE_BIT, SYNC_COMPUTE_SHADER_SHADER_WRITE },
{ SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT, SYNC_COMPUTE_SHADER_UNIFORM_READ },
{ SYNC_TRANSFER_TRANSFER_READ_BIT, SYNC_TRANSFER_TRANSFER_READ },
{ SYNC_TRANSFER_TRANSFER_WRITE_BIT, SYNC_TRANSFER_TRANSFER_WRITE },
{ SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV, SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV },
{ SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV, SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV },
{ SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT, SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT },
{ SYNC_RAY_TRACING_SHADER_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR, SYNC_RAY_TRACING_SHADER_KHR_ACCELERATION_STRUCTURE_READ_KHR },
{ SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ_BIT, SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ },
{ SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE_BIT, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE },
{ SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ_BIT, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ },
{ SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR, SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_READ_KHR },
{ SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_WRITE_KHR },
{ SYNC_HOST_HOST_READ_BIT, SYNC_HOST_HOST_READ },
{ SYNC_HOST_HOST_WRITE_BIT, SYNC_HOST_HOST_WRITE },
{ SYNC_IMAGE_LAYOUT_TRANSITION_BIT, SYNC_IMAGE_LAYOUT_TRANSITION },
{ SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER_BIT, SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER },
};
// Array of text names and component masks for each stage/access index
const std::array<SyncStageAccessInfoType, 55> syncStageAccessInfoByStageAccessIndex { {
{
"SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ",
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ,
SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT
},
{
"SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT",
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT,
SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
},
{
"SYNC_VERTEX_INPUT_INDEX_READ",
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
VK_ACCESS_INDEX_READ_BIT,
SYNC_VERTEX_INPUT_INDEX_READ,
SYNC_VERTEX_INPUT_INDEX_READ_BIT
},
{
"SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ",
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ,
SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ_BIT
},
{
"SYNC_VERTEX_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_VERTEX_SHADER_SHADER_READ,
SYNC_VERTEX_SHADER_SHADER_READ_BIT
},
{
"SYNC_VERTEX_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_VERTEX_SHADER_SHADER_WRITE,
SYNC_VERTEX_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_VERTEX_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_VERTEX_SHADER_UNIFORM_READ,
SYNC_VERTEX_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ,
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ_BIT
},
{
"SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE,
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ,
SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ,
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ_BIT
},
{
"SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE,
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ,
SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_GEOMETRY_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_GEOMETRY_SHADER_SHADER_READ,
SYNC_GEOMETRY_SHADER_SHADER_READ_BIT
},
{
"SYNC_GEOMETRY_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_GEOMETRY_SHADER_SHADER_WRITE,
SYNC_GEOMETRY_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_GEOMETRY_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_GEOMETRY_SHADER_UNIFORM_READ,
SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT",
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT,
SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
},
{
"SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT",
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,
VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT,
SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
},
{
"SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT",
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT,
SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT
},
{
"SYNC_TASK_SHADER_NV_SHADER_READ",
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV,
VK_ACCESS_SHADER_READ_BIT,
SYNC_TASK_SHADER_NV_SHADER_READ,
SYNC_TASK_SHADER_NV_SHADER_READ_BIT
},
{
"SYNC_TASK_SHADER_NV_SHADER_WRITE",
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_TASK_SHADER_NV_SHADER_WRITE,
SYNC_TASK_SHADER_NV_SHADER_WRITE_BIT
},
{
"SYNC_TASK_SHADER_NV_UNIFORM_READ",
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_TASK_SHADER_NV_UNIFORM_READ,
SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT
},
{
"SYNC_MESH_SHADER_NV_SHADER_READ",
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
VK_ACCESS_SHADER_READ_BIT,
SYNC_MESH_SHADER_NV_SHADER_READ,
SYNC_MESH_SHADER_NV_SHADER_READ_BIT
},
{
"SYNC_MESH_SHADER_NV_SHADER_WRITE",
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_MESH_SHADER_NV_SHADER_WRITE,
SYNC_MESH_SHADER_NV_SHADER_WRITE_BIT
},
{
"SYNC_MESH_SHADER_NV_UNIFORM_READ",
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_MESH_SHADER_NV_UNIFORM_READ,
SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT
},
{
"SYNC_SHADING_RATE_IMAGE_NV_SHADING_RATE_IMAGE_READ_NV",
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,
VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,
SYNC_SHADING_RATE_IMAGE_NV_SHADING_RATE_IMAGE_READ_NV,
SYNC_SHADING_RATE_IMAGE_BIT_NV_SHADING_RATE_IMAGE_READ_BIT_NV
},
{
"SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ",
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ,
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
},
{
"SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE",
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE,
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
},
{
"SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ",
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ,
SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT
},
{
"SYNC_FRAGMENT_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_FRAGMENT_SHADER_SHADER_READ,
SYNC_FRAGMENT_SHADER_SHADER_READ_BIT
},
{
"SYNC_FRAGMENT_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_FRAGMENT_SHADER_SHADER_WRITE,
SYNC_FRAGMENT_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_FRAGMENT_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_FRAGMENT_SHADER_UNIFORM_READ,
SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ",
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ,
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
},
{
"SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE",
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE,
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
},
{
"SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ",
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT
},
{
"SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT",
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
},
{
"SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE",
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE,
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT
},
{
"SYNC_COMPUTE_SHADER_SHADER_READ",
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT,
SYNC_COMPUTE_SHADER_SHADER_READ,
SYNC_COMPUTE_SHADER_SHADER_READ_BIT
},
{
"SYNC_COMPUTE_SHADER_SHADER_WRITE",
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_COMPUTE_SHADER_SHADER_WRITE,
SYNC_COMPUTE_SHADER_SHADER_WRITE_BIT
},
{
"SYNC_COMPUTE_SHADER_UNIFORM_READ",
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_COMPUTE_SHADER_UNIFORM_READ,
SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT
},
{
"SYNC_TRANSFER_TRANSFER_READ",
VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_READ_BIT,
SYNC_TRANSFER_TRANSFER_READ,
SYNC_TRANSFER_TRANSFER_READ_BIT
},
{
"SYNC_TRANSFER_TRANSFER_WRITE",
VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_WRITE_BIT,
SYNC_TRANSFER_TRANSFER_WRITE,
SYNC_TRANSFER_TRANSFER_WRITE_BIT
},
{
"SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV",
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV,
VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV,
SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV,
SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV
},
{
"SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV",
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV,
VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV,
SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV,
SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV
},
{
"SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT",
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT,
VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT,
SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT,
SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT
},
{
"SYNC_RAY_TRACING_SHADER_KHR_ACCELERATION_STRUCTURE_READ_KHR",
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
SYNC_RAY_TRACING_SHADER_KHR_ACCELERATION_STRUCTURE_READ_KHR,
SYNC_RAY_TRACING_SHADER_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR
},
{
"SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ",
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
VK_ACCESS_SHADER_READ_BIT,
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ,
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ_BIT
},
{
"SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE",
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
VK_ACCESS_SHADER_WRITE_BIT,
SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE,
SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE_BIT
},
{
"SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ",
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
VK_ACCESS_UNIFORM_READ_BIT,
SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ,
SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ_BIT
},
{
"SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_READ_KHR",
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_READ_KHR,
SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR
},
{
"SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_WRITE_KHR",
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_WRITE_KHR,
SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
},
{
"SYNC_HOST_HOST_READ",
VK_PIPELINE_STAGE_HOST_BIT,
VK_ACCESS_HOST_READ_BIT,
SYNC_HOST_HOST_READ,
SYNC_HOST_HOST_READ_BIT
},
{
"SYNC_HOST_HOST_WRITE",
VK_PIPELINE_STAGE_HOST_BIT,
VK_ACCESS_HOST_WRITE_BIT,
SYNC_HOST_HOST_WRITE,
SYNC_HOST_HOST_WRITE_BIT
},
{
"SYNC_IMAGE_LAYOUT_TRANSITION",
VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM,
VK_ACCESS_FLAG_BITS_MAX_ENUM,
SYNC_IMAGE_LAYOUT_TRANSITION,
SYNC_IMAGE_LAYOUT_TRANSITION_BIT
},
{
"SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER",
VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM,
VK_ACCESS_FLAG_BITS_MAX_ENUM,
SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER,
SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER_BIT
},
} };
// Constants defining the mask of all read and write stage_access states
// Bit order mask of stage_access bit for each stage
const std::map<VkPipelineStageFlags, SyncStageAccessFlags> syncStageAccessMaskByStageBit {
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (
SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT |
SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
)},
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, (
SYNC_VERTEX_INPUT_INDEX_READ_BIT |
SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ_BIT
)},
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, (
SYNC_VERTEX_SHADER_SHADER_READ_BIT |
SYNC_VERTEX_SHADER_SHADER_WRITE_BIT |
SYNC_VERTEX_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, (
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ_BIT |
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE_BIT |
SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, (
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ_BIT |
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE_BIT |
SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, (
SYNC_GEOMETRY_SHADER_SHADER_READ_BIT |
SYNC_GEOMETRY_SHADER_SHADER_WRITE_BIT |
SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (
SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT |
SYNC_FRAGMENT_SHADER_SHADER_READ_BIT |
SYNC_FRAGMENT_SHADER_SHADER_WRITE_BIT |
SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, (
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, (
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT |
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT |
SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (
SYNC_COMPUTE_SHADER_SHADER_READ_BIT |
SYNC_COMPUTE_SHADER_SHADER_WRITE_BIT |
SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TRANSFER_BIT, (
SYNC_TRANSFER_TRANSFER_READ_BIT |
SYNC_TRANSFER_TRANSFER_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_HOST_BIT, (
SYNC_HOST_HOST_READ_BIT |
SYNC_HOST_HOST_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, (
SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV |
SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV
)},
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT},
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, (
SYNC_TASK_SHADER_NV_SHADER_READ_BIT |
SYNC_TASK_SHADER_NV_SHADER_WRITE_BIT |
SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, (
SYNC_MESH_SHADER_NV_SHADER_READ_BIT |
SYNC_MESH_SHADER_NV_SHADER_WRITE_BIT |
SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, (
SYNC_RAY_TRACING_SHADER_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR |
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ_BIT |
SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE_BIT |
SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, SYNC_SHADING_RATE_IMAGE_BIT_NV_SHADING_RATE_IMAGE_READ_BIT_NV},
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT},
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, (
SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT |
SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
)},
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, (
SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR |
SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
)},
};
// Bit order mask of stage_access bit for each access
const std::map<VkAccessFlags, SyncStageAccessFlags> syncStageAccessMaskByAccessBit {
{ VK_ACCESS_INDIRECT_COMMAND_READ_BIT, SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT},
{ VK_ACCESS_INDEX_READ_BIT, SYNC_VERTEX_INPUT_INDEX_READ_BIT},
{ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ_BIT},
{ VK_ACCESS_UNIFORM_READ_BIT, (
SYNC_VERTEX_SHADER_UNIFORM_READ_BIT |
SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT |
SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT |
SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT |
SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT |
SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT |
SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT |
SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT |
SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ_BIT
)},
{ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT},
{ VK_ACCESS_SHADER_READ_BIT, (
SYNC_VERTEX_SHADER_SHADER_READ_BIT |
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ_BIT |
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ_BIT |
SYNC_GEOMETRY_SHADER_SHADER_READ_BIT |
SYNC_TASK_SHADER_NV_SHADER_READ_BIT |
SYNC_MESH_SHADER_NV_SHADER_READ_BIT |
SYNC_FRAGMENT_SHADER_SHADER_READ_BIT |
SYNC_COMPUTE_SHADER_SHADER_READ_BIT |
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ_BIT
)},
{ VK_ACCESS_SHADER_WRITE_BIT, (
SYNC_VERTEX_SHADER_SHADER_WRITE_BIT |
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE_BIT |
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE_BIT |
SYNC_GEOMETRY_SHADER_SHADER_WRITE_BIT |
SYNC_TASK_SHADER_NV_SHADER_WRITE_BIT |
SYNC_MESH_SHADER_NV_SHADER_WRITE_BIT |
SYNC_FRAGMENT_SHADER_SHADER_WRITE_BIT |
SYNC_COMPUTE_SHADER_SHADER_WRITE_BIT |
SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE_BIT
)},
{ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT},
{ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT},
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, (
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
)},
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, (
SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
)},
{ VK_ACCESS_TRANSFER_READ_BIT, SYNC_TRANSFER_TRANSFER_READ_BIT},
{ VK_ACCESS_TRANSFER_WRITE_BIT, SYNC_TRANSFER_TRANSFER_WRITE_BIT},
{ VK_ACCESS_HOST_READ_BIT, SYNC_HOST_HOST_READ_BIT},
{ VK_ACCESS_HOST_WRITE_BIT, SYNC_HOST_HOST_WRITE_BIT},
{ VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV},
{ VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV},
{ VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT},
{ VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT, SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT},
{ VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, (
SYNC_RAY_TRACING_SHADER_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR |
SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_READ_BIT_KHR
)},
{ VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, SYNC_ACCELERATION_STRUCTURE_BUILD_BIT_KHR_ACCELERATION_STRUCTURE_WRITE_BIT_KHR},
{ VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV, SYNC_SHADING_RATE_IMAGE_BIT_NV_SHADING_RATE_IMAGE_READ_BIT_NV},
{ VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT},
{ VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT},
{ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT},
{ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT},
{ VK_ACCESS_MEMORY_READ_BIT, syncStageAccessReadMask},
{ VK_ACCESS_MEMORY_WRITE_BIT, syncStageAccessWriteMask},
};
// stage_access index for each stage and access
const std::map<VkPipelineStageFlags, std::map<VkAccessFlags, SyncStageAccessIndex>> syncStageAccessIndexByStageAndAccess {
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, {
{ VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_READ_KHR },
{ VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, SYNC_ACCELERATION_STRUCTURE_BUILD_KHR_ACCELERATION_STRUCTURE_WRITE_KHR }
} },
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, {
{ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ },
{ VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT },
{ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE }
} },
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, {
{ VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV },
{ VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV }
} },
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_COMPUTE_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_COMPUTE_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_COMPUTE_SHADER_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, {
{ VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT, SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT }
} },
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, {
{ VK_ACCESS_INDIRECT_COMMAND_READ_BIT, SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ },
{ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT }
} },
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, {
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ },
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE }
} },
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, {
{ VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT }
} },
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, {
{ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ },
{ VK_ACCESS_SHADER_READ_BIT, SYNC_FRAGMENT_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_FRAGMENT_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_FRAGMENT_SHADER_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_GEOMETRY_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_GEOMETRY_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_GEOMETRY_SHADER_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_HOST_BIT, {
{ VK_ACCESS_HOST_READ_BIT, SYNC_HOST_HOST_READ },
{ VK_ACCESS_HOST_WRITE_BIT, SYNC_HOST_HOST_WRITE }
} },
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, {
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ },
{ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE }
} },
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_MESH_SHADER_NV_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_MESH_SHADER_NV_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_MESH_SHADER_NV_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, {
{ VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, SYNC_RAY_TRACING_SHADER_KHR_ACCELERATION_STRUCTURE_READ_KHR },
{ VK_ACCESS_SHADER_READ_BIT, SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, {
{ VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV, SYNC_SHADING_RATE_IMAGE_NV_SHADING_RATE_IMAGE_READ_NV }
} },
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_TASK_SHADER_NV_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_TASK_SHADER_NV_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_TASK_SHADER_NV_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ }
} },
{ VK_PIPELINE_STAGE_TRANSFER_BIT, {
{ VK_ACCESS_TRANSFER_READ_BIT, SYNC_TRANSFER_TRANSFER_READ },
{ VK_ACCESS_TRANSFER_WRITE_BIT, SYNC_TRANSFER_TRANSFER_WRITE }
} },
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, {
{ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT },
{ VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT }
} },
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, {
{ VK_ACCESS_INDEX_READ_BIT, SYNC_VERTEX_INPUT_INDEX_READ },
{ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, SYNC_VERTEX_INPUT_VERTEX_ATTRIBUTE_READ }
} },
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, {
{ VK_ACCESS_SHADER_READ_BIT, SYNC_VERTEX_SHADER_SHADER_READ },
{ VK_ACCESS_SHADER_WRITE_BIT, SYNC_VERTEX_SHADER_SHADER_WRITE },
{ VK_ACCESS_UNIFORM_READ_BIT, SYNC_VERTEX_SHADER_UNIFORM_READ }
} },
};
// Direct VkPipelineStageFlags to valid VkAccessFlags lookup table
const std::map<VkPipelineStageFlags, VkAccessFlags> syncDirectStageToAccessMask {
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (
VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
)},
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, (
VK_ACCESS_INDEX_READ_BIT |
VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT
)},
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (
VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, (
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, (
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT |
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_TRANSFER_BIT, (
VK_ACCESS_TRANSFER_READ_BIT |
VK_ACCESS_TRANSFER_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_HOST_BIT, (
VK_ACCESS_HOST_READ_BIT |
VK_ACCESS_HOST_WRITE_BIT
)},
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, (
VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV |
VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
)},
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT},
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, (
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, (
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR |
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_UNIFORM_READ_BIT
)},
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV},
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT},
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, (
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT |
VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
)},
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, (
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR |
VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
)},
};
// Pipeline stages corresponding to VK_PIPELINE_STAGE_ALL_COMMANDS_BIT for each VkQueueFlagBits
const std::map<VkQueueFlagBits, VkPipelineStageFlags> syncAllCommandStagesByQueueFlags {
{ VK_QUEUE_COMPUTE_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT |
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV |
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT |
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR |
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
VK_PIPELINE_STAGE_HOST_BIT
)},
{ VK_QUEUE_GRAPHICS_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT |
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV |
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
VK_PIPELINE_STAGE_HOST_BIT
)},
{ VK_QUEUE_TRANSFER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
VK_PIPELINE_STAGE_HOST_BIT
)},
};
// Masks of logically earlier stage flags for a given stage flag
const std::map<VkPipelineStageFlagBits, VkPipelineStageFlags> syncLogicallyEarlierStages {
{ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
)},
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
)},
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
)},
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
)},
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
)},
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
)},
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
)},
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
)},
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
)},
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
)},
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
)},
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
)},
{ VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT |
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV |
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT |
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR |
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
};
// Masks of logically later stage flags for a given stage flag
const std::map<VkPipelineStageFlagBits, VkPipelineStageFlags> syncLogicallyLaterStages {
{ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT |
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV |
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT |
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR |
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, (
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, (
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, (
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, (
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, (
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, (
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, (
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, (
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, (
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, (
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, (
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, (
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
)},
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
{ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT},
};
// Lookup table of stage orderings
const std::map<VkPipelineStageFlagBits, int> syncStageOrder {
{ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0},
{ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, 1},
{ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 2},
{ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, 3},
{ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, 4},
{ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, 5},
{ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, 6},
{ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, 7},
{ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, 8},
{ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, 9},
{ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, 10},
{ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, 11},
{ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, 12},
{ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 13},
{ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, 14},
{ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 15},
{ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 16},
{ VK_PIPELINE_STAGE_TRANSFER_BIT, 17},
{ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, 18},
{ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, 19},
{ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, 20},
{ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, 21},
{ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 22},
{ VK_PIPELINE_STAGE_HOST_BIT, 23},
};
const std::map<VkShaderStageFlagBits, SyncShaderStageAccess> syncStageAccessMaskByShaderStage {
{VK_SHADER_STAGE_VERTEX_BIT, {
SYNC_VERTEX_SHADER_SHADER_READ, SYNC_VERTEX_SHADER_SHADER_WRITE, SYNC_VERTEX_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, {
SYNC_TESSELLATION_CONTROL_SHADER_SHADER_READ, SYNC_TESSELLATION_CONTROL_SHADER_SHADER_WRITE, SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, {
SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_READ, SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_WRITE, SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_GEOMETRY_BIT, {
SYNC_GEOMETRY_SHADER_SHADER_READ, SYNC_GEOMETRY_SHADER_SHADER_WRITE, SYNC_GEOMETRY_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_FRAGMENT_BIT, {
SYNC_FRAGMENT_SHADER_SHADER_READ, SYNC_FRAGMENT_SHADER_SHADER_WRITE, SYNC_FRAGMENT_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_COMPUTE_BIT, {
SYNC_COMPUTE_SHADER_SHADER_READ, SYNC_COMPUTE_SHADER_SHADER_WRITE, SYNC_COMPUTE_SHADER_UNIFORM_READ}},
{VK_SHADER_STAGE_RAYGEN_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_ANY_HIT_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_MISS_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_INTERSECTION_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_CALLABLE_BIT_KHR, {
SYNC_RAY_TRACING_SHADER_KHR_SHADER_READ, SYNC_RAY_TRACING_SHADER_KHR_SHADER_WRITE, SYNC_RAY_TRACING_SHADER_KHR_UNIFORM_READ}},
{VK_SHADER_STAGE_TASK_BIT_NV, {
SYNC_TASK_SHADER_NV_SHADER_READ, SYNC_TASK_SHADER_NV_SHADER_WRITE, SYNC_TASK_SHADER_NV_UNIFORM_READ}},
{VK_SHADER_STAGE_MESH_BIT_NV, {
SYNC_MESH_SHADER_NV_SHADER_READ, SYNC_MESH_SHADER_NV_SHADER_WRITE, SYNC_MESH_SHADER_NV_UNIFORM_READ}},
};