ReactOS 0.4.17-dev-923-g4c9a150
vkd3d.h File Reference
#include <vkd3d_types.h>
#include <windows.h>
#include <d3d12.h>
#include <wine/vulkan.h>
Include dependency graph for vkd3d.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  vkd3d_instance_create_info
 
struct  vkd3d_optional_instance_extensions_info
 
struct  vkd3d_application_info
 
struct  vkd3d_host_time_domain_info
 
struct  vkd3d_device_create_info
 
struct  vkd3d_optional_device_extensions_info
 
struct  vkd3d_image_resource_create_info
 

Macros

#define VKD3D_RESOURCE_INITIAL_STATE_TRANSITION   0x00000001
 
#define VKD3D_RESOURCE_PRESENT_STATE_TRANSITION   0x00000002
 
#define VKD3D_API   VKD3D_IMPORT
 

Typedefs

typedef HRESULT(* PFN_vkd3d_signal_event) (HANDLE event)
 
typedef void *(* PFN_vkd3d_thread) (void *data)
 
typedef void *(* PFN_vkd3d_create_thread) (PFN_vkd3d_thread thread_main, void *data)
 
typedef HRESULT(* PFN_vkd3d_join_thread) (void *thread)
 
typedef HRESULT(* PFN_vkd3d_create_instance) (const struct vkd3d_instance_create_info *create_info, struct vkd3d_instance **instance)
 
typedef ULONG(* PFN_vkd3d_instance_decref) (struct vkd3d_instance *instance)
 
typedef VkInstance(* PFN_vkd3d_instance_get_vk_instance) (struct vkd3d_instance *instance)
 
typedef ULONG(* PFN_vkd3d_instance_incref) (struct vkd3d_instance *instance)
 
typedef HRESULT(* PFN_vkd3d_create_device) (const struct vkd3d_device_create_info *create_info, REFIID iid, void **device)
 
typedef IUnknown *(* PFN_vkd3d_get_device_parent) (ID3D12Device *device)
 
typedef VkDevice(* PFN_vkd3d_get_vk_device) (ID3D12Device *device)
 
typedef VkPhysicalDevice(* PFN_vkd3d_get_vk_physical_device) (ID3D12Device *device)
 
typedef struct vkd3d_instance *(* PFN_vkd3d_instance_from_device) (ID3D12Device *device)
 
typedef uint32_t(* PFN_vkd3d_get_vk_queue_family_index) (ID3D12CommandQueue *queue)
 
typedef VkQueue(* PFN_vkd3d_acquire_vk_queue) (ID3D12CommandQueue *queue)
 
typedef void(* PFN_vkd3d_release_vk_queue) (ID3D12CommandQueue *queue)
 
typedef HRESULT(* PFN_vkd3d_create_image_resource) (ID3D12Device *device, const struct vkd3d_image_resource_create_info *create_info, ID3D12Resource **resource)
 
typedef ULONG(* PFN_vkd3d_resource_decref) (ID3D12Resource *resource)
 
typedef ULONG(* PFN_vkd3d_resource_incref) (ID3D12Resource *resource)
 
