Commit 5ef8e974 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Move the "draw_binding" field from struct wined3d_surface to struct wined3d_resource.

parent d079066f
...@@ -7679,8 +7679,8 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter, ...@@ -7679,8 +7679,8 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter,
context_release(context); context_release(context);
surface_validate_location(dst_surface, dst_surface->draw_binding); surface_validate_location(dst_surface, dst_surface->resource.draw_binding);
surface_invalidate_location(dst_surface, ~dst_surface->draw_binding); surface_invalidate_location(dst_surface, ~dst_surface->resource.draw_binding);
return WINED3D_OK; return WINED3D_OK;
} }
......
...@@ -2245,7 +2245,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine ...@@ -2245,7 +2245,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
{ {
wined3d_texture_load(rt->container, context, FALSE); wined3d_texture_load(rt->container, context, FALSE);
context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, rt, NULL, rt->draw_binding); context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, rt, NULL, rt->resource.draw_binding);
if (rt->resource.format->id != WINED3DFMT_NULL) if (rt->resource.format->id != WINED3DFMT_NULL)
rt_mask = 1; rt_mask = 1;
else else
...@@ -2330,7 +2330,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win ...@@ -2330,7 +2330,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
++i; ++i;
} }
context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, fb->depth_stencil, context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, fb->depth_stencil,
rt_count ? rts[0]->draw_binding : WINED3D_LOCATION_TEXTURE_RGB); rt_count ? rts[0]->resource.draw_binding : WINED3D_LOCATION_TEXTURE_RGB);
} }
else else
{ {
...@@ -2436,7 +2436,7 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat ...@@ -2436,7 +2436,7 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
else else
{ {
context_apply_fbo_state(context, GL_FRAMEBUFFER, fb->render_targets, fb->depth_stencil, context_apply_fbo_state(context, GL_FRAMEBUFFER, fb->render_targets, fb->depth_stencil,
fb->render_targets[0]->draw_binding); fb->render_targets[0]->resource.draw_binding);
} }
} }
......
...@@ -310,7 +310,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c ...@@ -310,7 +310,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
{ {
struct wined3d_surface *rt = fb->render_targets[i]; struct wined3d_surface *rt = fb->render_targets[i];
if (rt) if (rt)
surface_load_location(rt, rt->draw_binding); surface_load_location(rt, rt->resource.draw_binding);
} }
} }
...@@ -337,7 +337,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c ...@@ -337,7 +337,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
if (flags & WINED3DCLEAR_ZBUFFER) if (flags & WINED3DCLEAR_ZBUFFER)
{ {
DWORD location = render_offscreen ? fb->depth_stencil->draw_binding : WINED3D_LOCATION_DRAWABLE; DWORD location = render_offscreen ? fb->depth_stencil->resource.draw_binding : WINED3D_LOCATION_DRAWABLE;
if (!render_offscreen && fb->depth_stencil != device->onscreen_depth_stencil) if (!render_offscreen && fb->depth_stencil != device->onscreen_depth_stencil)
device_switch_onscreen_ds(device, context, fb->depth_stencil); device_switch_onscreen_ds(device, context, fb->depth_stencil);
...@@ -369,7 +369,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c ...@@ -369,7 +369,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
if (flags & WINED3DCLEAR_ZBUFFER) if (flags & WINED3DCLEAR_ZBUFFER)
{ {
DWORD location = render_offscreen ? fb->depth_stencil->draw_binding : WINED3D_LOCATION_DRAWABLE; DWORD location = render_offscreen ? fb->depth_stencil->resource.draw_binding : WINED3D_LOCATION_DRAWABLE;
surface_modify_ds_location(fb->depth_stencil, location, ds_rect.right, ds_rect.bottom); surface_modify_ds_location(fb->depth_stencil, location, ds_rect.right, ds_rect.bottom);
...@@ -388,8 +388,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c ...@@ -388,8 +388,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
if (rt) if (rt)
{ {
surface_validate_location(rt, rt->draw_binding); surface_validate_location(rt, rt->resource.draw_binding);
surface_invalidate_location(rt, ~rt->draw_binding); surface_invalidate_location(rt, ~rt->resource.draw_binding);
} }
} }
......
...@@ -616,8 +616,8 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co ...@@ -616,8 +616,8 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
struct wined3d_surface *target = device->fb.render_targets[i]; struct wined3d_surface *target = device->fb.render_targets[i];
if (target) if (target)
{ {
surface_load_location(target, target->draw_binding); surface_load_location(target, target->resource.draw_binding);
surface_invalidate_location(target, ~target->draw_binding); surface_invalidate_location(target, ~target->resource.draw_binding);
} }
} }
} }
...@@ -639,7 +639,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co ...@@ -639,7 +639,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
* depthstencil for D3DCMP_NEVER and D3DCMP_ALWAYS as well. Also note * depthstencil for D3DCMP_NEVER and D3DCMP_ALWAYS as well. Also note
* that we never copy the stencil data.*/ * that we never copy the stencil data.*/
DWORD location = context->render_offscreen ? DWORD location = context->render_offscreen ?
device->fb.depth_stencil->draw_binding : WINED3D_LOCATION_DRAWABLE; device->fb.depth_stencil->resource.draw_binding : WINED3D_LOCATION_DRAWABLE;
if (state->render_states[WINED3D_RS_ZWRITEENABLE] || state->render_states[WINED3D_RS_ZENABLE]) if (state->render_states[WINED3D_RS_ZWRITEENABLE] || state->render_states[WINED3D_RS_ZENABLE])
{ {
struct wined3d_surface *ds = device->fb.depth_stencil; struct wined3d_surface *ds = device->fb.depth_stencil;
...@@ -671,7 +671,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co ...@@ -671,7 +671,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
if (device->fb.depth_stencil && state->render_states[WINED3D_RS_ZWRITEENABLE]) if (device->fb.depth_stencil && state->render_states[WINED3D_RS_ZWRITEENABLE])
{ {
struct wined3d_surface *ds = device->fb.depth_stencil; struct wined3d_surface *ds = device->fb.depth_stencil;
DWORD location = context->render_offscreen ? ds->draw_binding : WINED3D_LOCATION_DRAWABLE; DWORD location = context->render_offscreen ? ds->resource.draw_binding : WINED3D_LOCATION_DRAWABLE;
surface_modify_ds_location(ds, location, ds->ds_current_size.cx, ds->ds_current_size.cy); surface_modify_ds_location(ds, location, ds->ds_current_size.cx, ds->ds_current_size.cy);
} }
......
...@@ -106,11 +106,11 @@ static void surface_cleanup(struct wined3d_surface *surface) ...@@ -106,11 +106,11 @@ static void surface_cleanup(struct wined3d_surface *surface)
void surface_update_draw_binding(struct wined3d_surface *surface) void surface_update_draw_binding(struct wined3d_surface *surface)
{ {
if (!surface_is_offscreen(surface) || wined3d_settings.offscreen_rendering_mode != ORM_FBO) if (!surface_is_offscreen(surface) || wined3d_settings.offscreen_rendering_mode != ORM_FBO)
surface->draw_binding = WINED3D_LOCATION_DRAWABLE; surface->resource.draw_binding = WINED3D_LOCATION_DRAWABLE;
else if (surface->resource.multisample_type) else if (surface->resource.multisample_type)
surface->draw_binding = WINED3D_LOCATION_RB_MULTISAMPLE; surface->resource.draw_binding = WINED3D_LOCATION_RB_MULTISAMPLE;
else else
surface->draw_binding = WINED3D_LOCATION_TEXTURE_RGB; surface->resource.draw_binding = WINED3D_LOCATION_TEXTURE_RGB;
} }
void surface_get_drawable_size(const struct wined3d_surface *surface, const struct wined3d_context *context, void surface_get_drawable_size(const struct wined3d_surface *surface, const struct wined3d_context *context,
...@@ -767,7 +767,7 @@ static void surface_unmap(struct wined3d_surface *surface) ...@@ -767,7 +767,7 @@ static void surface_unmap(struct wined3d_surface *surface)
} }
if (surface->swapchain && surface->swapchain->front_buffer == surface) if (surface->swapchain && surface->swapchain->front_buffer == surface)
surface_load_location(surface, surface->draw_binding); surface_load_location(surface, surface->resource.draw_binding);
else if (surface->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)) else if (surface->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
FIXME("Depth / stencil buffer locking is not implemented.\n"); FIXME("Depth / stencil buffer locking is not implemented.\n");
} }
...@@ -4186,8 +4186,8 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE ...@@ -4186,8 +4186,8 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE
src_surface->container->color_key_flags = old_color_key_flags; src_surface->container->color_key_flags = old_color_key_flags;
src_surface->container->src_blt_color_key = old_blt_key; src_surface->container->src_blt_color_key = old_blt_key;
surface_validate_location(dst_surface, dst_surface->draw_binding); surface_validate_location(dst_surface, dst_surface->resource.draw_binding);
surface_invalidate_location(dst_surface, ~dst_surface->draw_binding); surface_invalidate_location(dst_surface, ~dst_surface->resource.draw_binding);
return WINED3D_OK; return WINED3D_OK;
} }
...@@ -4772,7 +4772,7 @@ HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location) ...@@ -4772,7 +4772,7 @@ HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location)
context_release(context); context_release(context);
return WINED3D_OK; return WINED3D_OK;
} }
else if (location & surface->locations && surface->draw_binding != WINED3D_LOCATION_DRAWABLE) else if (location & surface->locations && surface->resource.draw_binding != WINED3D_LOCATION_DRAWABLE)
{ {
/* Already up to date, nothing to do. */ /* Already up to date, nothing to do. */
return WINED3D_OK; return WINED3D_OK;
...@@ -5831,8 +5831,8 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC ...@@ -5831,8 +5831,8 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
if (SUCCEEDED(wined3d_surface_depth_blt(src_surface, src_surface->draw_binding, &src_rect, if (SUCCEEDED(wined3d_surface_depth_blt(src_surface, src_surface->resource.draw_binding, &src_rect,
dst_surface, dst_surface->draw_binding, &dst_rect))) dst_surface, dst_surface->resource.draw_binding, &dst_rect)))
return WINED3D_OK; return WINED3D_OK;
} }
} }
...@@ -5882,7 +5882,7 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC ...@@ -5882,7 +5882,7 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, &src_rect))) if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, &src_rect)))
{ {
if (!surface_is_offscreen(dst_surface)) if (!surface_is_offscreen(dst_surface))
surface_load_location(dst_surface, dst_surface->draw_binding); surface_load_location(dst_surface, dst_surface->resource.draw_binding);
return WINED3D_OK; return WINED3D_OK;
} }
} }
...@@ -5918,10 +5918,10 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC ...@@ -5918,10 +5918,10 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
TRACE("Using FBO blit.\n"); TRACE("Using FBO blit.\n");
surface_blt_fbo(device, filter, surface_blt_fbo(device, filter,
src_surface, src_surface->draw_binding, &src_rect, src_surface, src_surface->resource.draw_binding, &src_rect,
dst_surface, dst_surface->draw_binding, &dst_rect); dst_surface, dst_surface->resource.draw_binding, &dst_rect);
surface_validate_location(dst_surface, dst_surface->draw_binding); surface_validate_location(dst_surface, dst_surface->resource.draw_binding);
surface_invalidate_location(dst_surface, ~dst_surface->draw_binding); surface_invalidate_location(dst_surface, ~dst_surface->resource.draw_binding);
return WINED3D_OK; return WINED3D_OK;
} }
......
...@@ -513,7 +513,7 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT ...@@ -513,7 +513,7 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
} }
else else
{ {
surface_load_location(back_buffer, back_buffer->draw_binding); surface_load_location(back_buffer, back_buffer->resource.draw_binding);
} }
if (swapchain->render_to_fbo) if (swapchain->render_to_fbo)
...@@ -585,8 +585,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT ...@@ -585,8 +585,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
*/ */
if (swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_FLIP) if (swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_FLIP)
{ {
surface_validate_location(back_buffer, back_buffer->draw_binding); surface_validate_location(back_buffer, back_buffer->resource.draw_binding);
surface_invalidate_location(back_buffer, ~back_buffer->draw_binding); surface_invalidate_location(back_buffer, ~back_buffer->resource.draw_binding);
} }
} }
......
...@@ -2029,6 +2029,7 @@ struct wined3d_resource ...@@ -2029,6 +2029,7 @@ struct wined3d_resource
DWORD usage; DWORD usage;
enum wined3d_pool pool; enum wined3d_pool pool;
DWORD access_flags; DWORD access_flags;
DWORD draw_binding;
UINT width; UINT width;
UINT height; UINT height;
UINT depth; UINT depth;
...@@ -2225,7 +2226,7 @@ struct wined3d_surface ...@@ -2225,7 +2226,7 @@ struct wined3d_surface
const struct wined3d_surface_ops *surface_ops; const struct wined3d_surface_ops *surface_ops;
struct wined3d_texture *container; struct wined3d_texture *container;
struct wined3d_swapchain *swapchain; struct wined3d_swapchain *swapchain;
DWORD draw_binding, map_binding; DWORD map_binding;
void *user_memory; void *user_memory;
DWORD locations; DWORD locations;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment