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 }