From 7c993ae1a611cd1c8f0c398d71aae04aeb9af8d8 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Tue, 21 Sep 2021 10:10:48 +0100 Subject: [PATCH] vkd3d: Move ID3D12RootSignature impl_froms to header Basic casts should not be function calls. Signed-off-by: Joshua Ashton --- libs/vkd3d/command.c | 4 ++-- libs/vkd3d/raytracing_pipeline.c | 8 ++++---- libs/vkd3d/state.c | 23 +++++------------------ libs/vkd3d/vkd3d_private.h | 11 ++++++++++- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 8e8ec507..c6e40ea1 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -7180,7 +7180,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_SetComputeRootSignature(d3d12_c TRACE("iface %p, root_signature %p.\n", iface, root_signature); d3d12_command_list_set_root_signature(list, VK_PIPELINE_BIND_POINT_COMPUTE, - unsafe_impl_from_ID3D12RootSignature(root_signature)); + impl_from_ID3D12RootSignature(root_signature)); } static void STDMETHODCALLTYPE d3d12_command_list_SetGraphicsRootSignature(d3d12_command_list_iface *iface, @@ -7191,7 +7191,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_SetGraphicsRootSignature(d3d12_ TRACE("iface %p, root_signature %p.\n", iface, root_signature); d3d12_command_list_set_root_signature(list, VK_PIPELINE_BIND_POINT_GRAPHICS, - unsafe_impl_from_ID3D12RootSignature(root_signature)); + impl_from_ID3D12RootSignature(root_signature)); } static void d3d12_command_list_set_descriptor_table(struct d3d12_command_list *list, diff --git a/libs/vkd3d/raytracing_pipeline.c b/libs/vkd3d/raytracing_pipeline.c index dd36bab8..04cf8db4 100644 --- a/libs/vkd3d/raytracing_pipeline.c +++ b/libs/vkd3d/raytracing_pipeline.c @@ -530,7 +530,7 @@ static HRESULT d3d12_state_object_parse_subobjects(struct d3d12_state_object *ob { data->associations[data->associations_count].export = association->pExports[j]; data->associations[data->associations_count].root_signature = - unsafe_impl_from_ID3D12RootSignature(local_rs->pLocalRootSignature); + impl_from_ID3D12RootSignature(local_rs->pLocalRootSignature); data->associations_count++; } } @@ -766,9 +766,9 @@ static struct d3d12_root_signature *d3d12_state_object_pipeline_data_get_local_r } if (data->high_priority_local_root_signature) - return unsafe_impl_from_ID3D12RootSignature(data->high_priority_local_root_signature); + return impl_from_ID3D12RootSignature(data->high_priority_local_root_signature); else if (data->low_priority_local_root_signature) - return unsafe_impl_from_ID3D12RootSignature(data->low_priority_local_root_signature); + return impl_from_ID3D12RootSignature(data->low_priority_local_root_signature); else return NULL; } @@ -877,7 +877,7 @@ static HRESULT d3d12_state_object_compile_pipeline(struct d3d12_state_object *ob shader_interface_info.stage = VK_SHADER_STAGE_ALL; shader_interface_info.xfb_info = NULL; - global_signature = unsafe_impl_from_ID3D12RootSignature(data->global_root_signature); + global_signature = impl_from_ID3D12RootSignature(data->global_root_signature); if (global_signature) { diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 1fe2294b..74e64281 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -25,11 +25,6 @@ #include /* ID3D12RootSignature */ -static inline struct d3d12_root_signature *impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) -{ - return CONTAINING_RECORD(iface, struct d3d12_root_signature, ID3D12RootSignature_iface); -} - static HRESULT STDMETHODCALLTYPE d3d12_root_signature_QueryInterface(ID3D12RootSignature *iface, REFIID riid, void **object) { @@ -142,7 +137,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_root_signature_GetDevice(ID3D12RootSignat return d3d12_device_query_interface(root_signature->device, iid, device); } -static CONST_VTBL struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl = +CONST_VTBL struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl = { /* IUnknown methods */ d3d12_root_signature_QueryInterface, @@ -157,14 +152,6 @@ static CONST_VTBL struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl = d3d12_root_signature_GetDevice, }; -struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) -{ - if (!iface) - return NULL; - assert(iface->lpVtbl == &d3d12_root_signature_vtbl); - return impl_from_ID3D12RootSignature(iface); -} - static VkShaderStageFlags stage_flags_from_visibility(D3D12_SHADER_VISIBILITY visibility) { switch (visibility) @@ -2206,9 +2193,9 @@ static HRESULT d3d12_pipeline_state_init_compute(struct d3d12_pipeline_state *st state->refcount = 1; if (desc->root_signature) - root_signature = unsafe_impl_from_ID3D12RootSignature(desc->root_signature); + root_signature = impl_from_ID3D12RootSignature(desc->root_signature); else - root_signature = unsafe_impl_from_ID3D12RootSignature(state->private_root_signature); + root_signature = impl_from_ID3D12RootSignature(state->private_root_signature); shader_interface.flags = d3d12_root_signature_get_shader_interface_flags(root_signature); shader_interface.min_ssbo_alignment = d3d12_device_get_ssbo_alignment(device); @@ -3034,9 +3021,9 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s } if (desc->root_signature) - root_signature = unsafe_impl_from_ID3D12RootSignature(desc->root_signature); + root_signature = impl_from_ID3D12RootSignature(desc->root_signature); else - root_signature = unsafe_impl_from_ID3D12RootSignature(state->private_root_signature); + root_signature = impl_from_ID3D12RootSignature(state->private_root_signature); sample_count = vk_samples_from_dxgi_sample_desc(&desc->sample_desc); if (desc->sample_desc.Count != 1 && desc->sample_desc.Quality) diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index aefc5e15..003cc70c 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1344,7 +1344,16 @@ struct d3d12_root_signature HRESULT d3d12_root_signature_create(struct d3d12_device *device, const void *bytecode, size_t bytecode_length, struct d3d12_root_signature **root_signature); -struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface); + +static inline struct d3d12_root_signature *impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) +{ + extern CONST_VTBL struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl; + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d12_root_signature_vtbl); + return CONTAINING_RECORD(iface, struct d3d12_root_signature, ID3D12RootSignature_iface); +} + unsigned int d3d12_root_signature_get_shader_interface_flags(const struct d3d12_root_signature *root_signature); int vkd3d_parse_root_signature_v_1_0(const struct vkd3d_shader_code *dxbc,