=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Pass device to vkd3d_get_format( ).

Alexandre Julliard julliard at winehq.org
Thu May 9 10:07:30 CDT 2019


Module: vkd3d
Branch: master
Commit: 9536f103837aa3d954fe208f8beec5e705755592
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=9536f103837aa3d954fe208f8beec5e705755592

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue May  7 15:37:02 2019 +0200

vkd3d: Pass device to vkd3d_get_format().

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 b1f320b..f1ad090 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 b0a9c9a..36fcb22 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 054a9ae..2b7059c 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 afa4da3..06a958d 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 0de0abf..915f634 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);
 }
 




More information about the wine-cvs mailing list