wined3d: Pass a context to surface_load_texture.

Signed-off-by: Stefan Dösinger <stefan@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Stefan Dösinger 2015-10-15 22:41:10 +02:00 committed by Alexandre Julliard
parent c7eb6a7534
commit 31e0755ea6
1 changed files with 6 additions and 15 deletions

View File

@ -3881,13 +3881,13 @@ static HRESULT surface_load_drawable(struct wined3d_surface *surface,
} }
static HRESULT surface_load_texture(struct wined3d_surface *surface, static HRESULT surface_load_texture(struct wined3d_surface *surface,
const struct wined3d_gl_info *gl_info, BOOL srgb) struct wined3d_context *context, BOOL srgb)
{ {
const struct wined3d_gl_info *gl_info = context->gl_info;
RECT src_rect = {0, 0, surface->resource.width, surface->resource.height}; RECT src_rect = {0, 0, surface->resource.width, surface->resource.height};
struct wined3d_device *device = surface->resource.device; struct wined3d_device *device = surface->resource.device;
const struct wined3d_color_key_conversion *conversion; const struct wined3d_color_key_conversion *conversion;
struct wined3d_texture *texture = surface->container; struct wined3d_texture *texture = surface->container;
struct wined3d_context *context;
UINT width, src_pitch, dst_pitch; UINT width, src_pitch, dst_pitch;
struct wined3d_bo_address data; struct wined3d_bo_address data;
struct wined3d_format format; struct wined3d_format format;
@ -3909,8 +3909,6 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
NULL, surface->resource.usage, surface->resource.pool, surface->resource.format, NULL, surface->resource.usage, surface->resource.pool, surface->resource.format,
NULL, surface->resource.usage, surface->resource.pool, surface->resource.format)) NULL, surface->resource.usage, surface->resource.pool, surface->resource.format))
{ {
context = context_acquire(device, NULL);
if (srgb) if (srgb)
surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, WINED3D_LOCATION_TEXTURE_RGB, surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, WINED3D_LOCATION_TEXTURE_RGB,
&src_rect, surface, WINED3D_LOCATION_TEXTURE_SRGB, &src_rect); &src_rect, surface, WINED3D_LOCATION_TEXTURE_SRGB, &src_rect);
@ -3918,8 +3916,6 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, WINED3D_LOCATION_TEXTURE_SRGB, surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, WINED3D_LOCATION_TEXTURE_SRGB,
&src_rect, surface, WINED3D_LOCATION_TEXTURE_RGB, &src_rect); &src_rect, surface, WINED3D_LOCATION_TEXTURE_RGB, &src_rect);
context_release(context);
return WINED3D_OK; return WINED3D_OK;
} }
@ -3934,10 +3930,8 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
DWORD dst_location = srgb ? WINED3D_LOCATION_TEXTURE_SRGB : WINED3D_LOCATION_TEXTURE_RGB; DWORD dst_location = srgb ? WINED3D_LOCATION_TEXTURE_SRGB : WINED3D_LOCATION_TEXTURE_RGB;
RECT rect = {0, 0, surface->resource.width, surface->resource.height}; RECT rect = {0, 0, surface->resource.width, surface->resource.height};
context = context_acquire(device, NULL);
surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, src_location, surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, src_location,
&rect, surface, dst_location, &rect); &rect, surface, dst_location, &rect);
context_release(context);
return WINED3D_OK; return WINED3D_OK;
} }
@ -3975,9 +3969,6 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
surface_load_location(surface, WINED3D_LOCATION_SYSMEM); surface_load_location(surface, WINED3D_LOCATION_SYSMEM);
} }
/* TODO: Use already acquired context when possible. */
context = context_acquire(device, NULL);
wined3d_texture_prepare_texture(texture, context, srgb); wined3d_texture_prepare_texture(texture, context, srgb);
wined3d_texture_bind_and_dirtify(texture, context, srgb); wined3d_texture_bind_and_dirtify(texture, context, srgb);
@ -4051,8 +4042,6 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
wined3d_surface_upload_data(surface, gl_info, &format, &src_rect, wined3d_surface_upload_data(surface, gl_info, &format, &src_rect,
src_pitch, &dst_point, srgb, wined3d_const_bo_address(&data)); src_pitch, &dst_point, srgb, wined3d_const_bo_address(&data));
context_release(context);
HeapFree(GetProcessHeap(), 0, mem); HeapFree(GetProcessHeap(), 0, mem);
return WINED3D_OK; return WINED3D_OK;
@ -4074,7 +4063,6 @@ static void surface_multisample_resolve(struct wined3d_surface *surface, struct
HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location) HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location)
{ {
struct wined3d_device *device = surface->resource.device; struct wined3d_device *device = surface->resource.device;
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
HRESULT hr; HRESULT hr;
struct wined3d_context *context = NULL; struct wined3d_context *context = NULL;
@ -4154,7 +4142,10 @@ HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location)
case WINED3D_LOCATION_TEXTURE_RGB: case WINED3D_LOCATION_TEXTURE_RGB:
case WINED3D_LOCATION_TEXTURE_SRGB: case WINED3D_LOCATION_TEXTURE_SRGB:
if (FAILED(hr = surface_load_texture(surface, gl_info, location == WINED3D_LOCATION_TEXTURE_SRGB))) context = context_acquire(device, NULL);
hr = surface_load_texture(surface, context, location == WINED3D_LOCATION_TEXTURE_SRGB);
context_release(context);
if (FAILED(hr))
return hr; return hr;
break; break;