~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/gallium/drivers/nouveau/nv30/nv30_format.c

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright 2012 Red Hat Inc.
3
 
 *
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
 
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 
 * and/or sell copies of the Software, and to permit persons to whom the
9
 
 * Software is furnished to do so, subject to the following conditions:
10
 
 *
11
 
 * The above copyright notice and this permission notice shall be included in
12
 
 * all copies or substantial portions of the Software.
13
 
 *
14
 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
 
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
 
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20
 
 * OTHER DEALINGS IN THE SOFTWARE.
21
 
 *
22
 
 * Authors: Ben Skeggs
23
 
 *
24
 
 */
25
 
 
26
 
#include "nv30/nv30-40_3d.xml.h"
27
 
#include "nv30/nv30_context.h"
28
 
#include "nv30/nv30_format.h"
29
 
 
30
 
#define NV30_3D_RT_FORMAT_COLOR_X1R5G5B5 2
31
 
 
32
 
#define NV30_3D_TEX_FORMAT_FORMAT_A16L16 NV30_3D_TEX_FORMAT_FORMAT_HILO16
33
 
#define NV30_3D_TEX_FORMAT_FORMAT_A16L16_RECT NV30_3D_TEX_FORMAT_FORMAT_HILO16_RECT
34
 
#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F 0x00004a00
35
 
#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA16F
36
 
#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F 0x00004b00
37
 
#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA32F
38
 
#define NV30_3D_TEX_FORMAT_FORMAT_R32F 0x00004c00
39
 
#define NV30_3D_TEX_FORMAT_FORMAT_R32F_RECT NV30_3D_TEX_FORMAT_FORMAT_R32F
40
 
#define NV30_3D_TEX_FORMAT_FORMAT_DXT1_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT1
41
 
#define NV30_3D_TEX_FORMAT_FORMAT_DXT3_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT3
42
 
#define NV30_3D_TEX_FORMAT_FORMAT_DXT5_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT5
43
 
#define NV30_3D_TEX_FORMAT_FORMAT_RG16F 0xdeadcafe
44
 
#define NV30_3D_TEX_FORMAT_FORMAT_RG16F_RECT 0xdeadcafe
45
 
 
46
 
#define NV40_3D_TEX_FORMAT_FORMAT_R32F 0x00001c00
47
 
#define NV40_3D_TEX_FORMAT_FORMAT_RG16F 0x00001f00
48
 
 
49
 
#define ____ 0
50
 
#define S___ PIPE_BIND_SAMPLER_VIEW
51
 
#define _R__ PIPE_BIND_RENDER_TARGET
52
 
#define _B__ PIPE_BIND_RENDER_TARGET | PIPE_BIND_BLENDABLE
53
 
#define _D__ PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | _B__
54
 
#define _Z__ PIPE_BIND_DEPTH_STENCIL
55
 
#define __V_ PIPE_BIND_VERTEX_BUFFER
56
 
#define SR__ (S___ | _R__)
57
 
#define SB__ (S___ | _B__)
58
 
#define SD__ (S___ | _D__)
59
 
#define SZ__ (S___ | _Z__)
60
 
#define S_V_ (S___ | __V_)
61
 
#define SRV_ (SR__ | __V_)
62
 
#define SBV_ (SB__ | __V_)
63
 
 
64
 
#define _(a,b) [PIPE_FORMAT_##a] = {                                           \
65
 
   .bindings = (b),                                                            \
66
 
}
67
 
const struct nv30_format_info
68
 