typedef HRESULT(* PFN_vkd3d_serialize_root_signature) (const D3D12_ROOT_SIGNATURE_DESC *desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
 
typedef HRESULT(* PFN_vkd3d_create_root_signature_deserializer) (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
typedef VkFormat(* PFN_vkd3d_get_vk_format) (DXGI_FORMAT format)
 
typedef DXGI_FORMAT(* PFN_vkd3d_get_dxgi_format) (VkFormat format)
 
typedef HRESULT(* PFN_vkd3d_serialize_versioned_root_signature) (const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)
 
typedef HRESULT(* PFN_vkd3d_create_versioned_root_signature_deserializer) (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
typedef void(* PFN_vkd3d_set_log_callback) (PFN_vkd3d_log callback)
 

Enumerations

enum  vkd3d_structure_type {
  VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO , VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO , VKD3D_STRUCTURE_TYPE_IMAGE_RESOURCE_CREATE_INFO , VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO ,
  VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO , VKD3D_STRUCTURE_TYPE_APPLICATION_INFO , VKD3D_STRUCTURE_TYPE_HOST_TIME_DOMAIN_INFO , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_STRUCTURE_TYPE)
}
 
enum  vkd3d_api_version {
  VKD3D_API_VERSION_1_0 , VKD3D_API_VERSION_1_1 , VKD3D_API_VERSION_1_2 , VKD3D_API_VERSION_1_3 ,
  VKD3D_API_VERSION_1_4 , VKD3D_API_VERSION_1_5 , VKD3D_API_VERSION_1_6 , VKD3D_API_VERSION_1_7 ,
  VKD3D_API_VERSION_1_8 , VKD3D_API_VERSION_1_9 , VKD3D_API_VERSION_1_10 , VKD3D_API_VERSION_1_11 ,
  VKD3D_API_VERSION_1_12 , VKD3D_API_VERSION_1_13 , VKD3D_API_VERSION_1_14 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_STRUCTURE_TYPE)
}
 

Functions

VKD3D_API HRESULT vkd3d_create_instance (const struct vkd3d_instance_create_info *create_info, struct vkd3d_instance **instance)
 
VKD3D_API ULONG vkd3d_instance_decref (struct vkd3d_instance *instance)
 
VKD3D_API VkInstance vkd3d_instance_get_vk_instance (struct vkd3d_instance *instance)
 
VKD3D_API ULONG vkd3d_instance_incref (struct vkd3d_instance *instance)
 
VKD3D_API HRESULT vkd3d_create_device (const struct vkd3d_device_create_info *create_info, REFIID iid, void **device)
 
VKD3D_API IUnknown * vkd3d_get_device_parent (ID3D12Device *device)
 
VKD3D_API VkDevice vkd3d_get_vk_device (ID3D12Device *device)
 
VKD3D_API VkPhysicalDevice vkd3d_get_vk_physical_device (ID3D12Device *device)
 
VKD3D_API struct vkd3d_instance * vkd3d_instance_from_device (ID3D12Device *device)
 
VKD3D_API uint32_t vkd3d_get_vk_queue_family_index (ID3D12CommandQueue *queue)
 
VKD3D_API VkQueue vkd3d_acquire_vk_queue (ID3D12CommandQueue *queue)
 
VKD3D_API void vkd3d_release_vk_queue (ID3D12CommandQueue *queue)
 
VKD3D_API HRESULT vkd3d_create_image_resource (ID3D12Device *device, const struct vkd3d_image_resource_create_info *create_info, ID3D12Resource **resource)
 
VKD3D_API ULONG vkd3d_resource_decref (ID3D12Resource *resource)
 
VKD3D_API ULONG vkd3d_resource_incref (ID3D12Resource *resource)
 
VKD3D_API HRESULT vkd3d_serialize_root_signature (const D3D12_ROOT_SIGNATURE_DESC *desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
 
VKD3D_API HRESULT vkd3d_create_root_signature_deserializer (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
VKD3D_API VkFormat vkd3d_get_vk_format (DXGI_FORMAT format)
 
VKD3D_API DXGI_FORMAT vkd3d_get_dxgi_format (VkFormat format)
 
VKD3D_API HRESULT vkd3d_serialize_versioned_root_signature (const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)
 
VKD3D_API HRESULT vkd3d_create_versioned_root_signature_deserializer (const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
 
VKD3D_API void vkd3d_set_log_callback (PFN_vkd3d_log callback)
 

Detailed Description

This file contains definitions for the vkd3d library.

The vkd3d library is a 3D graphics library built on top of Vulkan. It has an API very similar, but not identical, to Direct3D 12.

Since
1.0

Definition in file vkd3d.h.

Macro Definition Documentation

◆ VKD3D_API

#define VKD3D_API   VKD3D_IMPORT

Definition at line 377 of file vkd3d.h.

◆ VKD3D_RESOURCE_INITIAL_STATE_TRANSITION

#define VKD3D_RESOURCE_INITIAL_STATE_TRANSITION   0x00000001

When specified as a flag of vkd3d_image_resource_create_info, it means that vkd3d will do the initial transition operation on the image from VK_IMAGE_LAYOUT_UNDEFINED to its appropriate Vulkan layout (depending on its D3D12 resource state). If this flag is not specified the caller is responsible for transitioning the Vulkan image to the appropriate layout.

Definition at line 325 of file vkd3d.h.

◆ VKD3D_RESOURCE_PRESENT_STATE_TRANSITION

#define VKD3D_RESOURCE_PRESENT_STATE_TRANSITION   0x00000002

When specified as a flag of vkd3d_image_resource_create_info, it means that field present_state is honored.

Definition at line 330 of file vkd3d.h.

Typedef Documentation

◆ PFN_vkd3d_acquire_vk_queue

typedef VkQueue(* PFN_vkd3d_acquire_vk_queue) (ID3D12CommandQueue *queue)

Definition at line 488 of file vkd3d.h.

◆ PFN_vkd3d_create_device

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

Definition at line 480 of file vkd3d.h.

◆ PFN_vkd3d_create_image_resource

typedef HRESULT(* PFN_vkd3d_create_image_resource) (ID3D12Device *device, const struct vkd3d_image_resource_create_info *create_info, ID3D12Resource **resource)

Definition at line 491 of file vkd3d.h.

◆ PFN_vkd3d_create_instance

typedef HRESULT(* PFN_vkd3d_create_instance) (const struct vkd3d_instance_create_info *create_info, struct vkd3d_instance **instance)

Definition at line 474 of file vkd3d.h.

◆ PFN_vkd3d_create_root_signature_deserializer

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

Definition at line 498 of file vkd3d.h.

◆ PFN_vkd3d_create_thread

typedef void *(* PFN_vkd3d_create_thread) (PFN_vkd3d_thread thread_main, void *data)

Definition at line 110 of file vkd3d.h.

◆ PFN_vkd3d_create_versioned_root_signature_deserializer

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

Definition at line 509 of file vkd3d.h.

◆ PFN_vkd3d_get_device_parent

typedef IUnknown *(* PFN_vkd3d_get_device_parent) (ID3D12Device *device)

Definition at line 482 of file vkd3d.h.

◆ PFN_vkd3d_get_dxgi_format

typedef DXGI_FORMAT(* PFN_vkd3d_get_dxgi_format) (VkFormat format)

Definition at line 504 of file vkd3d.h.

◆ PFN_vkd3d_get_vk_device

typedef VkDevice(* PFN_vkd3d_get_vk_device) (ID3D12Device *device)

Definition at line 483 of file vkd3d.h.

◆ PFN_vkd3d_get_vk_format

typedef VkFormat(* PFN_vkd3d_get_vk_format) (DXGI_FORMAT format)

Definition at line 501 of file vkd3d.h.

◆ PFN_vkd3d_get_vk_physical_device

typedef VkPhysicalDevice(* PFN_vkd3d_get_vk_physical_device) (ID3D12Device *device)

Definition at line 484 of file vkd3d.h.

◆ PFN_vkd3d_get_vk_queue_family_index

typedef uint32_t(* PFN_vkd3d_get_vk_queue_family_index) (ID3D12CommandQueue *queue)

Definition at line 487 of file vkd3d.h.

◆ PFN_vkd3d_instance_decref

typedef ULONG(* PFN_vkd3d_instance_decref) (struct vkd3d_instance *instance)

Definition at line 476 of file vkd3d.h.

◆ PFN_vkd3d_instance_from_device

typedef struct vkd3d_instance *(* PFN_vkd3d_instance_from_device) (ID3D12Device *device)

Definition at line 484 of file vkd3d.h.

◆ PFN_vkd3d_instance_get_vk_instance

typedef VkInstance(* PFN_vkd3d_instance_get_vk_instance) (struct vkd3d_instance *instance)

Definition at line 477 of file vkd3d.h.

◆ PFN_vkd3d_instance_incref

typedef ULONG(* PFN_vkd3d_instance_incref) (struct vkd3d_instance *instance)

Definition at line 478 of file vkd3d.h.

◆ PFN_vkd3d_join_thread

typedef HRESULT(* PFN_vkd3d_join_thread) (void *thread)

Definition at line 111 of file vkd3d.h.

◆ PFN_vkd3d_release_vk_queue

typedef void(* PFN_vkd3d_release_vk_queue) (ID3D12CommandQueue *queue)

Definition at line 489 of file vkd3d.h.

◆ PFN_vkd3d_resource_decref

typedef ULONG(* PFN_vkd3d_resource_decref) (ID3D12Resource *resource)

Definition at line 493 of file vkd3d.h.

◆ PFN_vkd3d_resource_incref

typedef ULONG(* PFN_vkd3d_resource_incref) (ID3D12Resource *resource)

Definition at line 494 of file vkd3d.h.

◆ PFN_vkd3d_serialize_root_signature

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

Definition at line 496 of file vkd3d.h.

◆ PFN_vkd3d_serialize_versioned_root_signature

typedef HRESULT(* PFN_vkd3d_serialize_versioned_root_signature) (const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)

Definition at line 507 of file vkd3d.h.

◆ PFN_vkd3d_set_log_callback

typedef void(* PFN_vkd3d_set_log_callback) (PFN_vkd3d_log callback)

Type of vkd3d_set_log_callback().

Since
1.4

Definition at line 513 of file vkd3d.h.

◆ PFN_vkd3d_signal_event

typedef HRESULT(* PFN_vkd3d_signal_event) (HANDLE event)

Definition at line 106 of file vkd3d.h.

◆ PFN_vkd3d_thread

typedef void *(* PFN_vkd3d_thread) (void *data)

Definition at line 108 of file vkd3d.h.

Enumeration Type Documentation

◆ vkd3d_api_version

Enumerator
VKD3D_API_VERSION_1_0 
VKD3D_API_VERSION_1_1 
VKD3D_API_VERSION_1_2 
VKD3D_API_VERSION_1_3 
VKD3D_API_VERSION_1_4 
VKD3D_API_VERSION_1_5 
VKD3D_API_VERSION_1_6 
VKD3D_API_VERSION_1_7 
VKD3D_API_VERSION_1_8 
VKD3D_API_VERSION_1_9 
VKD3D_API_VERSION_1_10 
VKD3D_API_VERSION_1_11 
VKD3D_API_VERSION_1_12 
VKD3D_API_VERSION_1_13 
VKD3D_API_VERSION_1_14 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 85 of file vkd3d.h.

86{
102
103 VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION),
104};
@ VKD3D_API_VERSION_1_2
Definition: vkd3d.h:89
@ VKD3D_API_VERSION_1_6
Definition: vkd3d.h:93
@ VKD3D_API_VERSION_1_8
Definition: vkd3d.h:95
@ VKD3D_API_VERSION_1_10
Definition: vkd3d.h:97
@ VKD3D_FORCE_32_BIT_ENUM
Definition: vkd3d.h:82
@ VKD3D_API_VERSION_1_0
Definition: vkd3d.h:87
@ VKD3D_API_VERSION_1_7
Definition: vkd3d.h:94
@ VKD3D_API_VERSION_1_9
Definition: vkd3d.h:96
@ VKD3D_API_VERSION_1_1
Definition: vkd3d.h:88
@ VKD3D_API_VERSION_1_13
Definition: vkd3d.h:100
@ VKD3D_API_VERSION_1_5
Definition: vkd3d.h:92
@ VKD3D_API_VERSION_1_12
Definition: vkd3d.h:99
@ VKD3D_API_VERSION_1_3
Definition: vkd3d.h:90
@ VKD3D_API_VERSION_1_14
Definition: vkd3d.h:101
@ VKD3D_API_VERSION_1_11
Definition: vkd3d.h:98
@ VKD3D_API_VERSION_1_4
Definition: vkd3d.h:91

◆ vkd3d_structure_type

The type of a chained structure.

Enumerator
VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO 

The structure is a vkd3d_instance_create_info structure.

VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO 

The structure is a vkd3d_device_create_info structure.

VKD3D_STRUCTURE_TYPE_IMAGE_RESOURCE_CREATE_INFO 

The structure is a vkd3d_image_resource_create_info structure.

VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO 

The structure is a vkd3d_optional_instance_extensions_info structure.

Since
1.1
VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO 

The structure is a vkd3d_optional_device_extensions_info structure.

Since
1.2
VKD3D_STRUCTURE_TYPE_APPLICATION_INFO 

The structure is a vkd3d_application_info structure.

Since
1.2
VKD3D_STRUCTURE_TYPE_HOST_TIME_DOMAIN_INFO 

The structure is a vkd3d_host_time_domain_info structure.

Since
1.3
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 50 of file vkd3d.h.

51{
58
64
75
81
82 VKD3D_FORCE_32_BIT_ENUM(VKD3D_STRUCTURE_TYPE),
83};
@ VKD3D_STRUCTURE_TYPE_HOST_TIME_DOMAIN_INFO
Definition: vkd3d.h:80
@ VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO
Definition: vkd3d.h:63
@ VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
Definition: vkd3d.h:53
@ VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO
Definition: vkd3d.h:55
@ VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO
Definition: vkd3d.h:69
@ VKD3D_STRUCTURE_TYPE_IMAGE_RESOURCE_CREATE_INFO
Definition: vkd3d.h:57
@ VKD3D_STRUCTURE_TYPE_APPLICATION_INFO
Definition: vkd3d.h:74

Function Documentation

◆ vkd3d_acquire_vk_queue()

VKD3D_API VkQueue vkd3d_acquire_vk_queue ( ID3D12CommandQueue *  queue)

Acquire the Vulkan queue backing a command queue.

While a queue is acquired by the client, it is locked so that neither the vkd3d library nor other threads can submit work to it. For that reason it should be released as soon as possible with vkd3d_release_vk_queue(). The lock is not reentrant, so the same queue must not be acquired more than once by the same thread.

Work submitted through the Direct3D 12 API exposed by vkd3d is not always immediately submitted to the Vulkan queue; sometimes it is kept in another internal queue, which might not necessarily be empty at the time vkd3d_acquire_vk_queue() is called. For this reason, work submitted directly to the Vulkan queue might appear to the Vulkan driver as being submitted before other work submitted though the Direct3D 12 API. If this is not desired, it is recommended to synchronize work submission using an ID3D12Fence object, by submitting to the queue a signal operation after all the Direct3D 12 work is submitted and waiting for it before calling vkd3d_acquire_vk_queue().

Since
1.0

Definition at line 7493 of file command.c.

7494{
7496 VkQueue vk_queue = vkd3d_queue_acquire(d3d12_queue->vkd3d_queue);
7497
7498 if (d3d12_queue->op_queue.count)
7499 WARN("Acquired command queue %p with %zu remaining ops.\n", d3d12_queue, d3d12_queue->op_queue.count);
7500 else if (d3d12_queue->is_flushing)
7501 WARN("Acquired command queue %p which is flushing.\n", d3d12_queue);
7502
7503 return vk_queue;
7504}
#define WARN(fmt,...)
Definition: precomp.h:61
static struct d3d12_command_queue * impl_from_ID3D12CommandQueue(ID3D12CommandQueue *iface)
Definition: command.c:6302
VkQueue vkd3d_queue_acquire(struct vkd3d_queue *queue)
Definition: command.c:91
struct d3d12_command_queue_op_array op_queue
struct vkd3d_queue * vkd3d_queue
Definition: queue.c:179

Referenced by d3d12_swapchain_destroy_vulkan_resources(), and d3d12_swapchain_queue_present().

◆ vkd3d_create_device()

VKD3D_API 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_INVALIDARG
Definition: ddrawi.h:101
#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
#define debugstr_guid
Definition: kernel32.h:35
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
#define TRACE(s)
Definition: solgame.cpp:4
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_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_image_resource()

VKD3D_API HRESULT vkd3d_create_image_resource ( ID3D12Device *  device,
const struct vkd3d_image_resource_create_info *  create_info,
ID3D12Resource **  resource 
)

Definition at line 2264 of file resource.c.

2266{
2268 struct d3d12_resource *object;
2269 HRESULT hr;
2270
2271 TRACE("device %p, create_info %p, resource %p.\n", device, create_info, resource);
2272
2273 if (!create_info || !resource)
2274 return E_INVALIDARG;
2276 {
2277 WARN("Invalid structure type %#x.\n", create_info->type);
2278 return E_INVALIDARG;
2279 }
2280 if (create_info->next)
2281 WARN("Unhandled next %p.\n", create_info->next);
2282
2283 if (!(object = vkd3d_malloc(sizeof(*object))))
2284 return E_OUTOFMEMORY;
2285
2286 memset(object, 0, sizeof(*object));
2287
2288 object->ID3D12Resource2_iface.lpVtbl = &d3d12_resource_vtbl;
2289 object->refcount = 1;
2290 object->internal_refcount = 1;
2291 d3d12_resource_desc1_from_desc(&object->desc, &create_info->desc);
2292 object->format = vkd3d_format_from_d3d12_resource_desc(d3d12_device, &object->desc, 0);
2293 object->u.vk_image = create_info->vk_image;
2294 object->flags = VKD3D_RESOURCE_EXTERNAL;
2295 object->flags |= create_info->flags & VKD3D_RESOURCE_PUBLIC_FLAGS;
2296 object->initial_state = D3D12_RESOURCE_STATE_COMMON;
2298 object->present_state = create_info->present_state;
2299 else
2300 object->present_state = D3D12_RESOURCE_STATE_COMMON;
2301
2302 if (FAILED(hr = vkd3d_private_store_init(&object->private_store)))
2303 {
2304 vkd3d_free(object);
2305 return hr;
2306 }
2307
2309
2310 TRACE("Created resource %p.\n", object);
2311
2312 *resource = (ID3D12Resource *)&object->ID3D12Resource2_iface;
2313
2314 return S_OK;
2315}
@ D3D12_RESOURCE_STATE_COMMON
Definition: d3d12.idl:904
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define S_OK
Definition: intsafe.h:52
#define memset(x, y, z)
Definition: compat.h:39
struct d3d12_device * unsafe_impl_from_ID3D12Device9(ID3D12Device9 *iface)
Definition: device.c:5398
static const struct ID3D12Resource2Vtbl d3d12_resource_vtbl
Definition: resource.c:1743
D3D12_RESOURCE_STATES present_state
Definition: vkd3d.h:371
D3D12_RESOURCE_DESC desc
Definition: vkd3d.h:346
enum vkd3d_structure_type type
Definition: vkd3d.h:339
#define VKD3D_RESOURCE_PRESENT_STATE_TRANSITION
Definition: vkd3d.h:330
static void vkd3d_free(void *ptr)
Definition: vkd3d_memory.h:52
static void * vkd3d_malloc(size_t size)
Definition: vkd3d_memory.h:28
static void d3d12_resource_desc1_from_desc(D3D12_RESOURCE_DESC1 *desc1, const D3D12_RESOURCE_DESC *desc)
static ULONG d3d12_device_add_ref(struct d3d12_device *device)
static HRESULT vkd3d_private_store_init(struct vkd3d_private_store *store)
static const struct vkd3d_format * vkd3d_format_from_d3d12_resource_desc(const struct d3d12_device *device, const D3D12_RESOURCE_DESC1 *desc, DXGI_FORMAT view_format)
#define VKD3D_RESOURCE_EXTERNAL
#define VKD3D_RESOURCE_PUBLIC_FLAGS

Referenced by d3d12_swapchain_create_image_resources().

◆ vkd3d_create_instance()

VKD3D_API HRESULT vkd3d_create_instance ( const struct vkd3d_instance_create_info *  create_info,
struct vkd3d_instance **  instance 
)

Definition at line 734 of file device.c.

736{
737 struct vkd3d_instance *object;
738 HRESULT hr;
739
740 TRACE("create_info %p, instance %p.\n", create_info, instance);
741
742 if (!create_info || !instance)
743 return E_INVALIDARG;
745 {
746 WARN("Invalid structure type %#x.\n", create_info->type);
747 return E_INVALIDARG;
748 }
749
750 if (!(object = vkd3d_malloc(sizeof(*object))))
751 return E_OUTOFMEMORY;
752
753 if (FAILED(hr = vkd3d_instance_init(object, create_info)))
754 {
755 vkd3d_free(object);
756 return hr;
757 }
758
759 TRACE("Created instance %p.\n", object);
760
761 *instance = object;
762
763 return S_OK;
764}
static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance, const struct vkd3d_instance_create_info *create_info)
Definition: device.c:572
enum vkd3d_structure_type type
Definition: vkd3d.h:121

Referenced by D3D12CreateDevice(), and vkd3d_create_device().

◆ vkd3d_create_root_signature_deserializer()

VKD3D_API 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}
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

Referenced by D3D12CreateRootSignatureDeserializer().

◆ vkd3d_create_versioned_root_signature_deserializer()

VKD3D_API 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}
#define NULL
Definition: types.h:112
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_get_device_parent()

