2 * Copyright 2017 Advanced Micro Devices, 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.
24 #include "tgsi/tgsi_from_mesa.h"
26 #include "pipe/p_compiler.h"
29 * Determine the semantic index that is used when the given varying is mapped
30 * to TGSI_SEMANTIC_GENERIC.
33 tgsi_get_generic_gl_varying_index(gl_varying_slot attr
,
34 bool needs_texcoord_semantic
)
36 if (attr
>= VARYING_SLOT_VAR0
) {
37 if (needs_texcoord_semantic
)
38 return attr
- VARYING_SLOT_VAR0
;
40 return 9 + (attr
- VARYING_SLOT_VAR0
);
42 if (attr
== VARYING_SLOT_PNTC
) {
43 assert(!needs_texcoord_semantic
);
46 if (attr
>= VARYING_SLOT_TEX0
&& attr
<= VARYING_SLOT_TEX7
) {
47 assert(!needs_texcoord_semantic
);
48 return attr
- VARYING_SLOT_TEX0
;
56 * Determine the semantic name and index used for the given varying.
59 tgsi_get_gl_varying_semantic(gl_varying_slot attr
,
60 bool needs_texcoord_semantic
,
61 unsigned *semantic_name
,
62 unsigned *semantic_index
)
65 case VARYING_SLOT_PRIMITIVE_ID
:
66 *semantic_name
= TGSI_SEMANTIC_PRIMID
;
69 case VARYING_SLOT_POS
:
70 *semantic_name
= TGSI_SEMANTIC_POSITION
;
73 case VARYING_SLOT_COL0
:
74 *semantic_name
= TGSI_SEMANTIC_COLOR
;
77 case VARYING_SLOT_COL1
:
78 *semantic_name
= TGSI_SEMANTIC_COLOR
;
81 case VARYING_SLOT_BFC0
:
82 *semantic_name
= TGSI_SEMANTIC_BCOLOR
;
85 case VARYING_SLOT_BFC1
:
86 *semantic_name
= TGSI_SEMANTIC_BCOLOR
;
89 case VARYING_SLOT_FOGC
:
90 *semantic_name
= TGSI_SEMANTIC_FOG
;
93 case VARYING_SLOT_PSIZ
:
94 *semantic_name
= TGSI_SEMANTIC_PSIZE
;
97 case VARYING_SLOT_CLIP_DIST0
:
98 *semantic_name
= TGSI_SEMANTIC_CLIPDIST
;
101 case VARYING_SLOT_CLIP_DIST1
:
102 *semantic_name
= TGSI_SEMANTIC_CLIPDIST
;
105 case VARYING_SLOT_CULL_DIST0
:
106 case VARYING_SLOT_CULL_DIST1
:
107 /* these should have been lowered by GLSL */
110 case VARYING_SLOT_EDGE
:
111 *semantic_name
= TGSI_SEMANTIC_EDGEFLAG
;
114 case VARYING_SLOT_CLIP_VERTEX
:
115 *semantic_name
= TGSI_SEMANTIC_CLIPVERTEX
;
118 case VARYING_SLOT_LAYER
:
119 *semantic_name
= TGSI_SEMANTIC_LAYER
;
122 case VARYING_SLOT_VIEWPORT
:
123 *semantic_name
= TGSI_SEMANTIC_VIEWPORT_INDEX
;
126 case VARYING_SLOT_PNTC
:
127 *semantic_name
= TGSI_SEMANTIC_PCOORD
;
130 case VARYING_SLOT_TESS_LEVEL_OUTER
:
131 *semantic_name
= TGSI_SEMANTIC_TESSOUTER
;
134 case VARYING_SLOT_TESS_LEVEL_INNER
:
135 *semantic_name
= TGSI_SEMANTIC_TESSINNER
;
139 case VARYING_SLOT_TEX0
:
140 case VARYING_SLOT_TEX1
:
141 case VARYING_SLOT_TEX2
:
142 case VARYING_SLOT_TEX3
:
143 case VARYING_SLOT_TEX4
:
144 case VARYING_SLOT_TEX5
:
145 case VARYING_SLOT_TEX6
:
146 case VARYING_SLOT_TEX7
:
147 if (needs_texcoord_semantic
) {
148 *semantic_name
= TGSI_SEMANTIC_TEXCOORD
;
149 *semantic_index
= attr
- VARYING_SLOT_TEX0
;
153 case VARYING_SLOT_VAR0
:
155 assert(attr
>= VARYING_SLOT_VAR0
||
156 (attr
>= VARYING_SLOT_TEX0
&& attr
<= VARYING_SLOT_TEX7
));
157 if (attr
>= VARYING_SLOT_PATCH0
) {
158 *semantic_name
= TGSI_SEMANTIC_PATCH
;
159 *semantic_index
= attr
- VARYING_SLOT_PATCH0
;
161 *semantic_name
= TGSI_SEMANTIC_GENERIC
;
163 tgsi_get_generic_gl_varying_index(attr
, needs_texcoord_semantic
);
170 * Determine the semantic name and index used for the given fragment shader
174 tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result
,
175 unsigned *semantic_name
,
176 unsigned *semantic_index
)
178 if (frag_result
>= FRAG_RESULT_DATA0
) {
179 *semantic_name
= TGSI_SEMANTIC_COLOR
;
180 *semantic_index
= frag_result
- FRAG_RESULT_DATA0
;
186 switch (frag_result
) {
187 case FRAG_RESULT_DEPTH
:
188 *semantic_name
= TGSI_SEMANTIC_POSITION
;
190 case FRAG_RESULT_STENCIL
:
191 *semantic_name
= TGSI_SEMANTIC_STENCIL
;
193 case FRAG_RESULT_COLOR
:
194 *semantic_name
= TGSI_SEMANTIC_COLOR
;
196 case FRAG_RESULT_SAMPLE_MASK
:
197 *semantic_name
= TGSI_SEMANTIC_SAMPLEMASK
;