nv30_format_info_table[PIPE_FORMAT_COUNT] = {
69
 
   _(L8_UNORM            , S___),
70
 
   _(L8_SNORM            , S___),
71
 
   _(L8_SRGB             , S___),
72
 
   _(I8_UNORM            , S___),
73
 
   _(I8_SNORM            , S___),
74
 
   _(A8_UNORM            , S___),
75
 
   _(A8_SNORM            , S___),
76
 
   _(R8_UNORM            , S_V_),
77
 
   _(R8_SNORM            , S___),
78
 
   _(B5G5R5X1_UNORM      , SD__),
79
 
   _(B5G5R5A1_UNORM      , S___),
80
 
   _(B4G4R4X4_UNORM      , S___),
81
 
   _(B4G4R4A4_UNORM      , S___),
82
 
   _(B5G6R5_UNORM        , SD__),
83
 
   _(BGRX8888_UNORM      , SD__),
84
 
   _(BGRX8888_SRGB       , S___),
85
 
   _(BGRA8888_UNORM      , SD__),
86
 
   _(BGRA8888_SRGB       , S___),
87
 
   _(R8G8B8A8_UNORM      , __V_),
88
 
   _(RGBA8888_SNORM      , S___),
89
 
   _(DXT1_RGB            , S___),
90
 
   _(DXT1_SRGB           , S___),
91
 
   _(DXT1_RGBA           , S___),
92
 
   _(DXT1_SRGBA          , S___),
93
 
   _(DXT3_RGBA           , S___),
94
 
   _(DXT3_SRGBA          , S___),
95
 
   _(DXT5_RGBA           , S___),
96
 
   _(DXT5_SRGBA          , S___),
97
 
   _(L8A8_UNORM          , S___),
98
 
   _(L8A8_SRGB           , S___),
99
 
   _(R8G8_UNORM          , S_V_),
100
 
   _(R8G8_SNORM          , S___),
101
 
   _(R8G8B8_UNORM        , __V_),
102
 
   _(Z16_UNORM           , SZ__),
103
 
   _(X8Z24_UNORM         , SZ__),
104
 
   _(S8_UINT_Z24_UNORM   , SZ__),
105
 
   _(L16_UNORM           , S___),
106
 
   _(L16_SNORM           , S___),
107
 
   _(I16_UNORM           , S___),
108
 
   _(I16_SNORM           , S___),
109
 
   _(A16_UNORM           , S___),
110
 
   _(A16_SNORM           , S___),
111
 
   _(R16_UNORM           , S___),
112
 
   _(R16_SNORM           , S_V_),
113
 
   _(R16G16_SNORM        , __V_),
114
 
   _(R16G16B16_SNORM     , __V_),
115
 
   _(R16G16B16A16_SNORM  , __V_),
116
 
   _(R8G8B8A8_USCALED    , __V_),
117
 
   _(R16_FLOAT           , __V_),
118
 
   _(R16G16_FLOAT        , __V_), //S_V_),
119
 
   _(R16G16B16_FLOAT     , __V_),
120
 
   _(R16G16B16A16_FLOAT  , __V_), //SBV_),
121
 
   _(R16_SSCALED         , __V_),
122
 
   _(R16G16_SSCALED      , __V_),
123
 
   _(R16G16B16_SSCALED   , __V_),
124
 
   _(R16G16B16A16_SSCALED, __V_),
125
 
   _(R32_FLOAT           , __V_), //SRV_),
126
 
   _(R32G32_FLOAT        , __V_),
127
 
   _(R32G32B32_FLOAT     , __V_),
128
 
   _(R32G32B32A32_FLOAT  , __V_), //SRV_),
129
 
};
130
 
#undef _
131
 
#undef ____
132
 
 
133
 
#define R_(a,b) [PIPE_FORMAT_##a] = {                                          \
134
 
   .hw = NV30_3D_RT_FORMAT_COLOR_##b,                                          \
135
 
}
136
 
#define Z_(a,b) [PIPE_FORMAT_##a] = {                                          \
137
 
   .hw = NV30_3D_RT_FORMAT_ZETA_##b,                                           \
138
 
}
139
 
const struct nv30_format
140
 
nv30_format_table[PIPE_FORMAT_COUNT] = {
141
 
   R_(B5G5R5X1_UNORM    , X1R5G5B5          ),
142
 
   R_(B5G6R5_UNORM      , R5G6B5            ),
143
 
   R_(BGRX8888_UNORM    , X8R8G8B8          ),
144
 
   R_(BGRA8888_UNORM    , A8R8G8B8          ),
145
 
   Z_(Z16_UNORM         , Z16               ),
146
 
   Z_(X8Z24_UNORM       , Z24S8             ),
147
 
   Z_(S8_UINT_Z24_UNORM , Z24S8             ),
148
 
   R_(R16G16B16A16_FLOAT, A16B16G16R16_FLOAT),
149
 
   R_(R32G32B32A32_FLOAT, A32B32G32R32_FLOAT),
150
 
   R_(R32_FLOAT         , R32_FLOAT         ),
151
 
};
152
 
 
153
 
