Module: wine Branch: master Commit: 7ff576bbabae44e97d7d38a56eef57acd8736997 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ff576bbabae44e97d7d38a56e...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Feb 3 11:02:20 2010 +0100
wined3d: Select the blitter during adapter initialization.
---
dlls/wined3d/device.c | 2 +- dlls/wined3d/directx.c | 17 +++++++++++++---- dlls/wined3d/utils.c | 11 ----------- dlls/wined3d/wined3d_private.h | 3 +-- 4 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 56e970d..bf5ad3c 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -6948,7 +6948,7 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d, return hr; }
- device->blitter = select_blit_implementation(adapter, device_type); + device->blitter = adapter->blitter;
return WINED3D_OK; } diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index c9d3f90..e259375 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1655,6 +1655,17 @@ static const shader_backend_t *select_shader_backend(struct wined3d_adapter *ada return &none_shader_backend; }
+static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter) +{ + const struct wined3d_gl_info *gl_info = &adapter->gl_info; + int vs_selected_mode, ps_selected_mode; + + select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode); + if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL) + && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit; + else return &ffp_blit; +} + /* Context activation is done by the caller. */ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter) { @@ -2095,6 +2106,7 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter)
adapter->fragment_pipe = select_fragment_implementation(adapter); adapter->shader_backend = select_shader_backend(adapter); + adapter->blitter = select_blit_implementation(adapter);
/* In some cases the number of texture stages can be larger than the number * of samplers. The GF4 for example can use only 2 samplers (no fragment @@ -3231,8 +3243,6 @@ static BOOL CheckTextureCapability(struct wined3d_adapter *adapter, static BOOL CheckSurfaceCapability(struct wined3d_adapter *adapter, const struct GlPixelFormatDesc *adapter_format_desc, WINED3DDEVTYPE DeviceType, const struct GlPixelFormatDesc *check_format_desc, WINED3DSURFTYPE SurfaceType) { - const struct blit_shader *blitter; - if(SurfaceType == SURFACE_GDI) { switch(check_format_desc->format) { @@ -3268,8 +3278,7 @@ static BOOL CheckSurfaceCapability(struct wined3d_adapter *adapter, const struct if (CheckDepthStencilCapability(adapter, adapter_format_desc, check_format_desc)) return TRUE;
/* If opengl can't process the format natively, the blitter may be able to convert it */ - blitter = select_blit_implementation(adapter, DeviceType); - if (blitter->color_fixup_supported(check_format_desc->color_fixup)) + if (adapter->blitter->color_fixup_supported(check_format_desc->color_fixup)) { TRACE_(d3d_caps)("[OK]\n"); return TRUE; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 5e6da24..55872df 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -2840,14 +2840,3 @@ void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, else if (gl_info->supported[ATI_FRAGMENT_SHADER]) *ps_selected = SHADER_ATI; else *ps_selected = SHADER_NONE; } - -const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, WINED3DDEVTYPE device_type) -{ - const struct wined3d_gl_info *gl_info = &adapter->gl_info; - int vs_selected_mode, ps_selected_mode; - - select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode); - if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL) - && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit; - else return &ffp_blit; -} diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index fca1a9a..afc4511 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1365,6 +1365,7 @@ struct wined3d_adapter
const struct fragment_pipeline *fragment_pipe; const shader_backend_t *shader_backend; + const struct blit_shader *blitter; };
BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN; @@ -2569,8 +2570,6 @@ void multiply_matrix(WINED3DMATRIX *dest, const WINED3DMATRIX *src1, const WINED UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN; unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
-const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, - WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN; void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
typedef struct local_constant {