=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Implement vkd3d_serialize_versioned_root_signature().

Alexandre Julliard julliard at winehq.org
Wed Apr 24 04:50:30 CDT 2019


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Apr 22 10:58:34 2019 +0200

vkd3d: Implement vkd3d_serialize_versioned_root_signature().

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/vkd3d_main.c | 45 ++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 40 insertions(+), 5 deletions(-)

diff --git a/libs/vkd3d/vkd3d_main.c b/libs/vkd3d/vkd3d_main.c
index 913c9f5..08ba989 100644
--- a/libs/vkd3d/vkd3d_main.c
+++ b/libs/vkd3d/vkd3d_main.c
@@ -538,6 +538,8 @@ static HRESULT d3d_blob_create(void *buffer, SIZE_T size, struct d3d_blob **blob
 HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
         D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
 {
+    const struct vkd3d_root_signature_desc *vkd3d_desc;
+    enum vkd3d_root_signature_version vkd3d_version;
     struct vkd3d_shader_code dxbc;
     struct d3d_blob *blob_object;
     HRESULT hr;
@@ -554,9 +556,9 @@ HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
     if (error_blob)
         *error_blob = NULL;
 
-    if ((ret = vkd3d_shader_serialize_root_signature(
-            (const struct vkd3d_root_signature_desc *)desc,
-            (enum vkd3d_root_signature_version)version, &dxbc)) < 0)
+    vkd3d_desc = (const struct vkd3d_root_signature_desc *)desc;
+    vkd3d_version = vkd3d_root_signature_version_from_d3d12(version);
+    if ((ret = vkd3d_shader_serialize_root_signature(vkd3d_desc, vkd3d_version, &dxbc)) < 0)
     {
         WARN("Failed to serialize root signature, vkd3d result %d.\n", ret);
         if (error_blob)
@@ -579,7 +581,40 @@ HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
 HRESULT vkd3d_serialize_versioned_root_signature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
         ID3DBlob **blob, ID3DBlob **error_blob)
 {
-    FIXME("desc %p, blob %p, error_blob %p stub!\n", desc, blob, error_blob);
+    const struct vkd3d_versioned_root_signature_desc *vkd3d_desc;
+    struct vkd3d_shader_code dxbc;
+    struct d3d_blob *blob_object;
+    HRESULT hr;
+    int ret;
+
+    TRACE("desc %p, blob %p, error_blob %p.\n", desc, blob, error_blob);
+
+    if (!blob)
+    {
+        WARN("Invalid blob parameter.\n");
+        return E_INVALIDARG;
+    }
+
+    if (error_blob)
+        *error_blob = NULL;
 
-    return E_NOTIMPL;
+    vkd3d_desc = (const struct vkd3d_versioned_root_signature_desc *)desc;
+    if ((ret = vkd3d_shader_serialize_versioned_root_signature(vkd3d_desc, &dxbc)) < 0)
+    {
+        WARN("Failed to serialize root signature, vkd3d result %d.\n", ret);
+        if (error_blob)
+            FIXME("Ignoring error blob %p.\n", error_blob);
+        return hresult_from_vkd3d_result(ret);
+    }
+
+    if (FAILED(hr = d3d_blob_create((void *)dxbc.code, dxbc.size, &blob_object)))
+    {
+        WARN("Failed to create blob object, hr %#x.\n", hr);
+        vkd3d_shader_free_shader_code(&dxbc);
+        return hr;
+    }
+
+    *blob = &blob_object->ID3DBlob_iface;
+
+    return S_OK;
 }




More information about the wine-cvs mailing list