VKD3D_API IUnknown * vkd3d_get_device_parent ( ID3D12Device *  device)

Definition at line 5694 of file device.c.

5695{
5697
5698 return d3d12_device->parent;
5699}
static struct d3d12_device * impl_from_ID3D12Device9(ID3D12Device9 *iface)
Definition: device.c:3028
IUnknown * parent

Referenced by d3d12_swapchain_GetContainingOutput().

◆ vkd3d_get_dxgi_format()

VKD3D_API DXGI_FORMAT vkd3d_get_dxgi_format ( VkFormat  format)

Definition at line 530 of file utils.c.

531{
533 VkFormat vk_format;
534 unsigned int i;
535
536 for (i = 0; i < ARRAY_SIZE(vkd3d_formats); ++i)
537 {
538 vk_format = vkd3d_formats[i].vk_format;
539 dxgi_format = vkd3d_formats[i].dxgi_format;
540 if (vk_format == format && vkd3d_formats[i].type != VKD3D_FORMAT_TYPE_TYPELESS)
541 return dxgi_format;
542 }
543
544 FIXME("Unhandled Vulkan format %#x.\n", format);
545 return DXGI_FORMAT_UNKNOWN;
546}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
DXGI_FORMAT dxgi_format
Definition: texture.c:51
DXGI_FORMAT
Definition: dxgiformat.idl:22
@ DXGI_FORMAT_UNKNOWN
Definition: dxgiformat.idl:23
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const struct vkd3d_format vkd3d_formats[]
Definition: utils.c:30
@ VKD3D_FORMAT_TYPE_TYPELESS
VkFormat
Definition: vulkan.h:2815

