1 /* 2 * Copyright © 2012 Rob Clark <[email protected]> 3 * SPDX-License-Identifier: MIT 4 * 5 * Authors: 6 * Rob Clark <[email protected]> 7 */ 8 9 #include "pipe/p_defines.h" 10 #include "util/format/u_format.h" 11 12 #include "freedreno_util.h" 13 14 int32_t marker_cnt; 15 16 enum adreno_rb_depth_format fd_pipe2depth(enum pipe_format format)17fd_pipe2depth(enum pipe_format format) 18 { 19 switch (format) { 20 case PIPE_FORMAT_Z16_UNORM: 21 return DEPTHX_16; 22 case PIPE_FORMAT_Z24X8_UNORM: 23 case PIPE_FORMAT_Z24_UNORM_S8_UINT: 24 case PIPE_FORMAT_X8Z24_UNORM: 25 case PIPE_FORMAT_S8_UINT_Z24_UNORM: 26 return DEPTHX_24_8; 27 case PIPE_FORMAT_Z32_FLOAT: 28 case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: 29 return DEPTHX_32; 30 default: 31 return ~0; 32 } 33 } 34 35 enum pc_di_index_size fd_pipe2index(enum pipe_format format)36fd_pipe2index(enum pipe_format format) 37 { 38 switch (format) { 39 case PIPE_FORMAT_R8_UINT: 40 return INDEX_SIZE_8_BIT; 41 case PIPE_FORMAT_R16_UINT: 42 return INDEX_SIZE_16_BIT; 43 case PIPE_FORMAT_R32_UINT: 44 return INDEX_SIZE_32_BIT; 45 default: 46 return ~0; 47 } 48 } 49 50 /* we need to special case a bit the depth/stencil restore, because we are 51 * using the texture sampler to blit into the depth/stencil buffer, *not* 52 * into a color buffer. Otherwise fdN_tex_swiz() will do the wrong thing, 53 * as it is assuming that you are sampling into normal render target.. 54 */ 55 enum pipe_format fd_gmem_restore_format(enum pipe_format format)56fd_gmem_restore_format(enum pipe_format format) 57 { 58 switch (format) { 59 case PIPE_FORMAT_Z24X8_UNORM: 60 case PIPE_FORMAT_Z24_UNORM_S8_UINT: 61 return PIPE_FORMAT_R8G8B8A8_UNORM; 62 case PIPE_FORMAT_Z16_UNORM: 63 return PIPE_FORMAT_R8G8_UNORM; 64 case PIPE_FORMAT_S8_UINT: 65 return PIPE_FORMAT_R8_UNORM; 66 default: 67 return format; 68 } 69 } 70 71 enum adreno_rb_blend_factor fd_blend_factor(unsigned factor)72fd_blend_factor(unsigned factor) 73 { 74 switch (factor) { 75 case PIPE_BLENDFACTOR_ONE: 76 return FACTOR_ONE; 77 case PIPE_BLENDFACTOR_SRC_COLOR: 78 return FACTOR_SRC_COLOR; 79 case PIPE_BLENDFACTOR_SRC_ALPHA: 80 return FACTOR_SRC_ALPHA; 81 case PIPE_BLENDFACTOR_DST_ALPHA: 82 return FACTOR_DST_ALPHA; 83 case PIPE_BLENDFACTOR_DST_COLOR: 84 return FACTOR_DST_COLOR; 85 case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE: 86 return FACTOR_SRC_ALPHA_SATURATE; 87 case PIPE_BLENDFACTOR_CONST_COLOR: 88 return FACTOR_CONSTANT_COLOR; 89 case PIPE_BLENDFACTOR_CONST_ALPHA: 90 return FACTOR_CONSTANT_ALPHA; 91 case PIPE_BLENDFACTOR_ZERO: 92 case 0: 93 return FACTOR_ZERO; 94 case PIPE_BLENDFACTOR_INV_SRC_COLOR: 95 return FACTOR_ONE_MINUS_SRC_COLOR; 96 case PIPE_BLENDFACTOR_INV_SRC_ALPHA: 97 return FACTOR_ONE_MINUS_SRC_ALPHA; 98 case PIPE_BLENDFACTOR_INV_DST_ALPHA: 99 return FACTOR_ONE_MINUS_DST_ALPHA; 100 case PIPE_BLENDFACTOR_INV_DST_COLOR: 101 return FACTOR_ONE_MINUS_DST_COLOR; 102 case PIPE_BLENDFACTOR_INV_CONST_COLOR: 103 return FACTOR_ONE_MINUS_CONSTANT_COLOR; 104 case PIPE_BLENDFACTOR_INV_CONST_ALPHA: 105 return FACTOR_ONE_MINUS_CONSTANT_ALPHA; 106 case PIPE_BLENDFACTOR_INV_SRC1_COLOR: 107 return FACTOR_ONE_MINUS_SRC1_COLOR; 108 case PIPE_BLENDFACTOR_INV_SRC1_ALPHA: 109 return FACTOR_ONE_MINUS_SRC1_ALPHA; 110 case PIPE_BLENDFACTOR_SRC1_COLOR: 111 return FACTOR_SRC1_COLOR; 112 case PIPE_BLENDFACTOR_SRC1_ALPHA: 113 return FACTOR_SRC1_ALPHA; 114 default: 115 DBG("invalid blend factor: %x", factor); 116 return 0; 117 } 118 } 119 120 enum adreno_pa_su_sc_draw fd_polygon_mode(unsigned mode)121fd_polygon_mode(unsigned mode) 122 { 123 switch (mode) { 124 case PIPE_POLYGON_MODE_POINT: 125 return PC_DRAW_POINTS; 126 case PIPE_POLYGON_MODE_LINE: 127 return PC_DRAW_LINES; 128 case PIPE_POLYGON_MODE_FILL: 129 return PC_DRAW_TRIANGLES; 130 default: 131 DBG("invalid polygon mode: %u", mode); 132 return 0; 133 } 134 } 135 136 enum adreno_stencil_op fd_stencil_op(unsigned op)137fd_stencil_op(unsigned op) 138 { 139 switch (op) { 140 case PIPE_STENCIL_OP_KEEP: 141 return STENCIL_KEEP; 142 case PIPE_STENCIL_OP_ZERO: 143 return STENCIL_ZERO; 144 case PIPE_STENCIL_OP_REPLACE: 145 return STENCIL_REPLACE; 146 case PIPE_STENCIL_OP_INCR: 147 return STENCIL_INCR_CLAMP; 148 case PIPE_STENCIL_OP_DECR: 149 return STENCIL_DECR_CLAMP; 150 case PIPE_STENCIL_OP_INCR_WRAP: 151 return STENCIL_INCR_WRAP; 152 case PIPE_STENCIL_OP_DECR_WRAP: 153 return STENCIL_DECR_WRAP; 154 case PIPE_STENCIL_OP_INVERT: 155 return STENCIL_INVERT; 156 default: 157 DBG("invalid stencil op: %u", op); 158 return 0; 159 } 160 } 161