blob: 1c3c0696617d222bc177961b4c07d4700fb77798 [file] [log] [blame]
Jeremy Gebben5f585ae2021-02-02 09:03:06 -07001/*
2 * Copyright (c) 2019-2021 Valve Corporation
3 * Copyright (c) 2019-2021 LunarG, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Author: John Zulauf <jzulauf@lunarg.com>
18 * Author: Locke Lin <locke@lunarg.com>
19 * Author: Jeremy Gebben <jeremyg@lunarg.com>
20 */
21
22#pragma once
23#include <vulkan/vulkan.h>
Jeremy Gebben40a22942020-12-22 14:22:06 -070024#include <string>
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070025
26struct DeviceFeatures;
27
28namespace sync_utils {
29
30static constexpr VkQueueFlags kAllQueueTypes = (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT);
31
Jeremy Gebben40a22942020-12-22 14:22:06 -070032VkPipelineStageFlags2KHR DisabledPipelineStages(const DeviceFeatures& features);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070033
34// Expand all pipeline stage bits. If queue_flags and disabled_feature_mask is provided, the expansion of ALL_COMMANDS_BIT
35// and ALL_GRAPHICS_BIT will be limited to what is supported.
Jeremy Gebben40a22942020-12-22 14:22:06 -070036VkPipelineStageFlags2KHR ExpandPipelineStages(VkPipelineStageFlags2KHR stage_mask, VkQueueFlags queue_flags = kAllQueueTypes,
37 const VkPipelineStageFlags2KHR disabled_feature_mask = 0);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070038
Jeremy Gebben40a22942020-12-22 14:22:06 -070039VkAccessFlags2KHR ExpandAccessFlags(VkAccessFlags2KHR access_mask);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070040
Jeremy Gebben40a22942020-12-22 14:22:06 -070041VkAccessFlags2KHR CompatibleAccessMask(VkPipelineStageFlags2KHR stage_mask);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070042
Jeremy Gebben40a22942020-12-22 14:22:06 -070043VkPipelineStageFlags2KHR WithEarlierPipelineStages(VkPipelineStageFlags2KHR stage_mask);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070044
Jeremy Gebben40a22942020-12-22 14:22:06 -070045VkPipelineStageFlags2KHR WithLaterPipelineStages(VkPipelineStageFlags2KHR stage_mask);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070046
Jeremy Gebben40a22942020-12-22 14:22:06 -070047int GetGraphicsPipelineStageLogicalOrdinal(VkPipelineStageFlags2KHR flag);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070048
Jeremy Gebben40a22942020-12-22 14:22:06 -070049VkPipelineStageFlags2KHR GetLogicallyEarliestGraphicsPipelineStage(VkPipelineStageFlags2KHR inflags);
50
51VkPipelineStageFlags2KHR GetLogicallyLatestGraphicsPipelineStage(VkPipelineStageFlags2KHR inflags);
52
53std::string StringPipelineStageFlags(VkPipelineStageFlags2KHR mask);
54
55std::string StringAccessFlags(VkAccessFlags2KHR mask);
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070056
Jeremy Gebben74aa7622020-12-15 11:18:00 -070057struct ExecScopes {
58 VkPipelineStageFlags2KHR src;
59 VkPipelineStageFlags2KHR dst;
60};
61
62ExecScopes GetGlobalStageMasks(const VkDependencyInfoKHR& dep_info);
63
Jeremy Gebben5f585ae2021-02-02 09:03:06 -070064} // namespace sync_utils