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