xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/freedreno/freedreno_util.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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)17 fd_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)36 fd_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)56 fd_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)72 fd_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)121 fd_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)137 fd_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