#define _(a,b,c) [PIPE_FORMAT_##a] = {                                         \
154
 
   .hw = NV30_3D_VTXFMT_TYPE_##b | ((c) << NV30_3D_VTXFMT_SIZE__SHIFT)         \
155
 
}
156
 
const struct nv30_vtxfmt
157
 
nv30_vtxfmt_table[PIPE_FORMAT_COUNT] = {
158
 
   _(R8_UNORM            , U8_UNORM   , 1),
159
 
   _(R8G8_UNORM          , U8_UNORM   , 2),
160
 
   _(R8G8B8_UNORM        , U8_UNORM   , 3),
161
 
   _(R8G8B8A8_UNORM      , U8_UNORM   , 4),
162
 
   _(R8G8B8A8_USCALED    , U8_USCALED , 4),
163
 
   _(R16_SNORM           , V16_SNORM  , 1),
164
 
   _(R16G16_SNORM        , V16_SNORM  , 2),
165
 
   _(R16G16B16_SNORM     , V16_SNORM  , 3),
166
 
   _(R16G16B16A16_SNORM  , V16_SNORM  , 4),
167
 
   _(R16_SSCALED         , V16_SSCALED, 1),
168
 
   _(R16G16_SSCALED      , V16_SSCALED, 2),
169
 
   _(R16G16B16_SSCALED   , V16_SSCALED, 3),
170
 
   _(R16G16B16A16_SSCALED, V16_SSCALED, 4),
171
 
   _(R16_FLOAT           , V16_FLOAT  , 1),
172
 
   _(R16G16_FLOAT        , V16_FLOAT  , 2),
173
 
   _(R16G16B16_FLOAT     , V16_FLOAT  , 3),
174
 
   _(R16G16B16A16_FLOAT  , V16_FLOAT  , 4),
175
 
   _(R32_FLOAT           , V32_FLOAT  , 1),
176
 
   _(R32G32_FLOAT        , V32_FLOAT  , 2),
177
 
   _(R32G32B32_FLOAT     , V32_FLOAT  , 3),
178
 
   _(R32G32B32A32_FLOAT  , V32_FLOAT  , 4),
179
 
};
180
 
#undef _
181
 
 
182
 
#define SWZ_OUT_0 0
183
 
#define SWZ_OUT_1 1
184
 
#define SWZ_OUT_C 2
185
 
 
186
 
#define SWZ_SRC_0 3
187
 
#define SWZ_SRC_1 2
188
 
#define SWZ_SRC_2 1
189
 
#define SWZ_SRC_3 0
190
 
#define SWZ_SRC_x 0
191
 
 
192
 
#define NONE 0x00000000
193
 
#define SRGB 0x00700000
194
 
 
195
 
#define ____ 0x00000000
196
 
#define SSSS 0xf0000000
197
 
 
198
 
#define _(a,b,c,d,e,f,g,h,i,j,k,l,m) [PIPE_FORMAT_##a] = {                     \
199
 
   .nv30 = NV30_3D_TEX_FORMAT_FORMAT_##b,                                      \
200
 
   .nv30_rect = NV30_3D_TEX_FORMAT_FORMAT_##b##_RECT,                          \
201
 
   .nv40 = NV40_3D_TEX_FORMAT_FORMAT_##b,                                      \
