/* * Copyright © 2022 Imagination Technologies Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef PVR_CSB_ENUM_HELPERS_H #define PVR_CSB_ENUM_HELPERS_H #include #include #include "pvr_csb.h" #include "rogue/rogue.h" #include "util/macros.h" /****************************************************************************** CR ******************************************************************************/ /* TODO: Use VkSampleCountFlagBits as param type? */ /* clang-format off */ static inline enum PVRX(CR_ISP_AA_MODE_TYPE) pvr_cr_isp_aa_mode_type(uint32_t samples) /* clang-format on */ { switch (samples) { case 1: return PVRX(CR_ISP_AA_MODE_TYPE_AA_NONE); case 2: return PVRX(CR_ISP_AA_MODE_TYPE_AA_2X); case 4: return PVRX(CR_ISP_AA_MODE_TYPE_AA_4X); case 8: return PVRX(CR_ISP_AA_MODE_TYPE_AA_8X); default: unreachable("Unsupported number of samples"); } } /****************************************************************************** PDS ******************************************************************************/ /* clang-format off */ static inline enum PVRX(PDSINST_DOUTU_SAMPLE_RATE) pvr_pdsinst_doutu_sample_rate_from_rogue(enum rogue_msaa_mode msaa_mode) /* clang-format on */ { switch (msaa_mode) { case ROGUE_MSAA_MODE_PIXEL: return PVRX(PDSINST_DOUTU_SAMPLE_RATE_INSTANCE); case ROGUE_MSAA_MODE_SELECTIVE: return PVRX(PDSINST_DOUTU_SAMPLE_RATE_SELECTIVE); case ROGUE_MSAA_MODE_FULL: return PVRX(PDSINST_DOUTU_SAMPLE_RATE_FULL); default: unreachable("Undefined MSAA mode."); } } /****************************************************************************** TA ******************************************************************************/ static inline enum PVRX(TA_CMPMODE) pvr_ta_cmpmode(VkCompareOp op) { /* enum values are identical, so we can just cast the input directly. */ return (enum PVRX(TA_CMPMODE))op; } static inline enum PVRX(TA_ISPB_STENCILOP) pvr_ta_stencilop(VkStencilOp op) { /* enum values are identical, so we can just cast the input directly. */ return (enum PVRX(TA_ISPB_STENCILOP))op; } /* clang-format off */ static inline enum PVRX(TA_OBJTYPE) pvr_ta_objtype(VkPrimitiveTopology topology) /* clang-format on */ { switch (topology) { case VK_PRIMITIVE_TOPOLOGY_POINT_LIST: return PVRX(TA_OBJTYPE_SPRITE_01UV); case VK_PRIMITIVE_TOPOLOGY_LINE_LIST: case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP: case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY: case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY: return PVRX(TA_OBJTYPE_LINE); case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST: case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP: case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN: case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY: case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY: return PVRX(TA_OBJTYPE_TRIANGLE); default: unreachable("Invalid topology."); return 0; } } /****************************************************************************** TEXSTATE ******************************************************************************/ static inline enum PVRX(TEXSTATE_CMP_MODE) pvr_texstate_cmpmode(VkCompareOp op) { /* enum values are identical, so we can just cast the input directly. */ return (enum PVRX(TEXSTATE_CMP_MODE))op; } #endif /* PVR_CSB_ENUM_HELPERS_H */