From: Józef Kucia Subject: [PATCH 5/6] wined3d: Expose double precision shader capability in WINED3DCAPS. Message-Id: <20170220121215.28199-5-jkucia@codeweavers.com> Date: Mon, 20 Feb 2017 13:12:14 +0100 In-Reply-To: <20170220121215.28199-1-jkucia@codeweavers.com> References: <20170220121215.28199-1-jkucia@codeweavers.com> None of shader backends supports double precision yet. Signed-off-by: Józef Kucia --- 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 4c70c97..8185fe6 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 -- 2.10.2