202
 
   .swz[0] = { SWZ_OUT_##d, SWZ_SRC_##h },                                     \
203
 
   .swz[1] = { SWZ_OUT_##e, SWZ_SRC_##i },                                     \
204
 
   .swz[2] = { SWZ_OUT_##f, SWZ_SRC_##j },                                     \
205
 
   .swz[3] = { SWZ_OUT_##g, SWZ_SRC_##k },                                     \
206
 
   .swz[4] = { SWZ_OUT_0, SWZ_SRC_x },                                         \
207
 
   .swz[5] = { SWZ_OUT_1, SWZ_SRC_x },                                         \
208
 
   .swizzle = (c) * 0x00010000,                                                \
209
 
   .wrap =  (l),                                                               \
210
 
   .filter = (m),                                                              \
211
 
}
212
 
const struct nv30_texfmt
213
 
nv30_texfmt_table[PIPE_FORMAT_COUNT] = {
214
 
   _(L8_UNORM          , L8      , 0, C, C, C, 1, 0, 0, 0, x, NONE, ____),
215
 
   _(L8_SNORM          , L8      , 0, C, C, C, 1, 0, 0, 0, x, NONE, SSSS),
216
 
   _(L8_SRGB           , L8      , 0, C, C, C, 1, 0, 0, 0, x, SRGB, ____),
217
 
   _(I8_UNORM          , L8      , 0, C, C, C, C, 0, 0, 0, 0, NONE, ____),
218
 
   _(I8_SNORM          , L8      , 0, C, C, C, C, 0, 0, 0, 0, NONE, SSSS),
219
 
   _(A8_UNORM          , L8      , 0, 0, 0, 0, C, x, x, x, 0, NONE, ____),
220
 
   _(A8_SNORM          , L8      , 0, 0, 0, 0, C, x, x, x, 0, NONE, SSSS),
221
 
   _(R8_UNORM          , L8      , 0, C, 0, 0, 1, 0, x, x, x, NONE, ____),
222
 
   _(R8_SNORM          , L8      , 0, C, 0, 0, 1, 0, x, x, x, NONE, SSSS),
223
 
   _(B5G5R5X1_UNORM    , A1R5G5B5, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
224
 
   _(B5G5R5A1_UNORM    , A1R5G5B5, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
225
 
   _(B4G4R4X4_UNORM    , A4R4G4B4, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
226
 
   _(B4G4R4A4_UNORM    , A4R4G4B4, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
227
 
   _(B5G6R5_UNORM      , R5G6B5  , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
228
 
   _(BGRX8888_UNORM    , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
229
 
   _(BGRX8888_SRGB     , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),
230
 
   _(BGRA8888_UNORM    , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
231
 
   _(BGRA8888_SRGB     , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
232
 
   _(RGBA8888_SNORM    , A8R8G8B8, 0, C, C, C, C, 0, 1, 2, 3, NONE, SSSS),
233
 
   _(DXT1_RGB          , DXT1    , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
234
 
   _(DXT1_SRGB         , DXT1    , 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),
235
 
   _(DXT1_RGBA         , DXT1    , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
236
 
   _(DXT1_SRGBA        , DXT1    , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
237
 
   _(DXT3_RGBA         , DXT3    , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
238
 
   _(DXT3_SRGBA        , DXT3    , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
239
 
   _(DXT5_RGBA         , DXT5    , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
240
 
   _(DXT5_SRGBA        , DXT5    , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
241
 
   _(L8A8_UNORM        , A8L8    , 0, C, C, C, C, 0, 0, 0, 3, NONE, ____),
242
 
   _(L8A8_SRGB         , A8L8    , 0, C, C, C, C, 0, 0, 0, 3, SRGB, ____),
243
 
   _(R8G8_UNORM        , A8L8    , 0, C, C, 0, 1, 0, 3, x, x, NONE, ____),
244
 
   _(R8G8_SNORM        , A8L8    , 0, C, C, 0, 1, 0, 3, x, x, NONE, SSSS),
245
 
   _(Z16_UNORM         , Z16     , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),
246
 
   _(X8Z24_UNORM       , Z24     , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),
247
 
   _(S8_UINT_Z24_UNORM , Z24     , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),
248
 
   _(L16_UNORM         , A16     , 0, C, C, C, 1, 1, 1, 1, 1, NONE, ____),
249
 
   _(L16_SNORM         , A16     , 0, C, C, C, 1, 1, 1, 1, 1, NONE, SSSS),
250
 
   _(I16_UNORM         , A16     , 0, C, C, C, C, 1, 1, 1, 1, NONE, ____),
251
 
   _(I16_SNORM         , A16     , 0, C, C, C, C, 1, 1, 1, 1, NONE, SSSS),
252
 
   _(A16_UNORM         , A16     , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, ____),
253
 
   _(A16_SNORM         , A16     , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, SSSS),
254
 
   _(R16_UNORM         , A16     , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, ____),
255
 
   _(R16_SNORM         , A16     , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, SSSS),
256
 
   _(R16G16_FLOAT      , RG16F   , 0, C, C, 0, 1, 2, 1, 0, 3, NONE, ____),
257
 
   _(R16G16B16A16_FLOAT, RGBA16F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
258
 
   _(R32_FLOAT         , R32F    , 0, C, 0, 0, 1, 2, 1, 0, 3, NONE, ____),
259
 
   _(R32G32B32A32_FLOAT, RGBA32F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
260
 
};
261
 
#undef _