2 * Copyright 2016 Józef Kucia for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <vkd3d_types.h>
24 #ifndef VKD3D_NO_WIN32_TYPES
25 # include <vkd3d_windows.h>
26 # include <vkd3d_d3d12.h>
27 #endif /* VKD3D_NO_WIN32_TYPES */
29 #ifndef VKD3D_NO_VULKAN_H
30 # include <vulkan/vulkan.h>
31 #endif /* VKD3D_NO_VULKAN_H */
35 #endif /* __cplusplus */
37 enum vkd3d_structure_type
40 VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
,
41 VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO
,
42 VKD3D_STRUCTURE_TYPE_IMAGE_RESOURCE_CREATE_INFO
,
45 VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO
,
48 VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO
,
49 VKD3D_STRUCTURE_TYPE_APPLICATION_INFO
,
51 VKD3D_FORCE_32_BIT_ENUM(VKD3D_STRUCTURE_TYPE
),
54 typedef HRESULT (*PFN_vkd3d_signal_event
)(HANDLE event
);
56 typedef void * (*PFN_vkd3d_thread
)(void *data
);
58 typedef void * (*PFN_vkd3d_create_thread
)(PFN_vkd3d_thread thread_main
, void *data
);
59 typedef HRESULT (*PFN_vkd3d_join_thread
)(void *thread
);
61 struct vkd3d_instance
;
63 struct vkd3d_instance_create_info
65 enum vkd3d_structure_type type
;
68 PFN_vkd3d_signal_event pfn_signal_event
;
69 PFN_vkd3d_create_thread pfn_create_thread
;
70 PFN_vkd3d_join_thread pfn_join_thread
;
73 /* If set to NULL, libvkd3d loads libvulkan. */
74 PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr
;
76 const char * const *instance_extensions
;
77 uint32_t instance_extension_count
;
80 /* Extends vkd3d_instance_create_info. Available since 1.1. */
81 struct vkd3d_optional_instance_extensions_info
83 enum vkd3d_structure_type type
;
86 const char * const *extensions
;
87 uint32_t extension_count
;
90 /* Extends vkd3d_instance_create_info. Available since 1.2. */
91 struct vkd3d_application_info
93 enum vkd3d_structure_type type
;
96 const char *application_name
;
97 uint32_t application_version
;
99 const char *engine_name
; /* "vkd3d" if NULL */
100 uint32_t engine_version
; /* vkd3d version if engine_name is NULL */
103 struct vkd3d_device_create_info
105 enum vkd3d_structure_type type
;
108 D3D_FEATURE_LEVEL minimum_feature_level
;
110 struct vkd3d_instance
*instance
;
111 const struct vkd3d_instance_create_info
*instance_create_info
;
113 VkPhysicalDevice vk_physical_device
;
115 const char * const *device_extensions
;
116 uint32_t device_extension_count
;
122 /* Extends vkd3d_device_create_info. Available since 1.2. */
123 struct vkd3d_optional_device_extensions_info
125 enum vkd3d_structure_type type
;
128 const char * const *extensions
;
129 uint32_t extension_count
;
132 /* vkd3d_image_resource_create_info flags */
133 #define VKD3D_RESOURCE_INITIAL_STATE_TRANSITION 0x00000001
134 #define VKD3D_RESOURCE_PRESENT_STATE_TRANSITION 0x00000002
136 struct vkd3d_image_resource_create_info
138 enum vkd3d_structure_type type
;
142 D3D12_RESOURCE_DESC desc
;
144 D3D12_RESOURCE_STATES present_state
;
147 #ifndef VKD3D_NO_PROTOTYPES
149 HRESULT
vkd3d_create_instance(const struct vkd3d_instance_create_info
*create_info
,
150 struct vkd3d_instance
**instance
);
151 ULONG
vkd3d_instance_decref(struct vkd3d_instance
*instance
);
152 VkInstance
vkd3d_instance_get_vk_instance(struct vkd3d_instance
*instance
);
153 ULONG
vkd3d_instance_incref(struct vkd3d_instance
*instance
);
155 HRESULT
vkd3d_create_device(const struct vkd3d_device_create_info
*create_info
,
156 REFIID iid
, void **device
);
157 IUnknown
*vkd3d_get_device_parent(ID3D12Device
*device
);
158 VkDevice
vkd3d_get_vk_device(ID3D12Device
*device
);
159 VkPhysicalDevice
vkd3d_get_vk_physical_device(ID3D12Device
*device
);
160 struct vkd3d_instance
*vkd3d_instance_from_device(ID3D12Device
*device
);
162 uint32_t vkd3d_get_vk_queue_family_index(ID3D12CommandQueue
*queue
);
163 VkQueue
vkd3d_acquire_vk_queue(ID3D12CommandQueue
*queue
);
164 void vkd3d_release_vk_queue(ID3D12CommandQueue
*queue
);
166 HRESULT
vkd3d_create_image_resource(ID3D12Device
*device
,
167 const struct vkd3d_image_resource_create_info
*create_info
, ID3D12Resource
**resource
);
168 ULONG
vkd3d_resource_decref(ID3D12Resource
*resource
);
169 ULONG
vkd3d_resource_incref(ID3D12Resource
*resource
);
171 HRESULT
vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC
*desc
,
172 D3D_ROOT_SIGNATURE_VERSION version
, ID3DBlob
**blob
, ID3DBlob
**error_blob
);
173 HRESULT
vkd3d_create_root_signature_deserializer(const void *data
, SIZE_T data_size
,
174 REFIID iid
, void **deserializer
);
176 VkFormat
vkd3d_get_vk_format(DXGI_FORMAT format
);
179 DXGI_FORMAT
vkd3d_get_dxgi_format(VkFormat format
);
182 HRESULT
vkd3d_serialize_versioned_root_signature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC
*desc
,
183 ID3DBlob
**blob
, ID3DBlob
**error_blob
);
184 HRESULT
vkd3d_create_versioned_root_signature_deserializer(const void *data
, SIZE_T data_size
,
185 REFIID iid
, void **deserializer
);
187 #endif /* VKD3D_NO_PROTOTYPES */
190 * Function pointer typedefs for vkd3d functions.
192 typedef HRESULT (*PFN_vkd3d_create_instance
)(const struct vkd3d_instance_create_info
*create_info
,
193 struct vkd3d_instance
**instance
);
194 typedef ULONG (*PFN_vkd3d_instance_decref
)(struct vkd3d_instance
*instance
);
195 typedef VkInstance (*PFN_vkd3d_instance_get_vk_instance
)(struct vkd3d_instance
*instance
);
196 typedef ULONG (*PFN_vkd3d_instance_incref
)(struct vkd3d_instance
*instance
);
198 typedef HRESULT (*PFN_vkd3d_create_device
)(const struct vkd3d_device_create_info
*create_info
,
199 REFIID iid
, void **device
);
200 typedef IUnknown
* (*PFN_vkd3d_get_device_parent
)(ID3D12Device
*device
);
201 typedef VkDevice (*PFN_vkd3d_get_vk_device
)(ID3D12Device
*device
);
202 typedef VkPhysicalDevice (*PFN_vkd3d_get_vk_physical_device
)(ID3D12Device
*device
);
203 typedef struct vkd3d_instance
* (*PFN_vkd3d_instance_from_device
)(ID3D12Device
*device
);
205 typedef uint32_t (*PFN_vkd3d_get_vk_queue_family_index
)(ID3D12CommandQueue
*queue
);
206 typedef VkQueue (*PFN_vkd3d_acquire_vk_queue
)(ID3D12CommandQueue
*queue
);
207 typedef void (*PFN_vkd3d_release_vk_queue
)(ID3D12CommandQueue
*queue
);
209 typedef HRESULT (*PFN_vkd3d_create_image_resource
)(ID3D12Device
*device
,
210 const struct vkd3d_image_resource_create_info
*create_info
, ID3D12Resource
**resource
);
211 typedef ULONG (*PFN_vkd3d_resource_decref
)(ID3D12Resource
*resource
);
212 typedef ULONG (*PFN_vkd3d_resource_incref
)(ID3D12Resource
*resource
);
214 typedef HRESULT (*PFN_vkd3d_serialize_root_signature
)(const D3D12_ROOT_SIGNATURE_DESC
*desc
,
215 D3D_ROOT_SIGNATURE_VERSION version
, ID3DBlob
**blob
, ID3DBlob
**error_blob
);
216 typedef HRESULT (*PFN_vkd3d_create_root_signature_deserializer
)(const void *data
, SIZE_T data_size
,
217 REFIID iid
, void **deserializer
);
219 typedef VkFormat (*PFN_vkd3d_get_vk_format
)(DXGI_FORMAT format
);
222 typedef DXGI_FORMAT (*PFN_vkd3d_get_dxgi_format
)(VkFormat format
);
225 typedef HRESULT (*PFN_vkd3d_serialize_versioned_root_signature
)(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC
*desc
,
226 ID3DBlob
**blob
, ID3DBlob
**error_blob
);
227 typedef HRESULT (*PFN_vkd3d_create_versioned_root_signature_deserializer
)(const void *data
, SIZE_T data_size
,
228 REFIID iid
, void **deserializer
);
232 #endif /* __cplusplus */
234 #endif /* __VKD3D_H */