From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/device.c | 8 ++++---- libs/vkd3d/resource.c | 12 ++++++------ libs/vkd3d/state.c | 14 +++++++------- libs/vkd3d/utils.c | 12 ++++++++---- libs/vkd3d/vkd3d_private.h | 5 +++-- 5 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index b1f320b9d214..f1ad09033ccd 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -2103,8 +2103,8 @@ static HRESULT d3d12_device_check_multisample_quality_levels(struct d3d12_device if (data->Format == DXGI_FORMAT_UNKNOWN) goto done;
- if (!(format = vkd3d_get_format(data->Format, false))) - format = vkd3d_get_format(data->Format, true); + if (!(format = vkd3d_get_format(device, data->Format, false))) + format = vkd3d_get_format(device, data->Format, true); if (!format) { FIXME("Unhandled format %#x.\n", data->Format); @@ -2257,8 +2257,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device *
data->Support1 = D3D12_FORMAT_SUPPORT1_NONE; data->Support2 = D3D12_FORMAT_SUPPORT2_NONE; - if (!(format = vkd3d_get_format(data->Format, false))) - format = vkd3d_get_format(data->Format, true); + if (!(format = vkd3d_get_format(device, data->Format, false))) + format = vkd3d_get_format(device, data->Format, true); if (!format) { FIXME("Unhandled format %#x.\n", data->Format); diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index b0a9c9ae1f03..36fcb22e857a 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -1701,12 +1701,12 @@ static bool vkd3d_create_buffer_view(struct d3d12_device *device,
if (view_format == DXGI_FORMAT_R32_TYPELESS && (flags & VKD3D_VIEW_RAW_BUFFER)) { - format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false); + format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false); element_size = format->byte_count; } else if (view_format == DXGI_FORMAT_UNKNOWN && structure_stride) { - format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false); + format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false); element_size = structure_stride; } else if ((format = vkd3d_format_from_d3d12_resource_desc(device, &resource->desc, view_format))) @@ -2055,7 +2055,7 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor,
WARN("Creating NULL SRV %#x.\n", desc->ViewDimension);
- vkd3d_desc.format = vkd3d_get_format(VKD3D_NULL_VIEW_FORMAT, 0); + vkd3d_desc.format = vkd3d_get_format(device, VKD3D_NULL_VIEW_FORMAT, 0); vkd3d_desc.miplevel_idx = 0; vkd3d_desc.miplevel_count = 1; vkd3d_desc.layer_idx = 0; @@ -2258,7 +2258,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_ assert(d3d12_resource_is_buffer(counter_resource)); assert(desc->u.Buffer.StructureByteStride);
- format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false); + format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false); if (!vkd3d_create_vk_buffer_view(device, counter_resource, format, desc->u.Buffer.CounterOffsetInBytes, sizeof(uint32_t), &view->vk_counter_view)) { @@ -2272,7 +2272,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_ if ((desc->Format == DXGI_FORMAT_R32_TYPELESS && (desc->u.Buffer.Flags & VKD3D_VIEW_RAW_BUFFER)) || desc->Format == DXGI_FORMAT_R32_UINT) { - const struct vkd3d_format *format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false); + const struct vkd3d_format *format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
descriptor->uav.buffer.offset = desc->u.Buffer.FirstElement * format->byte_count; descriptor->uav.buffer.size = desc->u.Buffer.NumElements * format->byte_count; @@ -2367,7 +2367,7 @@ bool vkd3d_create_raw_buffer_view(struct d3d12_device *device, const struct vkd3d_format *format; struct d3d12_resource *resource;
- format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false); + format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false); resource = vkd3d_gpu_va_allocator_dereference(&device->gpu_va_allocator, gpu_address); return vkd3d_create_vk_buffer_view(device, resource, format, gpu_address - resource->gpu_address, VK_WHOLE_SIZE, vk_buffer_view); diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 054a9aea1a4f..2b7059ccb390 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -1969,8 +1969,8 @@ static bool is_dual_source_blending(const D3D12_RENDER_TARGET_BLEND_DESC *desc) || is_dual_source_blending_blend(desc->DestBlendAlpha)); }
-static HRESULT compute_input_layout_offsets(const D3D12_INPUT_LAYOUT_DESC *input_layout_desc, - uint32_t *offsets) +static HRESULT compute_input_layout_offsets(const struct d3d12_device *device, + const D3D12_INPUT_LAYOUT_DESC *input_layout_desc, uint32_t *offsets) { uint32_t input_slot_offsets[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT] = {0}; const D3D12_INPUT_ELEMENT_DESC *e; @@ -1993,7 +1993,7 @@ static HRESULT compute_input_layout_offsets(const D3D12_INPUT_LAYOUT_DESC *input return E_INVALIDARG; }
- if (!(format = vkd3d_get_format(e->Format, false))) + if (!(format = vkd3d_get_format(device, e->Format, false))) { WARN("Invalid input element format %#x.\n", e->Format); return E_INVALIDARG; @@ -2145,7 +2145,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s { const D3D12_DEPTH_STENCIL_DESC *ds_desc = &desc->DepthStencilState;
- if (!(format = vkd3d_get_format(desc->DSVFormat, true))) + if (!(format = vkd3d_get_format(device, desc->DSVFormat, true))) { WARN("Invalid DSV format %#x.\n", desc->DSVFormat); hr = E_INVALIDARG; @@ -2183,7 +2183,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s const D3D12_RENDER_TARGET_BLEND_DESC *rt_desc; size_t idx = graphics->rt_idx + i;
- if (!(format = vkd3d_get_format(desc->RTVFormats[i], false))) + if (!(format = vkd3d_get_format(device, desc->RTVFormats[i], false))) { WARN("Invalid RTV format %#x.\n", desc->RTVFormats[i]); hr = E_INVALIDARG; @@ -2368,7 +2368,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s goto fail; }
- if (FAILED(hr = compute_input_layout_offsets(&desc->InputLayout, aligned_offsets))) + if (FAILED(hr = compute_input_layout_offsets(device, &desc->InputLayout, aligned_offsets))) goto fail;
graphics->instance_divisor_count = 0; @@ -2377,7 +2377,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s const D3D12_INPUT_ELEMENT_DESC *e = &desc->InputLayout.pInputElementDescs[i]; const struct vkd3d_shader_signature_element *signature_element;
- if (!(format = vkd3d_get_format(e->Format, false))) + if (!(format = vkd3d_get_format(device, e->Format, false))) { WARN("Invalid input element format %#x.\n", e->Format); hr = E_INVALIDARG; diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index afa4da3fad5d..06a958de179a 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -136,10 +136,13 @@ static const struct vkd3d_format vkd3d_depth_stencil_formats[] = * properly support typeless formats because depth/stencil formats are only * compatible with themselves in Vulkan. */ -static const struct vkd3d_format *vkd3d_get_depth_stencil_format(DXGI_FORMAT dxgi_format) +static const struct vkd3d_format *vkd3d_get_depth_stencil_format(const struct d3d12_device *device, + DXGI_FORMAT dxgi_format) { unsigned int i;
+ assert(device); + for (i = 0; i < ARRAY_SIZE(vkd3d_depth_stencil_formats); ++i) { if (vkd3d_depth_stencil_formats[i].dxgi_format == dxgi_format) @@ -149,12 +152,13 @@ static const struct vkd3d_format *vkd3d_get_depth_stencil_format(DXGI_FORMAT dxg return NULL; }
-const struct vkd3d_format *vkd3d_get_format(DXGI_FORMAT dxgi_format, bool depth_stencil) +const struct vkd3d_format *vkd3d_get_format(const struct d3d12_device *device, + DXGI_FORMAT dxgi_format, bool depth_stencil) { const struct vkd3d_format *format; unsigned int i;
- if (depth_stencil && (format = vkd3d_get_depth_stencil_format(dxgi_format))) + if (depth_stencil && (format = vkd3d_get_depth_stencil_format(device, dxgi_format))) return format;
for (i = 0; i < ARRAY_SIZE(vkd3d_formats); ++i) @@ -170,7 +174,7 @@ VkFormat vkd3d_get_vk_format(DXGI_FORMAT format) { const struct vkd3d_format *vkd3d_format;
- if (!(vkd3d_format = vkd3d_get_format(format, false))) + if (!(vkd3d_format = vkd3d_get_format(NULL, format, false))) return VK_FORMAT_UNDEFINED;
return vkd3d_format->vk_format; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 0de0abf6b9e5..915f63475330 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1034,14 +1034,15 @@ static inline bool vkd3d_format_is_compressed(const struct vkd3d_format *format) return format->block_byte_count != 1; }
-const struct vkd3d_format *vkd3d_get_format(DXGI_FORMAT dxgi_format, bool depth_stencil) DECLSPEC_HIDDEN; +const struct vkd3d_format *vkd3d_get_format(const struct d3d12_device *device, + DXGI_FORMAT dxgi_format, bool depth_stencil) DECLSPEC_HIDDEN;
bool dxgi_format_is_typeless(DXGI_FORMAT dxgi_format) DECLSPEC_HIDDEN;
static inline const struct vkd3d_format *vkd3d_format_from_d3d12_resource_desc( const struct d3d12_device *device, const D3D12_RESOURCE_DESC *desc, DXGI_FORMAT view_format) { - return vkd3d_get_format(view_format ? view_format : desc->Format, + return vkd3d_get_format(device, view_format ? view_format : desc->Format, desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); }