ReactOS 0.4.17-dev-934-g091855f
vkd3d_main.c File Reference
#include "vkd3d_private.h"
Include dependency graph for vkd3d_main.c:

Go to the source code of this file.

Classes

struct  d3d12_root_signature_deserializer
 
struct  d3d12_versioned_root_signature_deserializer
 

Functions

 VKD3D_DEBUG_ENV_NAME ("VKD3D_DEBUG")
 
HRESULT vkd3d_create_device (const struct vkd3d_device_create_info *create_info, REFIID iid, void **device)
 
 STATIC_ASSERT (sizeof(D3D12_ROOT_SIGNATURE_DESC)==sizeof(struct vkd3d_shader_root_signature_desc))
 
static struct d3d12_root_signature_deserializer * impl_from_ID3D12RootSignatureDeserializer (ID3D12RootSignatureDeserializer *iface)
 
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_deserializer_QueryInterface (ID3D12RootSignatureDeserializer *iface, REFIID riid, void **object)
 
static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_AddRef (ID3D12RootSignatureDeserializer *iface)
 
static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_Release (ID3D12RootSignatureDeserializer *iface)
 
static const D3D12_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_root_signature_deserializer_GetRootSignatureDesc (ID3D12RootSignatureDeserializer *iface)
 
int vkd3d_parse_root_signature_v_1_0 (const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *out_desc)
 
static HRESULT d3d12_root_signature_deserializer_init (struct d3d12_root_signature_deserializer *deserializer, const struct vkd3d_shader_code *dxbc)
 
