Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/frontends/d3d10umd/State.h
4565 views
1
/**************************************************************************
2
*
3
* Copyright 2012-2021 VMware, Inc.
4
* All Rights Reserved.
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a
7
* copy of this software and associated documentation files (the
8
* "Software"), to deal in the Software without restriction, including
9
* without limitation the rights to use, copy, modify, merge, publish,
10
* distribute, sub license, and/or sell copies of the Software, and to
11
* permit persons to whom the Software is furnished to do so, subject to
12
* the following conditions:
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 NON-INFRINGEMENT. IN NO EVENT SHALL
17
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
* USE OR OTHER DEALINGS IN THE SOFTWARE.
21
*
22
* The above copyright notice and this permission notice (including the
23
* next paragraph) shall be included in all copies or substantial portions
24
* of the Software.
25
*
26
**************************************************************************/
27
28
/*
29
* State.h --
30
* State declarations.
31
*/
32
33
34
#include "DriverIncludes.h"
35
#include "util/u_hash_table.h"
36
37
38
#define SUPPORT_MSAA 0
39
#define SUPPORT_D3D10_1 0
40
#define SUPPORT_D3D11 0
41
42
43
struct Adapter
44
{
45
struct pipe_screen *screen;
46
};
47
48
49
static inline Adapter *
50
CastAdapter(D3D10DDI_HADAPTER hAdapter)
51
{
52
return static_cast<Adapter *>(hAdapter.pDrvPrivate);
53
}
54
55
struct Shader
56
{
57
void *handle;
58
uint type;
59
struct pipe_shader_state state;
60
unsigned output_mapping[PIPE_MAX_SHADER_OUTPUTS];
61
boolean output_resolved;
62
};
63
64
struct Query;
65
66
struct Device
67
{
68
struct pipe_context *pipe;
69
70
struct pipe_framebuffer_state fb;
71
struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS];
72
struct pipe_resource *index_buffer;
73
unsigned restart_index;
74
unsigned index_size;
75
unsigned ib_offset;
76
void *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
77
struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
78
79
void *empty_fs;
80
void *empty_vs;
81
82
enum pipe_prim_type primitive;
83
84
struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_BUFFERS];
85
struct pipe_stream_output_target *draw_so_target;
86
Shader *bound_empty_gs;
87
Shader *bound_vs;
88
89
unsigned max_dual_source_render_targets;
90
91
D3D10DDI_HRTCORELAYER hRTCoreLayer;
92
93
HANDLE hDevice;
94
HANDLE hContext;
95
96
D3DDDI_DEVICECALLBACKS KTCallbacks;
97
D3D10DDI_CORELAYER_DEVICECALLBACKS UMCallbacks;
98
DXGI_DDI_BASE_CALLBACKS *pDXGIBaseCallbacks;
99
100
INT LastEmittedQuerySeqNo;
101
INT LastFinishedQuerySeqNo;
102
103
Query *pPredicate;
104
BOOL PredicateValue;
105
};
106
107
108
static inline Device *
109
CastDevice(D3D10DDI_HDEVICE hDevice)
110
{
111
return static_cast<Device *>(hDevice.pDrvPrivate);
112
}
113
114
115
static inline struct pipe_context *
116
CastPipeContext(D3D10DDI_HDEVICE hDevice)
117
{
118
Device *pDevice = CastDevice(hDevice);
119
return pDevice ? pDevice->pipe : NULL;
120
}
121
122
123
static inline Device *
124
CastDevice(DXGI_DDI_HDEVICE hDevice)
125
{
126
return reinterpret_cast<Device *>(hDevice);
127
}
128
129
130
static inline struct pipe_context *
131
CastPipeDevice(DXGI_DDI_HDEVICE hDevice)
132
{
133
Device *pDevice = CastDevice(hDevice);
134
return pDevice ? pDevice->pipe : NULL;
135
}
136
137
138
static inline void
139
SetError(D3D10DDI_HDEVICE hDevice, HRESULT hr)
140
{
141
if (FAILED(hr)) {
142
Device *pDevice = CastDevice(hDevice);
143
pDevice->UMCallbacks.pfnSetErrorCb(pDevice->hRTCoreLayer, hr);
144
}
145
}
146
147
148
struct Resource
149
{
150
DXGI_FORMAT Format;
151
UINT MipLevels;
152
UINT NumSubResources;
153
struct pipe_resource *resource;
154
struct pipe_transfer **transfers;
155
struct pipe_stream_output_target *so_target;
156
};
157
158
159
static inline Resource *
160
CastResource(D3D10DDI_HRESOURCE hResource)
161
{
162
return static_cast<Resource *>(hResource.pDrvPrivate);
163
}
164
165
166
static inline Resource *
167
CastResource(DXGI_DDI_HRESOURCE hResource)
168
{
169
return reinterpret_cast<Resource *>(hResource);
170
}
171
172
173
static inline struct pipe_resource *
174
CastPipeResource(D3D10DDI_HRESOURCE hResource)
175
{
176
Resource *pResource = CastResource(hResource);
177
return pResource ? pResource->resource : NULL;
178
}
179
180
181
static inline struct pipe_resource *
182
CastPipeResource(DXGI_DDI_HRESOURCE hResource)
183
{
184
Resource *pResource = CastResource(hResource);
185
return pResource ? pResource->resource : NULL;
186
}
187
188
189
static inline struct pipe_resource *
190
CastPipeBuffer(D3D10DDI_HRESOURCE hResource)
191
{
192
Resource *pResource = CastResource(hResource);
193
if (!pResource) {
194
return NULL;
195
}
196
return static_cast<struct pipe_resource *>(pResource->resource);
197
}
198
199
200
struct RenderTargetView
201
{
202
struct pipe_surface *surface;
203
D3D10DDI_HRTRENDERTARGETVIEW hRTRenderTargetView;
204
};
205
206
207
static inline RenderTargetView *
208
CastRenderTargetView(D3D10DDI_HRENDERTARGETVIEW hRenderTargetView)
209
{
210
return static_cast<RenderTargetView *>(hRenderTargetView.pDrvPrivate);
211
}
212
213
214
static inline struct pipe_surface *
215
CastPipeRenderTargetView(D3D10DDI_HRENDERTARGETVIEW hRenderTargetView)
216
{
217
RenderTargetView *pRenderTargetView = CastRenderTargetView(hRenderTargetView);
218
return pRenderTargetView ? pRenderTargetView->surface : NULL;
219
}
220
221
222
struct DepthStencilView
223
{
224
struct pipe_surface *surface;
225
D3D10DDI_HRTDEPTHSTENCILVIEW hRTDepthStencilView;
226
};
227
228
229
static inline DepthStencilView *
230
CastDepthStencilView(D3D10DDI_HDEPTHSTENCILVIEW hDepthStencilView)
231
{
232
return static_cast<DepthStencilView *>(hDepthStencilView.pDrvPrivate);
233
}
234
235
236
static inline struct pipe_surface *
237
CastPipeDepthStencilView(D3D10DDI_HDEPTHSTENCILVIEW hDepthStencilView)
238
{
239
DepthStencilView *pDepthStencilView = CastDepthStencilView(hDepthStencilView);
240
return pDepthStencilView ? pDepthStencilView->surface : NULL;
241
}
242
243
244
struct BlendState
245
{
246
void *handle;
247
};
248
249
250
static inline BlendState *
251
CastBlendState(D3D10DDI_HBLENDSTATE hBlendState)
252
{
253
return static_cast<BlendState *>(hBlendState.pDrvPrivate);
254
}
255
256
257
static inline void *
258
CastPipeBlendState(D3D10DDI_HBLENDSTATE hBlendState)
259
{
260
BlendState *pBlendState = CastBlendState(hBlendState);
261
return pBlendState ? pBlendState->handle : NULL;
262
}
263
264
265
struct DepthStencilState
266
{
267
void *handle;
268
};
269
270
271
static inline DepthStencilState *
272
CastDepthStencilState(D3D10DDI_HDEPTHSTENCILSTATE hDepthStencilState)
273
{
274
return static_cast<DepthStencilState *>(hDepthStencilState.pDrvPrivate);
275
}
276
277
278
static inline void *
279
CastPipeDepthStencilState(D3D10DDI_HDEPTHSTENCILSTATE hDepthStencilState)
280
{
281
DepthStencilState *pDepthStencilState = CastDepthStencilState(hDepthStencilState);
282
return pDepthStencilState ? pDepthStencilState->handle : NULL;
283
}
284
285
286
struct RasterizerState
287
{
288
void *handle;
289
};
290
291
292
static inline RasterizerState *
293
CastRasterizerState(D3D10DDI_HRASTERIZERSTATE hRasterizerState)
294
{
295
return static_cast<RasterizerState *>(hRasterizerState.pDrvPrivate);
296
}
297
298
299
static inline void *
300
CastPipeRasterizerState(D3D10DDI_HRASTERIZERSTATE hRasterizerState)
301
{
302
RasterizerState *pRasterizerState = CastRasterizerState(hRasterizerState);
303
return pRasterizerState ? pRasterizerState->handle : NULL;
304
}
305
306
307
static inline Shader *
308
CastShader(D3D10DDI_HSHADER hShader)
309
{
310
return static_cast<Shader *>(hShader.pDrvPrivate);
311
}
312
313
314
static inline void *
315
CastPipeShader(D3D10DDI_HSHADER hShader)
316
{
317
Shader *pShader = static_cast<Shader *>(hShader.pDrvPrivate);
318
return pShader ? pShader->handle : NULL;
319
}
320
321
322
struct ElementLayout
323
{
324
void *handle;
325
};
326
327
328
static inline ElementLayout *
329
CastElementLayout(D3D10DDI_HELEMENTLAYOUT hElementLayout)
330
{
331
return static_cast<ElementLayout *>(hElementLayout.pDrvPrivate);
332
}
333
334
static inline void *
335
CastPipeInputLayout(D3D10DDI_HELEMENTLAYOUT hElementLayout)
336
{
337
ElementLayout *pElementLayout = CastElementLayout(hElementLayout);
338
return pElementLayout ? pElementLayout->handle : NULL;
339
}
340
341
342
struct SamplerState
343
{
344
void *handle;
345
};
346
347
348
static inline SamplerState *
349
CastSamplerState(D3D10DDI_HSAMPLER hSampler)
350
{
351
return static_cast<SamplerState *>(hSampler.pDrvPrivate);
352
}
353
354
355
static inline void *
356
CastPipeSamplerState(D3D10DDI_HSAMPLER hSampler)
357
{
358
SamplerState *pSamplerState = CastSamplerState(hSampler);
359
return pSamplerState ? pSamplerState->handle : NULL;
360
}
361
362
363
struct ShaderResourceView
364
{
365
struct pipe_sampler_view *handle;
366
};
367
368
369
static inline ShaderResourceView *
370
CastShaderResourceView(D3D10DDI_HSHADERRESOURCEVIEW hShaderResourceView)
371
{
372
return static_cast<ShaderResourceView *>(hShaderResourceView.pDrvPrivate);
373
}
374
375
376
static inline struct pipe_sampler_view *
377
CastPipeShaderResourceView(D3D10DDI_HSHADERRESOURCEVIEW hShaderResourceView)
378
{
379
ShaderResourceView *pSRView = CastShaderResourceView(hShaderResourceView);
380
return pSRView ? pSRView->handle : NULL;
381
}
382
383
384
struct Query
385
{
386
D3D10DDI_QUERY Type;
387
UINT Flags;
388
389
unsigned pipe_type;
390
struct pipe_query *handle;
391
INT SeqNo;
392
UINT GetDataCount;
393
394
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS Statistics;
395
};
396
397
398
static inline Query *
399
CastQuery(D3D10DDI_HQUERY hQuery)
400
{
401
return static_cast<Query *>(hQuery.pDrvPrivate);
402
}
403
404
405
static inline struct pipe_query *
406
CastPipeQuery(D3D10DDI_HQUERY hQuery)
407
{
408
Query *pQuery = CastQuery(hQuery);
409
return pQuery ? pQuery->handle : NULL;
410
}
411
412
413