◆ vkd3d_get_vk_device()

VKD3D_API VkDevice vkd3d_get_vk_device ( ID3D12Device *  device)

Definition at line 5701 of file device.c.

5702{
5704
5705 return d3d12_device->vk_device;
5706}
VkDevice vk_device

Referenced by d3d12_swapchain_init().

◆ vkd3d_get_vk_format()

VKD3D_API VkFormat vkd3d_get_vk_format ( DXGI_FORMAT  format)

Definition at line 520 of file utils.c.

521{
522 const struct vkd3d_format *vkd3d_format;
523
524 if (!(vkd3d_format = vkd3d_get_format(NULL, format, false)))
525 return VK_FORMAT_UNDEFINED;
526
527 return vkd3d_format->vk_format;
528}
const struct vkd3d_format * vkd3d_get_format(const struct d3d12_device *device, DXGI_FORMAT dxgi_format, bool depth_stencil)
Definition: utils.c:442
VkFormat vk_format
@ VK_FORMAT_UNDEFINED
Definition: vulkan.h:2816

Referenced by d3d12_swapchain_create_d3d12_resources(), select_vk_format(), and vkd3d_init_format_compatibility_lists().

◆ vkd3d_get_vk_physical_device()

VKD3D_API VkPhysicalDevice vkd3d_get_vk_physical_device ( ID3D12Device *  device)