HRESULT vkd3d_create_root_signature_deserializer (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
 STATIC_ASSERT (sizeof(D3D12_VERSIONED_ROOT_SIGNATURE_DESC)==sizeof(struct vkd3d_shader_versioned_root_signature_desc))
 
static struct d3d12_versioned_root_signature_deserializer * impl_from_ID3D12VersionedRootSignatureDeserializer (ID3D12VersionedRootSignatureDeserializer *iface)
 
static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_QueryInterface (ID3D12VersionedRootSignatureDeserializer *iface, REFIID iid, void **object)
 
static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_AddRef (ID3D12VersionedRootSignatureDeserializer *iface)
 
static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_Release (ID3D12VersionedRootSignatureDeserializer *iface)
 
static enum vkd3d_shader_root_signature_version vkd3d_root_signature_version_from_d3d12 (D3D_ROOT_SIGNATURE_VERSION version)
 
static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion (ID3D12VersionedRootSignatureDeserializer *iface, D3D_ROOT_SIGNATURE_VERSION version, const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **desc)
 
static const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetUnconvertedRootSignatureDesc (ID3D12VersionedRootSignatureDeserializer *iface)
 
static HRESULT d3d12_versioned_root_signature_deserializer_init (struct d3d12_versioned_root_signature_deserializer *deserializer, const struct vkd3d_shader_code *dxbc)
 
HRESULT vkd3d_create_versioned_root_signature_deserializer (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
HRESULT vkd3d_serialize_root_signature (const D3D12_ROOT_SIGNATURE_DESC *desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
 
HRESULT vkd3d_serialize_versioned_root_signature (const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)
 
void vkd3d_set_log_callback (PFN_vkd3d_log callback)
 

Variables

static const struct ID3D12RootSignatureDeserializerVtbl d3d12_root_signature_deserializer_vtbl
 
static const struct ID3D12VersionedRootSignatureDeserializerVtbl d3d12_versioned_root_signature_deserializer_vtbl
 

Function Documentation

◆ d3d12_root_signature_deserializer_AddRef()

static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_AddRef ( ID3D12RootSignatureDeserializer *  iface)
static

Definition at line 123 of file vkd3d_main.c.

124{
126 unsigned int refcount = vkd3d_atomic_increment_u32(&deserializer->refcount);
127
128 TRACE("%p increasing refcount to %u.\n", deserializer, refcount);
129
130 return refcount;
131}
#define TRACE(s)
Definition: solgame.cpp:4
static uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:482
static struct d3d12_root_signature_deserializer * impl_from_ID3D12RootSignatureDeserializer(ID3D12RootSignatureDeserializer *iface)
Definition: vkd3d_main.c:96

◆ d3d12_root_signature_deserializer_GetRootSignatureDesc()

static const D3D12_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_root_signature_deserializer_GetRootSignatureDesc ( ID3D12RootSignatureDeserializer *  iface)
static

Definition at line 149 of file vkd3d_main.c.

151{
153
154 TRACE("iface %p.\n", iface);
155
157 return &deserializer->desc.d3d12.u.Desc_1_0;
158}
@ D3D_ROOT_SIGNATURE_VERSION_1_0
Definition: d3d12.idl:1405
D3D12_ROOT_SIGNATURE_DESC Desc_1_0
Definition: d3d12.idl:1414
D3D_ROOT_SIGNATURE_VERSION Version
Definition: d3d12.idl:1411
D3D12_VERSIONED_ROOT_SIGNATURE_DESC d3d12
Definition: vkd3d_main.c:89
union d3d12_root_signature_deserializer::@6021 desc
#define VKD3D_ASSERT(cond)
Definition: vkd3d_common.h:49

◆ d3d12_root_signature_deserializer_init()

static HRESULT d3d12_root_signature_deserializer_init ( struct d3d12_root_signature_deserializer *  deserializer,
const struct vkd3d_shader_code *  dxbc 
)
static

Definition at line 204 of file vkd3d_main.c.

206{
207 int ret;
208
210 deserializer->refcount = 1;
211
212 if ((ret = vkd3d_parse_root_signature_v_1_0(dxbc, &deserializer->desc.vkd3d)) < 0)
214
215 return S_OK;
216}
static HRESULT hresult_from_vkd3d_result(int vkd3d_result)
Definition: compiler.c:30
return ret
Definition: mutex.c:147
#define S_OK
Definition: intsafe.h:52
struct vkd3d_shader_versioned_root_signature_desc vkd3d
Definition: vkd3d_main.c:90
ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer_iface
Definition: vkd3d_main.c:84
int vkd3d_parse_root_signature_v_1_0(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *out_desc)
Definition: vkd3d_main.c:170
static const struct ID3D12RootSignatureDeserializerVtbl d3d12_root_signature_deserializer_vtbl
Definition: vkd3d_main.c:160

Referenced by vkd3d_create_root_signature_deserializer().

◆ d3d12_root_signature_deserializer_QueryInterface()

static HRESULT STDMETHODCALLTYPE d3d12_root_signature_deserializer_QueryInterface ( ID3D12RootSignatureDeserializer *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 102 of file vkd3d_main.c.

104{
105 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
106
107 /* QueryInterface() implementation is broken, E_NOINTERFACE is returned for
108 * IUnknown.
109 */
110 if (IsEqualGUID(riid, &IID_ID3D12RootSignatureDeserializer))
111 {
112 ID3D12RootSignatureDeserializer_AddRef(iface);
113 *object = iface;
114 return S_OK;
115 }
116
117 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
118
119 *object = NULL;
120 return E_NOINTERFACE;
121}
#define WARN(fmt,...)
Definition: precomp.h:61
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ d3d12_root_signature_deserializer_Release()

static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_Release ( ID3D12RootSignatureDeserializer *  iface)
static

Definition at line 133 of file vkd3d_main.c.

134{
136 unsigned int refcount = vkd3d_atomic_decrement_u32(&deserializer->refcount);
137
138 TRACE("%p decreasing refcount to %u.\n", deserializer, refcount);
139
140 if (!refcount)
141 {
143 vkd3d_free(deserializer);
144 }
145
146 return refcount;
147}
static uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:477
static void vkd3d_free(void *ptr)
Definition: vkd3d_memory.h:52
VKD3D_SHADER_API void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *root_signature)

◆ d3d12_versioned_root_signature_deserializer_AddRef()

static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_AddRef ( ID3D12VersionedRootSignatureDeserializer *  iface)
static

Definition at line 284 of file vkd3d_main.c.

285{
287 unsigned int refcount = vkd3d_atomic_increment_u32(&deserializer->refcount);
288
289 TRACE("%p increasing refcount to %u.\n", deserializer, refcount);
290
291 return refcount;
292}
static struct d3d12_versioned_root_signature_deserializer * impl_from_ID3D12VersionedRootSignatureDeserializer(ID3D12VersionedRootSignatureDeserializer *iface)
Definition: vkd3d_main.c:256

◆ d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion()

static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion ( ID3D12VersionedRootSignatureDeserializer *  iface,
D3D_ROOT_SIGNATURE_VERSION  version,
const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **  desc 
)
static

Definition at line 326 of file vkd3d_main.c.

329{
331 int ret;
332
333 TRACE("iface %p, version %#x, desc %p.\n", iface, version, desc);
334
336 {
337 WARN("Root signature version %#x not supported.\n", version);
338 return E_INVALIDARG;
339 }
340
341 if (deserializer->desc.d3d12.Version == version)
342 {
343 *desc = &deserializer->desc.d3d12;
344 return S_OK;
345 }
346
347 if (!deserializer->other_desc.d3d12.Version)
348 {
351 {
352 WARN("Failed to convert versioned root signature, vkd3d result %d.\n", ret);
354 }
355 }
356
357 VKD3D_ASSERT(deserializer->other_desc.d3d12.Version == version);
358 *desc = &deserializer->other_desc.d3d12;
359 return S_OK;
360}
@ D3D_ROOT_SIGNATURE_VERSION_1_1
Definition: d3d12.idl:1406
#define E_INVALIDARG
Definition: ddrawi.h:101
static const WCHAR version[]
Definition: asmname.c:66
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
struct vkd3d_shader_versioned_root_signature_desc vkd3d
Definition: vkd3d_main.c:250
union d3d12_versioned_root_signature_deserializer::@6022 other_desc
union d3d12_versioned_root_signature_deserializer::@6022 desc
D3D12_VERSIONED_ROOT_SIGNATURE_DESC d3d12
Definition: vkd3d_main.c:249
static enum vkd3d_shader_root_signature_version vkd3d_root_signature_version_from_d3d12(D3D_ROOT_SIGNATURE_VERSION version)
Definition: vkd3d_main.c:311
VKD3D_SHADER_API int vkd3d_shader_convert_root_signature(struct vkd3d_shader_versioned_root_signature_desc *dst, enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src)
Definition: dxbc.c:1756

◆ d3d12_versioned_root_signature_deserializer_GetUnconvertedRootSignatureDesc()

static const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetUnconvertedRootSignatureDesc ( ID3D12VersionedRootSignatureDeserializer *  iface)
static

Definition at line 363 of file vkd3d_main.c.

364{
366
367 TRACE("iface %p.\n", iface);
368
369 return &deserializer->desc.d3d12;
370}

◆ d3d12_versioned_root_signature_deserializer_init()

static HRESULT d3d12_versioned_root_signature_deserializer_init ( struct d3d12_versioned_root_signature_deserializer *  deserializer,
const struct vkd3d_shader_code *  dxbc 
)
static

Definition at line 383 of file vkd3d_main.c.

385{
386 int ret;
387
389 deserializer->refcount = 1;
390
391 if ((ret = vkd3d_shader_parse_root_signature(dxbc, &deserializer->desc.vkd3d, NULL)) < 0)
392 {
393 WARN("Failed to parse root signature, vkd3d result %d.\n", ret);
395 }
396
397 memset(&deserializer->other_desc, 0, sizeof(deserializer->other_desc));
398
399 return S_OK;
400}
#define memset(x, y, z)
Definition: compat.h:39
ID3D12VersionedRootSignatureDeserializer ID3D12VersionedRootSignatureDeserializer_iface
Definition: vkd3d_main.c:244
static const struct ID3D12VersionedRootSignatureDeserializerVtbl d3d12_versioned_root_signature_deserializer_vtbl
Definition: vkd3d_main.c:372
VKD3D_SHADER_API int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages)
Definition: dxbc.c:1043

Referenced by vkd3d_create_versioned_root_signature_deserializer().

◆ d3d12_versioned_root_signature_deserializer_QueryInterface()

static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_QueryInterface ( ID3D12VersionedRootSignatureDeserializer *  iface,
REFIID  iid,
void **  object 
)
static

Definition at line 263 of file vkd3d_main.c.

265{
266 TRACE("iface %p, iid %s, object %p.\n", iface, debugstr_guid(iid), object);
267
268 /* QueryInterface() implementation is broken, E_NOINTERFACE is returned for
269 * IUnknown.
270 */
271 if (IsEqualGUID(iid, &IID_ID3D12VersionedRootSignatureDeserializer))
272 {
273 ID3D12VersionedRootSignatureDeserializer_AddRef(iface);
274 *object = iface;
275 return S_OK;
276 }
277
278 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
279
280 *object = NULL;
281 return E_NOINTERFACE;
282}

◆ d3d12_versioned_root_signature_deserializer_Release()

static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_Release ( ID3D12VersionedRootSignatureDeserializer *  iface)
static

Definition at line 294 of file vkd3d_main.c.

295{
297 unsigned int refcount = vkd3d_atomic_decrement_u32(&deserializer->refcount);
298
299 TRACE("%p decreasing refcount to %u.\n", deserializer, refcount);
300
301 if (!refcount)
302 {
305 vkd3d_free(deserializer);
306 }
307
308 return refcount;
309}

◆ impl_from_ID3D12RootSignatureDeserializer()

static struct d3d12_root_signature_deserializer * impl_from_ID3D12RootSignatureDeserializer ( ID3D12RootSignatureDeserializer *  iface)
static

Definition at line 96 of file vkd3d_main.c.

98{
99 return CONTAINING_RECORD(iface, struct d3d12_root_signature_deserializer, ID3D12RootSignatureDeserializer_iface);
100}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by d3d12_root_signature_deserializer_AddRef(), d3d12_root_signature_deserializer_GetRootSignatureDesc(), and d3d12_root_signature_deserializer_Release().

◆ impl_from_ID3D12VersionedRootSignatureDeserializer()

◆ STATIC_ASSERT() [1/2]

◆ STATIC_ASSERT() [2/2]

◆ vkd3d_create_device()

HRESULT vkd3d_create_device ( const struct vkd3d_device_create_info *  create_info,
REFIID  iid,
void **  device 
)

Definition at line 23 of file vkd3d_main.c.

25{
27 struct d3d12_device *object;
28 HRESULT hr;
29
30 TRACE("create_info %p, iid %s, device %p.\n", create_info, debugstr_guid(iid), device);
31
32 if (!create_info)
33 return E_INVALIDARG;
35 {
36 WARN("Invalid structure type %#x.\n", create_info->type);
37 return E_INVALIDARG;
38 }
39 if (!create_info->instance && !create_info->instance_create_info)
40 {
41 WARN("Instance or instance create info is required.\n");
42 return E_INVALIDARG;
43 }
44 if (create_info->instance && create_info->instance_create_info)
45 {
46 WARN("Instance and instance create info are mutually exclusive parameters.\n");
47 return E_INVALIDARG;
48 }
49
52 {
53 WARN("Invalid feature level %#x.\n", create_info->minimum_feature_level);
54 return E_INVALIDARG;
55 }
56
57 if ((instance = create_info->instance))
58 {
60 }
62 {
63 WARN("Failed to create instance, hr %s.\n", debugstr_hresult(hr));
64 return E_FAIL;
65 }
66
67 hr = d3d12_device_create(instance, create_info, &object);
69 if (FAILED(hr))
70 return hr;
71
72 if (!device)
73 {
74 ID3D12Device9_Release(&object->ID3D12Device9_iface);
75 return S_FALSE;
76 }
77
78 return return_interface(&object->ID3D12Device9_iface, &IID_ID3D12Device, iid, device);
79}
@ D3D_FEATURE_LEVEL_11_0
Definition: d3dcommon.idl:109
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
static HINSTANCE instance
Definition: main.c:35
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT d3d12_device_create(struct vkd3d_instance *instance, const struct vkd3d_device_create_info *create_info, struct d3d12_device **device)
Definition: device.c:5534
HRESULT return_interface(void *iface, REFIID iface_iid, REFIID requested_iid, void **object)
Definition: utils.c:628
bool is_valid_feature_level(D3D_FEATURE_LEVEL feature_level)
Definition: utils.c:548
Definition: devices.h:37
struct vkd3d_instance * instance
Definition: vkd3d.h:261
const struct vkd3d_instance_create_info * instance_create_info
Definition: vkd3d.h:266
D3D_FEATURE_LEVEL minimum_feature_level
Definition: vkd3d.h:255
enum vkd3d_structure_type type
Definition: vkd3d.h:249
VKD3D_API HRESULT vkd3d_create_instance(const struct vkd3d_instance_create_info *create_info, struct vkd3d_instance **instance)
Definition: device.c:734
VKD3D_API ULONG vkd3d_instance_decref(struct vkd3d_instance *instance)
Definition: device.c:791
@ VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO
Definition: vkd3d.h:55
VKD3D_API ULONG vkd3d_instance_incref(struct vkd3d_instance *instance)
Definition: device.c:782
static const char * debugstr_hresult(HRESULT hr)
Definition: vkd3d_common.h:244
#define S_FALSE
Definition: winerror.h:3451

Referenced by D3D12CreateDevice().

◆ vkd3d_create_root_signature_deserializer()

HRESULT vkd3d_create_root_signature_deserializer ( const void *  data,
SIZE_T  data_size,
REFIID  iid,
void **  deserializer 
)

Definition at line 218 of file vkd3d_main.c.

220{
221 struct vkd3d_shader_code dxbc = {data, data_size};
223 HRESULT hr;
224
225 TRACE("data %p, data_size %"PRIuPTR", iid %s, deserializer %p.\n",
226 data, (uintptr_t)data_size, debugstr_guid(iid), deserializer);
227
228 if (!(object = vkd3d_malloc(sizeof(*object))))
229 return E_OUTOFMEMORY;
230
232 {
233 vkd3d_free(object);
234 return hr;
235 }
236
237 return return_interface(&object->ID3D12RootSignatureDeserializer_iface,
238 &IID_ID3D12RootSignatureDeserializer, iid, deserializer);
239}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
unsigned int uintptr_t
Definition: corecrt.h:185
#define PRIuPTR
Definition: inttypes.h:226
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static HRESULT d3d12_root_signature_deserializer_init(struct d3d12_root_signature_deserializer *deserializer, const struct vkd3d_shader_code *dxbc)
Definition: vkd3d_main.c:204
static void * vkd3d_malloc(size_t size)
Definition: vkd3d_memory.h:28

Referenced by D3D12CreateRootSignatureDeserializer().

◆ vkd3d_create_versioned_root_signature_deserializer()

HRESULT vkd3d_create_versioned_root_signature_deserializer ( const void *  data,
SIZE_T  data_size,
REFIID  iid,
void **  deserializer 
)

Definition at line 402 of file vkd3d_main.c.

404{
406 struct vkd3d_shader_code dxbc = {data, data_size};
407 HRESULT hr;
408
409 TRACE("data %p, data_size %"PRIuPTR", iid %s, deserializer %p.\n",
410 data, (uintptr_t)data_size, debugstr_guid(iid), deserializer);
411
412 if (!(object = vkd3d_malloc(sizeof(*object))))
413 return E_OUTOFMEMORY;
414
416 {
417 vkd3d_free(object);
418 *deserializer = NULL;
419 return hr;
420 }
421
422 return return_interface(&object->ID3D12VersionedRootSignatureDeserializer_iface,
423 &IID_ID3D12VersionedRootSignatureDeserializer, iid, deserializer);
424}
static HRESULT d3d12_versioned_root_signature_deserializer_init(struct d3d12_versioned_root_signature_deserializer *deserializer, const struct vkd3d_shader_code *dxbc)
Definition: vkd3d_main.c:383

Referenced by D3D12CreateVersionedRootSignatureDeserializer().

◆ VKD3D_DEBUG_ENV_NAME()

VKD3D_DEBUG_ENV_NAME ( "VKD3D_DEBUG"  )

◆ vkd3d_parse_root_signature_v_1_0()

int vkd3d_parse_root_signature_v_1_0 ( const struct vkd3d_shader_code *  dxbc,
struct vkd3d_shader_versioned_root_signature_desc *  out_desc 
)

Definition at line 170 of file vkd3d_main.c.

172{
174 int ret;
175
176 if ((ret = vkd3d_shader_parse_root_signature(dxbc, &desc, NULL)) < 0)
177 {
178 WARN("Failed to parse root signature, vkd3d result %d.\n", ret);
179 return ret;
180 }
181
183 {
184 *out_desc = desc;
185 }
186 else
187 {
189
192 if (ret < 0)
193 {
194 WARN("Failed to convert from version %#x, vkd3d result %d.\n", version, ret);
195 return ret;
196 }
197
198 *out_desc = converted_desc;
199 }
200
201 return ret;
202}
vkd3d_shader_root_signature_version
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0

Referenced by d3d12_root_signature_create(), and d3d12_root_signature_deserializer_init().

◆ vkd3d_root_signature_version_from_d3d12()

static enum vkd3d_shader_root_signature_version vkd3d_root_signature_version_from_d3d12 ( D3D_ROOT_SIGNATURE_VERSION  version)
static

Definition at line 311 of file vkd3d_main.c.

313{
314 switch (version)
315 {
320 default:
321 WARN("Unknown root signature version %#x.\n", version);
322 return 0;
323 }
324}
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1

Referenced by d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion().

◆ vkd3d_serialize_root_signature()

HRESULT vkd3d_serialize_root_signature ( const D3D12_ROOT_SIGNATURE_DESC *  desc,
D3D_ROOT_SIGNATURE_VERSION  version,
ID3DBlob **  blob,
ID3DBlob **  error_blob 
)

Definition at line 426 of file vkd3d_main.c.

428{
430 struct vkd3d_shader_code dxbc;
431 char *messages;
432 HRESULT hr;
433 int ret;
434
435 TRACE("desc %p, version %#x, blob %p, error_blob %p.\n", desc, version, blob, error_blob);
436
438 {
439 WARN("Unexpected Root signature version %#x.\n", version);
440 return E_INVALIDARG;
441 }
442
443 if (!blob)
444 {
445 WARN("Invalid blob parameter.\n");
446 return E_INVALIDARG;
447 }
448
449 if (error_blob)
450 *error_blob = NULL;
451
452 vkd3d_desc.version = VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0;
453 vkd3d_desc.u.v_1_0 = *(const struct vkd3d_shader_root_signature_desc *)desc;
454 if ((ret = vkd3d_shader_serialize_root_signature(&vkd3d_desc, &dxbc, &messages)) < 0)
455 {
456 WARN("Failed to serialize root signature, vkd3d result %d.\n", ret);
457 if (!error_blob)
459 else if (messages && FAILED(hr = vkd3d_blob_create(messages, strlen(messages), error_blob)))
460 ERR("Failed to create error blob, hr %s.\n", debugstr_hresult(hr));
462 }
464
465 if (FAILED(hr = vkd3d_blob_create((void *)dxbc.code, dxbc.size, blob)))
466 {
467 WARN("Failed to create blob object, hr %s.\n", debugstr_hresult(hr));
469 }
470 return hr;
471}
#define ERR(fmt,...)
Definition: precomp.h:57
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
Definition: image.c:229
HRESULT vkd3d_blob_create(void *buffer, SIZE_T size, ID3D10Blob **blob)
Definition: blob.c:126
VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code)
VKD3D_SHADER_API int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_root_signature_desc *root_signature, struct vkd3d_shader_code *dxbc, char **messages)
Definition: dxbc.c:1447
VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages)

