1 /* Copyright (c) 2017-2018 Hans-Kristian Arntzen
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining
4 * a copy of this software and associated documentation files (the
5 * "Software"), to deal in the Software without restriction, including
6 * without limitation the rights to use, copy, modify, merge, publish,
7 * distribute, sublicense, and/or sell copies of the Software, and to
8 * permit persons to whom the Software is furnished to do so, subject to
9 * the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be
12 * included in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 */
22
23 #pragma once
24
25 #include <string>
26
27 namespace Vulkan
28 {
layout_to_string(VkImageLayout layout)29 static inline const char *layout_to_string(VkImageLayout layout)
30 {
31 switch (layout)
32 {
33 case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
34 return "SHADER_READ_ONLY";
35 case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:
36 return "DS_READ_ONLY";
37 case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
38 return "DS";
39 case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
40 return "COLOR";
41 case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
42 return "TRANSFER_DST";
43 case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
44 return "TRANSFER_SRC";
45 case VK_IMAGE_LAYOUT_GENERAL:
46 return "GENERAL";
47 case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:
48 return "PRESENT";
49 default:
50 return "UNDEFINED";
51 }
52 }
53
access_flags_to_string(VkAccessFlags flags)54 static inline std::string access_flags_to_string(VkAccessFlags flags)
55 {
56 std::string result;
57
58 if (flags & VK_ACCESS_SHADER_READ_BIT)
59 result += "SHADER_READ ";
60 if (flags & VK_ACCESS_SHADER_WRITE_BIT)
61 result += "SHADER_WRITE ";
62 if (flags & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
63 result += "DS_WRITE ";
64 if (flags & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
65 result += "DS_READ ";
66 if (flags & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
67 result += "COLOR_READ ";
68 if (flags & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
69 result += "COLOR_WRITE ";
70 if (flags & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
71 result += "INPUT_READ ";
72 if (flags & VK_ACCESS_TRANSFER_WRITE_BIT)
73 result += "TRANSFER_WRITE ";
74 if (flags & VK_ACCESS_TRANSFER_READ_BIT)
75 result += "TRANSFER_READ ";
76 if (flags & VK_ACCESS_UNIFORM_READ_BIT)
77 result += "UNIFORM_READ ";
78
79 if (!result.empty())
80 result.pop_back();
81 else
82 result = "NONE";
83
84 return result;
85 }
86
stage_flags_to_string(VkPipelineStageFlags flags)87 static inline std::string stage_flags_to_string(VkPipelineStageFlags flags)
88 {
89 std::string result;
90
91 if (flags & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
92 result += "GRAPHICS ";
93 if (flags & (VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT))
94 result += "DEPTH ";
95 if (flags & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
96 result += "COLOR ";
97 if (flags & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
98 result += "FRAGMENT ";
99 if (flags & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
100 result += "COMPUTE ";
101 if (flags & VK_PIPELINE_STAGE_TRANSFER_BIT)
102 result += "TRANSFER ";
103 if (flags & (VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT))
104 result += "VERTEX ";
105
106 if (!result.empty())
107 result.pop_back();
108 else
109 result = "NONE";
110
111 return result;
112 }
113 }