1/* 2 * Copyright © 2019 Red Hat. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24#pragma once 25 26static inline unsigned vk_cull_to_pipe(uint32_t vk_cull) 27{ 28 /* these correspond */ 29 return vk_cull; 30} 31 32static inline unsigned vk_polygon_mode_to_pipe(uint32_t vk_poly_mode) 33{ 34 /* these correspond */ 35 return vk_poly_mode; 36} 37 38static inline unsigned vk_conv_stencil_op(uint32_t vk_stencil_op) 39{ 40 switch (vk_stencil_op) { 41 case VK_STENCIL_OP_KEEP: 42 return PIPE_STENCIL_OP_KEEP; 43 case VK_STENCIL_OP_ZERO: 44 return PIPE_STENCIL_OP_ZERO; 45 case VK_STENCIL_OP_REPLACE: 46 return PIPE_STENCIL_OP_REPLACE; 47 case VK_STENCIL_OP_INCREMENT_AND_CLAMP: 48 return PIPE_STENCIL_OP_INCR; 49 case VK_STENCIL_OP_DECREMENT_AND_CLAMP: 50 return PIPE_STENCIL_OP_DECR; 51 case VK_STENCIL_OP_INVERT: 52 return PIPE_STENCIL_OP_INVERT; 53 case VK_STENCIL_OP_INCREMENT_AND_WRAP: 54 return PIPE_STENCIL_OP_INCR_WRAP; 55 case VK_STENCIL_OP_DECREMENT_AND_WRAP: 56 return PIPE_STENCIL_OP_DECR_WRAP; 57 default: 58 assert(0); 59 return 0; 60 } 61} 62 63static inline unsigned vk_conv_topology(VkPrimitiveTopology topology) 64{ 65 switch (topology) { 66 case VK_PRIMITIVE_TOPOLOGY_POINT_LIST: 67 return PIPE_PRIM_POINTS; 68 case VK_PRIMITIVE_TOPOLOGY_LINE_LIST: 69 return PIPE_PRIM_LINES; 70 case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP: 71 return PIPE_PRIM_LINE_STRIP; 72 case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST: 73 return PIPE_PRIM_TRIANGLES; 74 case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP: 75 return PIPE_PRIM_TRIANGLE_STRIP; 76 case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN: 77 return PIPE_PRIM_TRIANGLE_FAN; 78 case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY: 79 return PIPE_PRIM_LINES_ADJACENCY; 80 case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY: 81 return PIPE_PRIM_LINE_STRIP_ADJACENCY; 82 case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY: 83 return PIPE_PRIM_TRIANGLES_ADJACENCY; 84 case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY: 85 return PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY; 86 case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST: 87 return PIPE_PRIM_PATCHES; 88 default: 89 assert(0); 90 return 0; 91 } 92} 93 94static inline unsigned vk_conv_wrap_mode(enum VkSamplerAddressMode addr_mode) 95{ 96 switch (addr_mode) { 97 case VK_SAMPLER_ADDRESS_MODE_REPEAT: 98 return PIPE_TEX_WRAP_REPEAT; 99 case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT: 100 return PIPE_TEX_WRAP_MIRROR_REPEAT; 101 case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE: 102 return PIPE_TEX_WRAP_CLAMP_TO_EDGE; 103 case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: 104 return PIPE_TEX_WRAP_CLAMP_TO_BORDER; 105 case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE: 106 return PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE; 107 default: 108 assert(0); 109 return 0; 110 } 111} 112 113static inline unsigned vk_conv_blend_factor(enum VkBlendFactor vk_factor) 114{ 115 switch (vk_factor) { 116 case VK_BLEND_FACTOR_ZERO: 117 return PIPE_BLENDFACTOR_ZERO; 118 case VK_BLEND_FACTOR_ONE: 119 return PIPE_BLENDFACTOR_ONE; 120 case VK_BLEND_FACTOR_SRC_COLOR: 121 return PIPE_BLENDFACTOR_SRC_COLOR; 122 case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR: 123 return PIPE_BLENDFACTOR_INV_SRC_COLOR; 124 case VK_BLEND_FACTOR_DST_COLOR: 125 return PIPE_BLENDFACTOR_DST_COLOR; 126 case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR: 127 return PIPE_BLENDFACTOR_INV_DST_COLOR; 128 case VK_BLEND_FACTOR_SRC_ALPHA: 129 return PIPE_BLENDFACTOR_SRC_ALPHA; 130 case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA: 131 return PIPE_BLENDFACTOR_INV_SRC_ALPHA; 132 case VK_BLEND_FACTOR_DST_ALPHA: 133 return PIPE_BLENDFACTOR_DST_ALPHA; 134 case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA: 135 return PIPE_BLENDFACTOR_INV_DST_ALPHA; 136 case VK_BLEND_FACTOR_CONSTANT_COLOR: 137 return PIPE_BLENDFACTOR_CONST_COLOR; 138 case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR: 139 return PIPE_BLENDFACTOR_INV_CONST_COLOR; 140 case VK_BLEND_FACTOR_CONSTANT_ALPHA: 141 return PIPE_BLENDFACTOR_CONST_ALPHA; 142 case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA: 143 return PIPE_BLENDFACTOR_INV_CONST_ALPHA; 144 case VK_BLEND_FACTOR_SRC1_COLOR: 145 return PIPE_BLENDFACTOR_SRC1_COLOR; 146 case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR: 147 return PIPE_BLENDFACTOR_INV_SRC1_COLOR; 148 case VK_BLEND_FACTOR_SRC1_ALPHA: 149 return PIPE_BLENDFACTOR_SRC1_ALPHA; 150 case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA: 151 return PIPE_BLENDFACTOR_INV_SRC1_ALPHA; 152 case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE: 153 return PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE; 154 default: 155 assert(0); 156 return 0; 157 } 158} 159 160static inline unsigned vk_conv_blend_func(enum VkBlendOp op) 161{ 162 switch (op) { 163 case VK_BLEND_OP_ADD: 164 return PIPE_BLEND_ADD; 165 case VK_BLEND_OP_SUBTRACT: 166 return PIPE_BLEND_SUBTRACT; 167 case VK_BLEND_OP_REVERSE_SUBTRACT: 168 return PIPE_BLEND_REVERSE_SUBTRACT; 169 case VK_BLEND_OP_MIN: 170 return PIPE_BLEND_MIN; 171 case VK_BLEND_OP_MAX: 172 return PIPE_BLEND_MAX; 173 default: 174 assert(0); 175 return 0; 176 } 177} 178 179static inline unsigned vk_conv_logic_op(enum VkLogicOp op) 180{ 181 switch (op) { 182 case VK_LOGIC_OP_CLEAR: 183 return PIPE_LOGICOP_CLEAR; 184 case VK_LOGIC_OP_NOR: 185 return PIPE_LOGICOP_NOR; 186 case VK_LOGIC_OP_AND_INVERTED: 187 return PIPE_LOGICOP_AND_INVERTED; 188 case VK_LOGIC_OP_COPY_INVERTED: 189 return PIPE_LOGICOP_COPY_INVERTED; 190 case VK_LOGIC_OP_AND_REVERSE: 191 return PIPE_LOGICOP_AND_REVERSE; 192 case VK_LOGIC_OP_INVERT: 193 return PIPE_LOGICOP_INVERT; 194 case VK_LOGIC_OP_XOR: 195 return PIPE_LOGICOP_XOR; 196 case VK_LOGIC_OP_NAND: 197 return PIPE_LOGICOP_NAND; 198 case VK_LOGIC_OP_AND: 199 return PIPE_LOGICOP_AND; 200 case VK_LOGIC_OP_EQUIVALENT: 201 return PIPE_LOGICOP_EQUIV; 202 case VK_LOGIC_OP_NO_OP: 203 return PIPE_LOGICOP_NOOP; 204 case VK_LOGIC_OP_OR_INVERTED: 205 return PIPE_LOGICOP_OR_INVERTED; 206 case VK_LOGIC_OP_COPY: 207 return PIPE_LOGICOP_COPY; 208 case VK_LOGIC_OP_OR_REVERSE: 209 return PIPE_LOGICOP_OR_REVERSE; 210 case VK_LOGIC_OP_OR: 211 return PIPE_LOGICOP_OR; 212 case VK_LOGIC_OP_SET: 213 return PIPE_LOGICOP_SET; 214 default: 215 assert(0); 216 return 0; 217 } 218} 219 220static inline enum pipe_swizzle vk_conv_swizzle(VkComponentSwizzle swiz) 221{ 222 switch (swiz) { 223 case VK_COMPONENT_SWIZZLE_ZERO: 224 return PIPE_SWIZZLE_0; 225 case VK_COMPONENT_SWIZZLE_ONE: 226 return PIPE_SWIZZLE_1; 227 case VK_COMPONENT_SWIZZLE_R: 228 return PIPE_SWIZZLE_X; 229 case VK_COMPONENT_SWIZZLE_G: 230 return PIPE_SWIZZLE_Y; 231 case VK_COMPONENT_SWIZZLE_B: 232 return PIPE_SWIZZLE_Z; 233 case VK_COMPONENT_SWIZZLE_A: 234 return PIPE_SWIZZLE_W; 235 case VK_COMPONENT_SWIZZLE_IDENTITY: 236 default: 237 return PIPE_SWIZZLE_NONE; 238 } 239} 240