Definition at line 5708 of file device.c.

5709{
5711
5713}
VkPhysicalDevice vk_physical_device

Referenced by d3d12_swapchain_init().

◆ vkd3d_get_vk_queue_family_index()

VKD3D_API uint32_t vkd3d_get_vk_queue_family_index ( ID3D12CommandQueue *  queue)

Definition at line 7486 of file command.c.

7487{
7489
7490 return d3d12_queue->vkd3d_queue->vk_family_index;
7491}

Referenced by d3d12_swapchain_create_command_buffers(), and d3d12_swapchain_init().

◆ vkd3d_instance_decref()

VKD3D_API ULONG vkd3d_instance_decref ( struct vkd3d_instance *  instance)

Definition at line 791 of file device.c.

792{
793 unsigned int refcount = vkd3d_atomic_decrement_u32(&instance->refcount);
794
795 TRACE("%p decreasing refcount to %u.\n", instance, refcount);
796
797 if (!refcount)
799
800 return refcount;
801}
static void vkd3d_destroy_instance(struct vkd3d_instance *instance)
Definition: device.c:766
static uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:477

Referenced by d3d12_device_init(), d3d12_device_Release(), D3D12CreateDevice(), and vkd3d_create_device().

◆ vkd3d_instance_from_device()

VKD3D_API struct vkd3d_instance * vkd3d_instance_from_device ( ID3D12Device *  device)

