2 * Copyright 2010 Red Hat Inc.
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 * on the rights to use, copy, modify, merge, publish, distribute, sub
8 * license, and/or sell copies of the Software, and to permit persons to whom
9 * the Software is furnished to do so, subject to the following conditions:
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
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 NON-INFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21 * USE OR OTHER DEALINGS IN THE SOFTWARE.
23 #ifndef R600_STATE_INLINES_H
24 #define R600_STATE_INLINES_H
26 #include "util/u_format.h"
29 static INLINE
uint32_t r600_translate_blend_function(int blend_func
)
33 return V_028804_COMB_DST_PLUS_SRC
;
34 case PIPE_BLEND_SUBTRACT
:
35 return V_028804_COMB_SRC_MINUS_DST
;
36 case PIPE_BLEND_REVERSE_SUBTRACT
:
37 return V_028804_COMB_DST_MINUS_SRC
;
39 return V_028804_COMB_MIN_DST_SRC
;
41 return V_028804_COMB_MAX_DST_SRC
;
43 R600_ERR("Unknown blend function %d\n", blend_func
);
50 static INLINE
uint32_t r600_translate_blend_factor(int blend_fact
)
53 case PIPE_BLENDFACTOR_ONE
:
54 return V_028804_BLEND_ONE
;
55 case PIPE_BLENDFACTOR_SRC_COLOR
:
56 return V_028804_BLEND_SRC_COLOR
;
57 case PIPE_BLENDFACTOR_SRC_ALPHA
:
58 return V_028804_BLEND_SRC_ALPHA
;
59 case PIPE_BLENDFACTOR_DST_ALPHA
:
60 return V_028804_BLEND_DST_ALPHA
;
61 case PIPE_BLENDFACTOR_DST_COLOR
:
62 return V_028804_BLEND_DST_COLOR
;
63 case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE
:
64 return V_028804_BLEND_SRC_ALPHA_SATURATE
;
65 case PIPE_BLENDFACTOR_CONST_COLOR
:
66 return V_028804_BLEND_CONST_COLOR
;
67 case PIPE_BLENDFACTOR_CONST_ALPHA
:
68 return V_028804_BLEND_CONST_ALPHA
;
69 case PIPE_BLENDFACTOR_ZERO
:
70 return V_028804_BLEND_ZERO
;
71 case PIPE_BLENDFACTOR_INV_SRC_COLOR
:
72 return V_028804_BLEND_ONE_MINUS_SRC_COLOR
;
73 case PIPE_BLENDFACTOR_INV_SRC_ALPHA
:
74 return V_028804_BLEND_ONE_MINUS_SRC_ALPHA
;
75 case PIPE_BLENDFACTOR_INV_DST_ALPHA
:
76 return V_028804_BLEND_ONE_MINUS_DST_ALPHA
;
77 case PIPE_BLENDFACTOR_INV_DST_COLOR
:
78 return V_028804_BLEND_ONE_MINUS_DST_COLOR
;
79 case PIPE_BLENDFACTOR_INV_CONST_COLOR
:
80 return V_028804_BLEND_ONE_MINUS_CONST_COLOR
;
81 case PIPE_BLENDFACTOR_INV_CONST_ALPHA
:
82 return V_028804_BLEND_ONE_MINUS_CONST_ALPHA
;
83 case PIPE_BLENDFACTOR_SRC1_COLOR
:
84 return V_028804_BLEND_SRC1_COLOR
;
85 case PIPE_BLENDFACTOR_SRC1_ALPHA
:
86 return V_028804_BLEND_SRC1_ALPHA
;
87 case PIPE_BLENDFACTOR_INV_SRC1_COLOR
:
88 return V_028804_BLEND_INV_SRC1_COLOR
;
89 case PIPE_BLENDFACTOR_INV_SRC1_ALPHA
:
90 return V_028804_BLEND_INV_SRC1_ALPHA
;
92 R600_ERR("Bad blend factor %d not supported!\n", blend_fact
);
99 static INLINE
uint32_t r600_translate_stencil_op(int s_op
)
102 case PIPE_STENCIL_OP_KEEP
:
103 return V_028800_STENCIL_KEEP
;
104 case PIPE_STENCIL_OP_ZERO
:
105 return V_028800_STENCIL_ZERO
;
106 case PIPE_STENCIL_OP_REPLACE
:
107 return V_028800_STENCIL_REPLACE
;
108 case PIPE_STENCIL_OP_INCR
:
109 return V_028800_STENCIL_INCR
;
110 case PIPE_STENCIL_OP_DECR
:
111 return V_028800_STENCIL_DECR
;
112 case PIPE_STENCIL_OP_INCR_WRAP
:
113 return V_028800_STENCIL_INCR_WRAP
;
114 case PIPE_STENCIL_OP_DECR_WRAP
:
115 return V_028800_STENCIL_DECR_WRAP
;
116 case PIPE_STENCIL_OP_INVERT
:
117 return V_028800_STENCIL_INVERT
;
119 R600_ERR("Unknown stencil op %d", s_op
);
126 /* translates straight */
127 static INLINE
uint32_t r600_translate_ds_func(int func
)
132 static uint32_t r600_translate_dbformat(enum pipe_format format
)
135 case PIPE_FORMAT_Z16_UNORM
:
136 return V_028010_DEPTH_16
;
137 case PIPE_FORMAT_Z24X8_UNORM
:
138 return V_028010_DEPTH_X8_24
;
139 case PIPE_FORMAT_Z24_UNORM_S8_USCALED
:
140 return V_028010_DEPTH_8_24
;
146 static uint32_t r600_translate_colorswap(enum pipe_format format
)
150 case PIPE_FORMAT_A8_UNORM
:
151 case PIPE_FORMAT_I8_UNORM
:
152 case PIPE_FORMAT_L8_UNORM
:
153 case PIPE_FORMAT_R8_UNORM
:
154 case PIPE_FORMAT_R8_SNORM
:
155 return V_0280A0_SWAP_STD
;
157 /* 16-bit buffers. */
158 case PIPE_FORMAT_B5G6R5_UNORM
:
159 return V_0280A0_SWAP_STD_REV
;
161 case PIPE_FORMAT_B5G5R5A1_UNORM
:
162 case PIPE_FORMAT_B5G5R5X1_UNORM
:
163 return V_0280A0_SWAP_ALT
;
165 case PIPE_FORMAT_B4G4R4A4_UNORM
:
166 case PIPE_FORMAT_B4G4R4X4_UNORM
:
167 return V_0280A0_SWAP_ALT
;
168 /* 32-bit buffers. */
170 case PIPE_FORMAT_A8B8G8R8_SRGB
:
171 return V_0280A0_SWAP_STD_REV
;
172 case PIPE_FORMAT_B8G8R8A8_SRGB
:
173 return V_0280A0_SWAP_ALT
;
175 case PIPE_FORMAT_B8G8R8A8_UNORM
:
176 case PIPE_FORMAT_B8G8R8X8_UNORM
:
177 return V_0280A0_SWAP_ALT
;
179 case PIPE_FORMAT_A8R8G8B8_UNORM
:
180 case PIPE_FORMAT_X8R8G8B8_UNORM
:
181 return V_0280A0_SWAP_ALT_REV
;
182 case PIPE_FORMAT_R8G8B8A8_SNORM
:
183 case PIPE_FORMAT_R8G8B8X8_UNORM
:
184 return V_0280A0_SWAP_STD
;
186 case PIPE_FORMAT_A8B8G8R8_UNORM
:
187 case PIPE_FORMAT_X8B8G8R8_UNORM
:
188 // case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
189 return V_0280A0_SWAP_STD_REV
;
191 case PIPE_FORMAT_Z24X8_UNORM
:
192 case PIPE_FORMAT_Z24_UNORM_S8_USCALED
:
193 return V_0280A0_SWAP_STD
;
195 case PIPE_FORMAT_R10G10B10A2_UNORM
:
196 case PIPE_FORMAT_R10G10B10X2_SNORM
:
197 case PIPE_FORMAT_B10G10R10A2_UNORM
:
198 case PIPE_FORMAT_R10SG10SB10SA2U_NORM
:
199 return V_0280A0_SWAP_STD_REV
;
201 /* 64-bit buffers. */
202 case PIPE_FORMAT_R16G16B16A16_UNORM
:
203 case PIPE_FORMAT_R16G16B16A16_SNORM
:
204 // return V_0280A0_COLOR_16_16_16_16;
205 case PIPE_FORMAT_R16G16B16A16_FLOAT
:
206 // return V_0280A0_COLOR_16_16_16_16_FLOAT;
208 /* 128-bit buffers. */
209 case PIPE_FORMAT_R32G32B32A32_FLOAT
:
210 // return V_0280A0_COLOR_32_32_32_32_FLOAT;
213 R600_ERR("unsupported colorswap format %d\n", format
);
219 static INLINE
uint32_t r600_translate_colorformat(enum pipe_format format
)
223 case PIPE_FORMAT_A8_UNORM
:
224 case PIPE_FORMAT_I8_UNORM
:
225 case PIPE_FORMAT_L8_UNORM
:
226 case PIPE_FORMAT_R8_UNORM
:
227 case PIPE_FORMAT_R8_SNORM
:
228 return V_0280A0_COLOR_8
;
230 /* 16-bit buffers. */
231 case PIPE_FORMAT_B5G6R5_UNORM
:
232 return V_0280A0_COLOR_5_6_5
;
234 case PIPE_FORMAT_B5G5R5A1_UNORM
:
235 case PIPE_FORMAT_B5G5R5X1_UNORM
:
236 return V_0280A0_COLOR_1_5_5_5
;
238 case PIPE_FORMAT_B4G4R4A4_UNORM
:
239 case PIPE_FORMAT_B4G4R4X4_UNORM
:
240 return V_0280A0_COLOR_4_4_4_4
;
242 /* 32-bit buffers. */
243 case PIPE_FORMAT_A8B8G8R8_SRGB
:
244 case PIPE_FORMAT_A8B8G8R8_UNORM
:
245 case PIPE_FORMAT_A8R8G8B8_UNORM
:
246 case PIPE_FORMAT_B8G8R8A8_SRGB
:
247 case PIPE_FORMAT_B8G8R8A8_UNORM
:
248 case PIPE_FORMAT_B8G8R8X8_UNORM
:
249 case PIPE_FORMAT_R8G8B8A8_SNORM
:
250 case PIPE_FORMAT_R8G8B8A8_UNORM
:
251 case PIPE_FORMAT_R8G8B8X8_UNORM
:
252 case PIPE_FORMAT_R8SG8SB8UX8U_NORM
:
253 case PIPE_FORMAT_X8B8G8R8_UNORM
:
254 case PIPE_FORMAT_X8R8G8B8_UNORM
:
255 return V_0280A0_COLOR_8_8_8_8
;
257 case PIPE_FORMAT_R10G10B10A2_UNORM
:
258 case PIPE_FORMAT_R10G10B10X2_SNORM
:
259 case PIPE_FORMAT_B10G10R10A2_UNORM
:
260 case PIPE_FORMAT_R10SG10SB10SA2U_NORM
:
261 return V_0280A0_COLOR_10_10_10_2
;
263 case PIPE_FORMAT_Z24X8_UNORM
:
264 case PIPE_FORMAT_Z24_UNORM_S8_USCALED
:
265 return V_0280A0_COLOR_8_24
;
267 /* 64-bit buffers. */
268 case PIPE_FORMAT_R16G16B16A16_UNORM
:
269 case PIPE_FORMAT_R16G16B16A16_SNORM
:
270 return V_0280A0_COLOR_16_16_16_16
;
271 case PIPE_FORMAT_R16G16B16A16_FLOAT
:
272 return V_0280A0_COLOR_16_16_16_16_FLOAT
;
273 case PIPE_FORMAT_R32G32_FLOAT
:
274 return V_0280A0_COLOR_32_32_FLOAT
;
276 /* 128-bit buffers. */
277 case PIPE_FORMAT_R32G32B32_FLOAT
:
278 case PIPE_FORMAT_R32G32B32A32_FLOAT
:
279 return V_0280A0_COLOR_32_32_32_32_FLOAT
;
282 case PIPE_FORMAT_UYVY
:
283 case PIPE_FORMAT_YUYV
:
285 R600_ERR("unsupported color format %d\n", format
);
286 return ~0; /* Unsupported. */
290 static INLINE boolean
r600_is_sampler_format_supported(enum pipe_format format
)
292 return r600_translate_texformat(format
, NULL
, NULL
, NULL
) != ~0;
295 static INLINE boolean
r600_is_colorbuffer_format_supported(enum pipe_format format
)
297 return r600_translate_colorformat(format
) != ~0 &&
298 r600_translate_colorswap(format
) != ~0;
301 static INLINE boolean
r600_is_zs_format_supported(enum pipe_format format
)
303 return r600_translate_dbformat(format
) != ~0;
306 static INLINE boolean
r600_is_vertex_format_supported(enum pipe_format format
)
308 return r600_translate_colorformat(format
) != ~0;