=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Expose double precision shader capability in WINED3DCAPS.

Alexandre Julliard julliard at winehq.org
Mon Feb 20 15:03:44 CST 2017


Module: wine
Branch: master
Commit: def13f3f810bf19018cba6f93b1fafaa7f72e1b6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=def13f3f810bf19018cba6f93b1fafaa7f72e1b6

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Feb 20 13:12:14 2017 +0100

wined3d: Expose double precision shader capability in WINED3DCAPS.

None of shader backends supports double precision yet.

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>

---

 dlls/wined3d/directx.c         | 8 ++++++--
 dlls/wined3d/wined3d_private.h | 2 ++
 include/wine/wined3d.h         | 2 ++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 0f44e09..0df4b58 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -4029,6 +4029,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, DWORD
     adapter->d3d_info.limits.vs_uniform_count = shader_caps.vs_uniform_count;
     adapter->d3d_info.limits.ps_uniform_count = shader_caps.ps_uniform_count;
     adapter->d3d_info.limits.varying_count = shader_caps.varying_count;
+    adapter->d3d_info.shader_double_precision = shader_caps.wined3d_caps & WINED3D_SHADER_CAP_DOUBLE_PRECISION;
 
     adapter->vertex_pipe->vp_get_caps(gl_info, &vertex_caps);
     adapter->d3d_info.xyzrhw = vertex_caps.xyzrhw;
@@ -5331,11 +5332,12 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
         enum wined3d_device_type device_type, WINED3DCAPS *caps)
 {
     const struct wined3d_adapter *adapter = &wined3d->adapters[adapter_idx];
+    const struct wined3d_d3d_info *d3d_info = &adapter->d3d_info;
     const struct wined3d_gl_info *gl_info = &adapter->gl_info;
-    struct shader_caps shader_caps;
-    struct fragment_caps fragment_caps;
     struct wined3d_vertex_caps vertex_caps;
     DWORD ckey_caps, blit_caps, fx_caps;
+    struct fragment_caps fragment_caps;
+    struct shader_caps shader_caps;
 
     TRACE("wined3d %p, adapter_idx %u, device_type %s, caps %p.\n",
             wined3d, adapter_idx, debug_d3ddevicetype(device_type), caps);
@@ -5903,6 +5905,8 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
         caps->ddraw_caps.caps |=        WINEDDCAPS_3D;
     }
 
+    caps->shader_double_precision = d3d_info->shader_double_precision;
+
     return WINED3D_OK;
 }
 
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 3190d87..c518bda 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1097,6 +1097,7 @@ typedef void (*SHADER_HANDLER)(const struct wined3d_shader_instruction *);
 
 #define WINED3D_SHADER_CAP_VS_CLIPPING      0x00000001
 #define WINED3D_SHADER_CAP_SRGB_WRITE       0x00000002
+#define WINED3D_SHADER_CAP_DOUBLE_PRECISION 0x00000004
 
 struct shader_caps
 {
@@ -2299,6 +2300,7 @@ struct wined3d_d3d_info
     BOOL shader_color_key;
     DWORD valid_rt_mask;
     DWORD wined3d_creation_flags;
+    BOOL shader_double_precision;
 };
 
 /* The adapter structure */
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 17343f6..e216520 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -1888,6 +1888,8 @@ typedef struct _WINED3DCAPS
     DWORD Reserved3;
 
     struct wined3d_ddraw_caps ddraw_caps;
+
+    BOOL shader_double_precision;
 } WINED3DCAPS;
 
 struct wined3d_color_key




More information about the wine-cvs mailing list