Referenced by D3D12SerializeRootSignature().

◆ vkd3d_serialize_versioned_root_signature()

HRESULT vkd3d_serialize_versioned_root_signature ( const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *  desc,
ID3DBlob **  blob,
ID3DBlob **  error_blob 
)

Definition at line 473 of file vkd3d_main.c.

475{
476 const struct vkd3d_shader_versioned_root_signature_desc *vkd3d_desc;
477 struct vkd3d_shader_code dxbc;
478 char *messages;
479 HRESULT hr;
480 int ret;
481
482 TRACE("desc %p, blob %p, error_blob %p.\n", desc, blob, error_blob);
483
484 if (!blob)
485 {
486 WARN("Invalid blob parameter.\n");
487 return E_INVALIDARG;
488 }
489
490 if (error_blob)
491 *error_blob = NULL;
492
493 vkd3d_desc = (const struct vkd3d_shader_versioned_root_signature_desc *)desc;
494 if ((ret = vkd3d_shader_serialize_root_signature(vkd3d_desc, &dxbc, &messages)) < 0)
495 {
496 WARN("Failed to serialize root signature, vkd3d result %d.\n", ret);
497 if (!error_blob)
499 else if (messages && FAILED(hr = vkd3d_blob_create(messages, strlen(messages), error_blob)))
500 ERR("Failed to create error blob, hr %s.\n", debugstr_hresult(hr));
502 }
504
505 if (FAILED(hr = vkd3d_blob_create((void *)dxbc.code, dxbc.size, blob)))
506 {
507 WARN("Failed to create blob object, hr %s.\n", debugstr_hresult(hr));
509 }
510 return hr;
511}