Definition at line 5715 of file device.c.

5716{
5718
5720}
struct vkd3d_instance * vkd3d_instance

Referenced by d3d12_swapchain_init().

◆ vkd3d_instance_get_vk_instance()

VKD3D_API VkInstance vkd3d_instance_get_vk_instance ( struct vkd3d_instance *  instance)

Definition at line 803 of file device.c.

804{
805 return instance->vk_instance;
806}

Referenced by d3d12_get_vk_physical_device(), and d3d12_swapchain_init().

◆ vkd3d_instance_incref()

VKD3D_API ULONG vkd3d_instance_incref ( struct vkd3d_instance *  instance)

Definition at line 782 of file device.c.

783{
784 unsigned int refcount = vkd3d_atomic_increment_u32(&instance->refcount);
785
786 TRACE("%p increasing refcount to %u.\n", instance, refcount);
787
788 return refcount;
789}
static uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:482

Referenced by d3d12_device_init(), and vkd3d_create_device().

◆ vkd3d_release_vk_queue()

VKD3D_API void vkd3d_release_vk_queue ( ID3D12CommandQueue *  queue)

Release the Vulkan queue backing a command queue.

This must be paired to an earlier corresponding vkd3d_acquire_vk_queue(). After this function is called, the Vulkan queue returned by vkd3d_acquire_vk_queue() must not be used any more.