Referenced by D3D12SerializeVersionedRootSignature().

◆ vkd3d_set_log_callback()

void vkd3d_set_log_callback ( PFN_vkd3d_log  callback)

Set a callback to be called when vkd3d outputs debug logging.

If NULL, or if this function has not been called, libvkd3d will print all enabled log output to stderr.

Calling this function will also set the log callback for libvkd3d-shader.

Parameters
callbackCallback function to set.
Since
1.4

Definition at line 513 of file vkd3d_main.c.

514{
517}
static IPrintDialogCallback callback
Definition: printdlg.c:325
void void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback)
Definition: debug.c:119
VKD3D_SHADER_API void vkd3d_shader_set_log_callback(PFN_vkd3d_log callback)

Referenced by wined3d_dll_init().

Variable Documentation

◆ d3d12_root_signature_deserializer_vtbl

const struct ID3D12RootSignatureDeserializerVtbl d3d12_root_signature_deserializer_vtbl
static
Initial value:
=
{
}
static const D3D12_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_root_signature_deserializer_GetRootSignatureDesc(ID3D12RootSignatureDeserializer *iface)
Definition: vkd3d_main.c:149
static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_AddRef(ID3D12RootSignatureDeserializer *iface)
Definition: vkd3d_main.c:123
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_deserializer_QueryInterface(ID3D12RootSignatureDeserializer *iface, REFIID riid, void **object)
Definition: vkd3d_main.c:102
static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_Release(ID3D12RootSignatureDeserializer *iface)
Definition: vkd3d_main.c:133

Definition at line 160 of file vkd3d_main.c.

Referenced by d3d12_root_signature_deserializer_init().

◆ d3d12_versioned_root_signature_deserializer_vtbl

const struct ID3D12VersionedRootSignatureDeserializerVtbl d3d12_versioned_root_signature_deserializer_vtbl
static
Initial value:
=
{
}
static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_AddRef(ID3D12VersionedRootSignatureDeserializer *iface)
Definition: vkd3d_main.c:284
static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion(ID3D12VersionedRootSignatureDeserializer *iface, D3D_ROOT_SIGNATURE_VERSION version, const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **desc)
Definition: vkd3d_main.c:326
static ULONG STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_Release(ID3D12VersionedRootSignatureDeserializer *iface)
Definition: vkd3d_main.c:294
static HRESULT STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_QueryInterface(ID3D12VersionedRootSignatureDeserializer *iface, REFIID iid, void **object)
Definition: vkd3d_main.c:263
static const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE d3d12_versioned_root_signature_deserializer_GetUnconvertedRootSignatureDesc(ID3D12VersionedRootSignatureDeserializer *iface)
Definition: vkd3d_main.c:363

Definition at line 372 of file vkd3d_main.c.

Referenced by d3d12_versioned_root_signature_deserializer_init().