Since
1.0

Definition at line 7506 of file command.c.

7507{
7509
7510 return vkd3d_queue_release(d3d12_queue->vkd3d_queue);
7511}
void vkd3d_queue_release(struct vkd3d_queue *queue)
Definition: command.c:101

Referenced by d3d12_swapchain_destroy_vulkan_resources(), and d3d12_swapchain_queue_present().

◆ vkd3d_resource_decref()

VKD3D_API ULONG vkd3d_resource_decref ( ID3D12Resource *  resource)

Definition at line 2323 of file resource.c.

2324{
2325 TRACE("resource %p.\n", resource);
2327}
static ULONG d3d12_resource_decref(struct d3d12_resource *resource)
Definition: resource.c:1013
static struct d3d12_resource * impl_from_ID3D12Resource(ID3D12Resource *iface)

Referenced by d3d12_swapchain_destroy_d3d12_resources().

◆ vkd3d_resource_incref()

VKD3D_API ULONG vkd3d_resource_incref ( ID3D12Resource *  resource)

Definition at line 2317 of file resource.c.

2318{
2319 TRACE("resource %p.\n", resource);
2321}
static ULONG d3d12_resource_incref(struct d3d12_resource *resource)
Definition: resource.c:1004

Referenced by d3d12_swapchain_create_image_resources().

◆ vkd3d_serialize_root_signature()

VKD3D_API 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
@ D3D_ROOT_SIGNATURE_VERSION_1_0
Definition: d3d12.idl:1405
static HRESULT hresult_from_vkd3d_result(int vkd3d_result)
Definition: compiler.c:30
static const WCHAR version[]
Definition: asmname.c:66
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
return ret
Definition: mutex.c:147
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
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_ROOT_SIGNATURE_VERSION_1_0
VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages)

Referenced by D3D12SerializeRootSignature().

◆ vkd3d_serialize_versioned_root_signature()

VKD3D_API 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()

VKD3D_API 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().