wined3d: Introduce wined3d_texture_validate_location().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
97f4034e58
commit
5a29cc8787
|
@ -7878,6 +7878,7 @@ static void arbfp_blit_surface(struct wined3d_device *device, enum wined3d_blit_
|
||||||
struct wined3d_surface *dst_surface, const RECT *dst_rect_in,
|
struct wined3d_surface *dst_surface, const RECT *dst_rect_in,
|
||||||
const struct wined3d_color_key *color_key)
|
const struct wined3d_color_key *color_key)
|
||||||
{
|
{
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
struct wined3d_texture *src_texture = src_surface->container;
|
struct wined3d_texture *src_texture = src_surface->container;
|
||||||
struct wined3d_texture *dst_texture = dst_surface->container;
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
struct wined3d_context *context;
|
struct wined3d_context *context;
|
||||||
|
@ -7935,7 +7936,7 @@ static void arbfp_blit_surface(struct wined3d_device *device, enum wined3d_blit_
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
surface_validate_location(dst_surface, dst_texture->resource.draw_binding);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, dst_texture->resource.draw_binding);
|
||||||
surface_invalidate_location(dst_surface, ~dst_texture->resource.draw_binding);
|
surface_invalidate_location(dst_surface, ~dst_texture->resource.draw_binding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -401,7 +401,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
|
||||||
|
|
||||||
if (rt)
|
if (rt)
|
||||||
{
|
{
|
||||||
surface_validate_location(rt, rtv->resource->draw_binding);
|
wined3d_texture_validate_location(rt->container, rtv->sub_resource_idx, rtv->resource->draw_binding);
|
||||||
surface_invalidate_location(rt, ~rtv->resource->draw_binding);
|
surface_invalidate_location(rt, ~rtv->resource->draw_binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4117,7 +4117,7 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_TEXTURE_RGB);
|
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
surface_invalidate_location(surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
surface_invalidate_location(surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -899,6 +899,8 @@ static ULONG surface_resource_decref(struct wined3d_resource *resource)
|
||||||
static void surface_unload(struct wined3d_resource *resource)
|
static void surface_unload(struct wined3d_resource *resource)
|
||||||
{
|
{
|
||||||
struct wined3d_surface *surface = surface_from_resource(resource);
|
struct wined3d_surface *surface = surface_from_resource(resource);
|
||||||
|
unsigned int sub_resource_idx = surface_get_sub_resource_idx(surface);
|
||||||
|
struct wined3d_texture *texture = surface->container;
|
||||||
struct wined3d_renderbuffer_entry *entry, *entry2;
|
struct wined3d_renderbuffer_entry *entry, *entry2;
|
||||||
struct wined3d_device *device = resource->device;
|
struct wined3d_device *device = resource->device;
|
||||||
const struct wined3d_gl_info *gl_info;
|
const struct wined3d_gl_info *gl_info;
|
||||||
|
@ -922,14 +924,14 @@ static void surface_unload(struct wined3d_resource *resource)
|
||||||
* and all flags get lost */
|
* and all flags get lost */
|
||||||
if (resource->usage & WINED3DUSAGE_DEPTHSTENCIL)
|
if (resource->usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
{
|
{
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_DISCARDED);
|
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_DISCARDED);
|
||||||
surface_invalidate_location(surface, ~WINED3D_LOCATION_DISCARDED);
|
surface_invalidate_location(surface, ~WINED3D_LOCATION_DISCARDED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
surface_prepare_system_memory(surface);
|
surface_prepare_system_memory(surface);
|
||||||
memset(surface->resource.heap_memory, 0, surface->resource.size);
|
memset(surface->resource.heap_memory, 0, surface->resource.size);
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_SYSMEM);
|
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_SYSMEM);
|
||||||
surface_invalidate_location(surface, ~WINED3D_LOCATION_SYSMEM);
|
surface_invalidate_location(surface, ~WINED3D_LOCATION_SYSMEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1265,6 +1267,7 @@ static BOOL surface_check_block_align_rect(struct wined3d_surface *surface, cons
|
||||||
HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point,
|
HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point,
|
||||||
struct wined3d_surface *src_surface, const RECT *src_rect)
|
struct wined3d_surface *src_surface, const RECT *src_rect)
|
||||||
{
|
{
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
struct wined3d_texture *src_texture = src_surface->container;
|
struct wined3d_texture *src_texture = src_surface->container;
|
||||||
struct wined3d_texture *dst_texture = dst_surface->container;
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
unsigned int src_row_pitch, src_slice_pitch;
|
unsigned int src_row_pitch, src_slice_pitch;
|
||||||
|
@ -1368,7 +1371,7 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
surface_validate_location(dst_surface, WINED3D_LOCATION_TEXTURE_RGB);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
|
@ -2058,6 +2061,7 @@ static void surface_prepare_rb(struct wined3d_surface *surface, const struct win
|
||||||
static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
|
static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
|
||||||
const RECT *src_rect, const RECT *dst_rect_in, enum wined3d_texture_filter_type filter)
|
const RECT *src_rect, const RECT *dst_rect_in, enum wined3d_texture_filter_type filter)
|
||||||
{
|
{
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
struct wined3d_texture *src_texture = src_surface->container;
|
struct wined3d_texture *src_texture = src_surface->container;
|
||||||
struct wined3d_texture *dst_texture = dst_surface->container;
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
struct wined3d_device *device = dst_texture->resource.device;
|
struct wined3d_device *device = dst_texture->resource.device;
|
||||||
|
@ -2161,7 +2165,7 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
|
||||||
|
|
||||||
/* The texture is now most up to date - If the surface is a render target
|
/* The texture is now most up to date - If the surface is a render target
|
||||||
* and has a drawable, this path is never entered. */
|
* and has a drawable, this path is never entered. */
|
||||||
surface_validate_location(dst_surface, WINED3D_LOCATION_TEXTURE_RGB);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2169,6 +2173,7 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
|
||||||
static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
|
static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
|
||||||
const RECT *src_rect, const RECT *dst_rect_in, enum wined3d_texture_filter_type filter)
|
const RECT *src_rect, const RECT *dst_rect_in, enum wined3d_texture_filter_type filter)
|
||||||
{
|
{
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
struct wined3d_texture *src_texture = src_surface->container;
|
struct wined3d_texture *src_texture = src_surface->container;
|
||||||
struct wined3d_texture *dst_texture = dst_surface->container;
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
struct wined3d_device *device = dst_texture->resource.device;
|
struct wined3d_device *device = dst_texture->resource.device;
|
||||||
|
@ -2438,7 +2443,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
|
||||||
|
|
||||||
/* The texture is now most up to date - If the surface is a render target
|
/* The texture is now most up to date - If the surface is a render target
|
||||||
* and has a drawable, this path is never entered. */
|
* and has a drawable, this path is never entered. */
|
||||||
surface_validate_location(dst_surface, WINED3D_LOCATION_TEXTURE_RGB);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
surface_invalidate_location(dst_surface, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2912,13 +2917,6 @@ static void surface_load_ds_location(struct wined3d_surface *surface, struct win
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void surface_validate_location(struct wined3d_surface *surface, DWORD location)
|
|
||||||
{
|
|
||||||
TRACE("surface %p, location %s.\n", surface, wined3d_debug_location(location));
|
|
||||||
|
|
||||||
surface_get_sub_resource(surface)->locations |= location;
|
|
||||||
}
|
|
||||||
|
|
||||||
void surface_invalidate_location(struct wined3d_surface *surface, DWORD location)
|
void surface_invalidate_location(struct wined3d_surface *surface, DWORD location)
|
||||||
{
|
{
|
||||||
struct wined3d_texture_sub_resource *sub_resource;
|
struct wined3d_texture_sub_resource *sub_resource;
|
||||||
|
@ -3247,12 +3245,14 @@ static void surface_load_renderbuffer(struct wined3d_surface *surface, struct wi
|
||||||
/* Context activation is done by the caller. Context may be NULL in ddraw-only mode. */
|
/* Context activation is done by the caller. Context may be NULL in ddraw-only mode. */
|
||||||
HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_context *context, DWORD location)
|
HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_context *context, DWORD location)
|
||||||
{
|
{
|
||||||
struct wined3d_texture_sub_resource *sub_resource = surface_get_sub_resource(surface);
|
unsigned int sub_resource_idx = surface_get_sub_resource_idx(surface);
|
||||||
struct wined3d_texture *texture = surface->container;
|
struct wined3d_texture *texture = surface->container;
|
||||||
|
struct wined3d_texture_sub_resource *sub_resource;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("surface %p, location %s.\n", surface, wined3d_debug_location(location));
|
TRACE("surface %p, location %s.\n", surface, wined3d_debug_location(location));
|
||||||
|
|
||||||
|
sub_resource = &texture->sub_resources[sub_resource_idx];
|
||||||
if (sub_resource->locations & location && (!(texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
if (sub_resource->locations & location && (!(texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
|| (surface->ds_current_size.cx == surface->resource.width
|
|| (surface->ds_current_size.cx == surface->resource.width
|
||||||
&& surface->ds_current_size.cy == surface->resource.height)))
|
&& surface->ds_current_size.cy == surface->resource.height)))
|
||||||
|
@ -3273,7 +3273,7 @@ HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
{
|
{
|
||||||
TRACE("Surface previously discarded, nothing to do.\n");
|
TRACE("Surface previously discarded, nothing to do.\n");
|
||||||
wined3d_surface_prepare(surface, context, location);
|
wined3d_surface_prepare(surface, context, location);
|
||||||
surface_validate_location(surface, location);
|
wined3d_texture_validate_location(texture, sub_resource_idx, location);
|
||||||
surface_invalidate_location(surface, WINED3D_LOCATION_DISCARDED);
|
surface_invalidate_location(surface, WINED3D_LOCATION_DISCARDED);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -3281,7 +3281,7 @@ HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
if (!sub_resource->locations)
|
if (!sub_resource->locations)
|
||||||
{
|
{
|
||||||
ERR("Surface %p does not have any up to date location.\n", surface);
|
ERR("Surface %p does not have any up to date location.\n", surface);
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_DISCARDED);
|
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_DISCARDED);
|
||||||
return surface_load_location(surface, context, location);
|
return surface_load_location(surface, context, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3331,7 +3331,7 @@ HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
surface_validate_location(surface, location);
|
wined3d_texture_validate_location(texture, sub_resource_idx, location);
|
||||||
|
|
||||||
if (texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
if (texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
{
|
{
|
||||||
|
@ -3475,15 +3475,18 @@ static void ffp_blit_blit_surface(struct wined3d_device *device, enum wined3d_bl
|
||||||
struct wined3d_surface *dst_surface, const RECT *dst_rect,
|
struct wined3d_surface *dst_surface, const RECT *dst_rect,
|
||||||
const struct wined3d_color_key *color_key)
|
const struct wined3d_color_key *color_key)
|
||||||
{
|
{
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
|
struct wined3d_texture *src_texture = src_surface->container;
|
||||||
struct wined3d_context *context;
|
struct wined3d_context *context;
|
||||||
|
|
||||||
/* Blit from offscreen surface to render target */
|
/* Blit from offscreen surface to render target */
|
||||||
struct wined3d_color_key old_blt_key = src_surface->container->async.src_blt_color_key;
|
struct wined3d_color_key old_blt_key = src_texture->async.src_blt_color_key;
|
||||||
DWORD old_color_key_flags = src_surface->container->async.color_key_flags;
|
DWORD old_color_key_flags = src_texture->async.color_key_flags;
|
||||||
|
|
||||||
TRACE("Blt from surface %p to rendertarget %p\n", src_surface, dst_surface);
|
TRACE("Blt from surface %p to rendertarget %p\n", src_surface, dst_surface);
|
||||||
|
|
||||||
wined3d_texture_set_color_key(src_surface->container, WINED3D_CKEY_SRC_BLT, color_key);
|
wined3d_texture_set_color_key(src_texture, WINED3D_CKEY_SRC_BLT, color_key);
|
||||||
|
|
||||||
context = context_acquire(device, dst_surface);
|
context = context_acquire(device, dst_surface);
|
||||||
|
|
||||||
|
@ -3499,11 +3502,11 @@ static void ffp_blit_blit_surface(struct wined3d_device *device, enum wined3d_bl
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
/* Restore the color key parameters */
|
/* Restore the color key parameters */
|
||||||
wined3d_texture_set_color_key(src_surface->container, WINED3D_CKEY_SRC_BLT,
|
wined3d_texture_set_color_key(src_texture, WINED3D_CKEY_SRC_BLT,
|
||||||
(old_color_key_flags & WINED3D_CKEY_SRC_BLT) ? &old_blt_key : NULL);
|
(old_color_key_flags & WINED3D_CKEY_SRC_BLT) ? &old_blt_key : NULL);
|
||||||
|
|
||||||
surface_validate_location(dst_surface, dst_surface->container->resource.draw_binding);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, dst_texture->resource.draw_binding);
|
||||||
surface_invalidate_location(dst_surface, ~dst_surface->container->resource.draw_binding);
|
surface_invalidate_location(dst_surface, ~dst_texture->resource.draw_binding);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct blit_shader ffp_blit = {
|
const struct blit_shader ffp_blit = {
|
||||||
|
@ -4186,6 +4189,7 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
|
||||||
{
|
{
|
||||||
struct wined3d_box dst_box = {dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, 0, 1};
|
struct wined3d_box dst_box = {dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, 0, 1};
|
||||||
struct wined3d_box src_box = {src_rect->left, src_rect->top, src_rect->right, src_rect->bottom, 0, 1};
|
struct wined3d_box src_box = {src_rect->left, src_rect->top, src_rect->right, src_rect->bottom, 0, 1};
|
||||||
|
unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
|
||||||
struct wined3d_texture *dst_texture = dst_surface->container;
|
struct wined3d_texture *dst_texture = dst_surface->container;
|
||||||
struct wined3d_device *device = dst_texture->resource.device;
|
struct wined3d_device *device = dst_texture->resource.device;
|
||||||
struct wined3d_swapchain *src_swapchain, *dst_swapchain;
|
struct wined3d_swapchain *src_swapchain, *dst_swapchain;
|
||||||
|
@ -4469,7 +4473,8 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
|
||||||
dst_surface, dst_texture->resource.draw_binding, dst_rect);
|
dst_surface, dst_texture->resource.draw_binding, dst_rect);
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
surface_validate_location(dst_surface, dst_texture->resource.draw_binding);
|
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx,
|
||||||
|
dst_texture->resource.draw_binding);
|
||||||
surface_invalidate_location(dst_surface, ~dst_texture->resource.draw_binding);
|
surface_invalidate_location(dst_surface, ~dst_texture->resource.draw_binding);
|
||||||
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
|
@ -4500,6 +4505,7 @@ cpu:
|
||||||
HRESULT wined3d_surface_init(struct wined3d_surface *surface, struct wined3d_texture *container,
|
HRESULT wined3d_surface_init(struct wined3d_surface *surface, struct wined3d_texture *container,
|
||||||
const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags)
|
const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags)
|
||||||
{
|
{
|
||||||
|
unsigned int sub_resource_idx = layer * container->level_count + level;
|
||||||
struct wined3d_device *device = container->resource.device;
|
struct wined3d_device *device = container->resource.device;
|
||||||
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
|
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
|
||||||
const struct wined3d_format *format = wined3d_get_format(gl_info, desc->format);
|
const struct wined3d_format *format = wined3d_get_format(gl_info, desc->format);
|
||||||
|
@ -4584,9 +4590,9 @@ HRESULT wined3d_surface_init(struct wined3d_surface *surface, struct wined3d_tex
|
||||||
if (lockable || desc->format == WINED3DFMT_D16_LOCKABLE)
|
if (lockable || desc->format == WINED3DFMT_D16_LOCKABLE)
|
||||||
surface->resource.access_flags |= WINED3D_RESOURCE_ACCESS_CPU;
|
surface->resource.access_flags |= WINED3D_RESOURCE_ACCESS_CPU;
|
||||||
|
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_SYSMEM);
|
wined3d_texture_validate_location(container, sub_resource_idx, WINED3D_LOCATION_SYSMEM);
|
||||||
if (container->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
if (container->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
surface_get_sub_resource(surface)->locations = WINED3D_LOCATION_DISCARDED;
|
container->sub_resources[sub_resource_idx].locations = WINED3D_LOCATION_DISCARDED;
|
||||||
|
|
||||||
if (wined3d_texture_use_pbo(container, gl_info))
|
if (wined3d_texture_use_pbo(container, gl_info))
|
||||||
surface->resource.map_binding = WINED3D_LOCATION_BUFFER;
|
surface->resource.map_binding = WINED3D_LOCATION_BUFFER;
|
||||||
|
@ -4607,7 +4613,7 @@ HRESULT wined3d_surface_init(struct wined3d_surface *surface, struct wined3d_tex
|
||||||
if (surface->resource.map_binding == WINED3D_LOCATION_DIB)
|
if (surface->resource.map_binding == WINED3D_LOCATION_DIB)
|
||||||
{
|
{
|
||||||
wined3d_resource_free_sysmem(&surface->resource);
|
wined3d_resource_free_sysmem(&surface->resource);
|
||||||
surface_validate_location(surface, WINED3D_LOCATION_DIB);
|
wined3d_texture_validate_location(container, sub_resource_idx, WINED3D_LOCATION_DIB);
|
||||||
surface_invalidate_location(surface, WINED3D_LOCATION_SYSMEM);
|
surface_invalidate_location(surface, WINED3D_LOCATION_SYSMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,8 @@ static void wined3d_swapchain_rotate(struct wined3d_swapchain *swapchain, struct
|
||||||
swapchain->back_buffers[i - 1]->texture_rgb = swapchain->back_buffers[i]->texture_rgb;
|
swapchain->back_buffers[i - 1]->texture_rgb = swapchain->back_buffers[i]->texture_rgb;
|
||||||
surface_prev->rb_multisample = surface->rb_multisample;
|
surface_prev->rb_multisample = surface->rb_multisample;
|
||||||
|
|
||||||
surface_validate_location(surface_prev, sub_resource->locations & supported_locations);
|
wined3d_texture_validate_location(swapchain->back_buffers[i - 1], 0,
|
||||||
|
sub_resource->locations & supported_locations);
|
||||||
surface_invalidate_location(surface_prev, ~(sub_resource->locations & supported_locations));
|
surface_invalidate_location(surface_prev, ~(sub_resource->locations & supported_locations));
|
||||||
|
|
||||||
surface_prev = surface;
|
surface_prev = surface;
|
||||||
|
@ -467,7 +468,7 @@ static void wined3d_swapchain_rotate(struct wined3d_swapchain *swapchain, struct
|
||||||
swapchain->back_buffers[i - 1]->texture_rgb = tex0;
|
swapchain->back_buffers[i - 1]->texture_rgb = tex0;
|
||||||
surface_prev->rb_multisample = rb0;
|
surface_prev->rb_multisample = rb0;
|
||||||
|
|
||||||
surface_validate_location(surface_prev, locations0 & supported_locations);
|
wined3d_texture_validate_location(swapchain->back_buffers[i - 1], 0, locations0 & supported_locations);
|
||||||
surface_invalidate_location(surface_prev, ~(locations0 & supported_locations));
|
surface_invalidate_location(surface_prev, ~(locations0 & supported_locations));
|
||||||
|
|
||||||
device_invalidate_state(swapchain->device, STATE_FRAMEBUFFER);
|
device_invalidate_state(swapchain->device, STATE_FRAMEBUFFER);
|
||||||
|
@ -482,7 +483,6 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain,
|
||||||
const struct wined3d_gl_info *gl_info;
|
const struct wined3d_gl_info *gl_info;
|
||||||
struct wined3d_texture *logo_texture;
|
struct wined3d_texture *logo_texture;
|
||||||
struct wined3d_context *context;
|
struct wined3d_context *context;
|
||||||
struct wined3d_surface *front;
|
|
||||||
BOOL render_to_fbo;
|
BOOL render_to_fbo;
|
||||||
|
|
||||||
context = context_acquire(swapchain->device, back_buffer);
|
context = context_acquire(swapchain->device, back_buffer);
|
||||||
|
@ -599,10 +599,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
front = surface_from_resource(wined3d_texture_get_sub_resource(swapchain->front_buffer, 0));
|
wined3d_texture_validate_location(swapchain->front_buffer, 0, WINED3D_LOCATION_DRAWABLE);
|
||||||
|
surface_invalidate_location(swapchain->front_buffer->sub_resources[0].u.surface, ~WINED3D_LOCATION_DRAWABLE);
|
||||||
surface_validate_location(front, WINED3D_LOCATION_DRAWABLE);
|
|
||||||
surface_invalidate_location(front, ~WINED3D_LOCATION_DRAWABLE);
|
|
||||||
/* If the swapeffect is DISCARD, the back buffer is undefined. That means the SYSMEM
|
/* If the swapeffect is DISCARD, the back buffer is undefined. That means the SYSMEM
|
||||||
* and INTEXTURE copies can keep their old content if they have any defined content.
|
* and INTEXTURE copies can keep their old content if they have any defined content.
|
||||||
* If the swapeffect is COPY, the content remains the same.
|
* If the swapeffect is COPY, the content remains the same.
|
||||||
|
@ -827,7 +825,6 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
|
||||||
{
|
{
|
||||||
const struct wined3d_adapter *adapter = device->adapter;
|
const struct wined3d_adapter *adapter = device->adapter;
|
||||||
struct wined3d_resource_desc texture_desc;
|
struct wined3d_resource_desc texture_desc;
|
||||||
struct wined3d_surface *front_buffer;
|
|
||||||
BOOL displaymode_set = FALSE;
|
BOOL displaymode_set = FALSE;
|
||||||
RECT client_rect;
|
RECT client_rect;
|
||||||
HWND window;
|
HWND window;
|
||||||
|
@ -911,11 +908,10 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
|
||||||
}
|
}
|
||||||
|
|
||||||
wined3d_texture_set_swapchain(swapchain->front_buffer, swapchain);
|
wined3d_texture_set_swapchain(swapchain->front_buffer, swapchain);
|
||||||
front_buffer = surface_from_resource(wined3d_texture_get_sub_resource(swapchain->front_buffer, 0));
|
|
||||||
if (!(device->wined3d->flags & WINED3D_NO3D))
|
if (!(device->wined3d->flags & WINED3D_NO3D))
|
||||||
{
|
{
|
||||||
surface_validate_location(front_buffer, WINED3D_LOCATION_DRAWABLE);
|
wined3d_texture_validate_location(swapchain->front_buffer, 0, WINED3D_LOCATION_DRAWABLE);
|
||||||
surface_invalidate_location(front_buffer, ~WINED3D_LOCATION_DRAWABLE);
|
surface_invalidate_location(swapchain->front_buffer->sub_resources[0].u.surface, ~WINED3D_LOCATION_DRAWABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MSDN says we're only allowed a single fullscreen swapchain per device,
|
/* MSDN says we're only allowed a single fullscreen swapchain per device,
|
||||||
|
|
|
@ -69,6 +69,20 @@ GLenum wined3d_texture_get_gl_buffer(const struct wined3d_texture *texture)
|
||||||
return GL_BACK;
|
return GL_BACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wined3d_texture_validate_location(struct wined3d_texture *texture,
|
||||||
|
unsigned int sub_resource_idx, DWORD location)
|
||||||
|
{
|
||||||
|
struct wined3d_texture_sub_resource *sub_resource;
|
||||||
|
|
||||||
|
TRACE("texture %p, sub_resource_idx %u, location %s.\n",
|
||||||
|
texture, sub_resource_idx, wined3d_debug_location(location));
|
||||||
|
|
||||||
|
sub_resource = &texture->sub_resources[sub_resource_idx];
|
||||||
|
sub_resource->locations |= location;
|
||||||
|
|
||||||
|
TRACE("New locations flags are %s.\n", wined3d_debug_location(sub_resource->locations));
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struct wined3d_texture_ops *texture_ops,
|
static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struct wined3d_texture_ops *texture_ops,
|
||||||
UINT layer_count, UINT level_count, const struct wined3d_resource_desc *desc, DWORD flags,
|
UINT layer_count, UINT level_count, const struct wined3d_resource_desc *desc, DWORD flags,
|
||||||
struct wined3d_device *device, void *parent, const struct wined3d_parent_ops *parent_ops,
|
struct wined3d_device *device, void *parent, const struct wined3d_parent_ops *parent_ops,
|
||||||
|
@ -857,7 +871,7 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT
|
||||||
if (sub_resource->resource->map_binding == WINED3D_LOCATION_BUFFER && !wined3d_texture_use_pbo(texture, gl_info))
|
if (sub_resource->resource->map_binding == WINED3D_LOCATION_BUFFER && !wined3d_texture_use_pbo(texture, gl_info))
|
||||||
sub_resource->resource->map_binding = surface->dib.DIBsection ? WINED3D_LOCATION_DIB : WINED3D_LOCATION_SYSMEM;
|
sub_resource->resource->map_binding = surface->dib.DIBsection ? WINED3D_LOCATION_DIB : WINED3D_LOCATION_SYSMEM;
|
||||||
|
|
||||||
surface_validate_location(surface, valid_location);
|
wined3d_texture_validate_location(texture, 0, valid_location);
|
||||||
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -1000,7 +1014,7 @@ static HRESULT wined3d_texture_upload_data(struct wined3d_texture *texture,
|
||||||
struct wined3d_resource *sub_resource = texture->sub_resources[i].resource;
|
struct wined3d_resource *sub_resource = texture->sub_resources[i].resource;
|
||||||
|
|
||||||
texture->texture_ops->texture_sub_resource_upload_data(sub_resource, context, &data[i]);
|
texture->texture_ops->texture_sub_resource_upload_data(sub_resource, context, &data[i]);
|
||||||
texture->texture_ops->texture_sub_resource_validate_location(sub_resource, WINED3D_LOCATION_TEXTURE_RGB);
|
wined3d_texture_validate_location(texture, i, WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
texture->texture_ops->texture_sub_resource_invalidate_location(sub_resource, ~WINED3D_LOCATION_TEXTURE_RGB);
|
texture->texture_ops->texture_sub_resource_invalidate_location(sub_resource, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,13 +1036,6 @@ static void texture2d_sub_resource_invalidate_location(struct wined3d_resource *
|
||||||
surface_invalidate_location(surface, location);
|
surface_invalidate_location(surface, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void texture2d_sub_resource_validate_location(struct wined3d_resource *sub_resource, DWORD location)
|
|
||||||
{
|
|
||||||
struct wined3d_surface *surface = surface_from_resource(sub_resource);
|
|
||||||
|
|
||||||
surface_validate_location(surface, location);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void texture2d_sub_resource_upload_data(struct wined3d_resource *sub_resource,
|
static void texture2d_sub_resource_upload_data(struct wined3d_resource *sub_resource,
|
||||||
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data)
|
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data)
|
||||||
{
|
{
|
||||||
|
@ -1141,7 +1148,6 @@ static const struct wined3d_texture_ops texture2d_ops =
|
||||||
{
|
{
|
||||||
texture2d_sub_resource_load,
|
texture2d_sub_resource_load,
|
||||||
texture2d_sub_resource_invalidate_location,
|
texture2d_sub_resource_invalidate_location,
|
||||||
texture2d_sub_resource_validate_location,
|
|
||||||
texture2d_sub_resource_upload_data,
|
texture2d_sub_resource_upload_data,
|
||||||
texture2d_load_location,
|
texture2d_load_location,
|
||||||
texture2d_prepare_location,
|
texture2d_prepare_location,
|
||||||
|
@ -1253,7 +1259,7 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour
|
||||||
wined3d_debug_location(sub_resource->map_binding));
|
wined3d_debug_location(sub_resource->map_binding));
|
||||||
if ((ret = texture->texture_ops->texture_prepare_location(texture,
|
if ((ret = texture->texture_ops->texture_prepare_location(texture,
|
||||||
sub_resource_idx, context, sub_resource->map_binding)))
|
sub_resource_idx, context, sub_resource->map_binding)))
|
||||||
texture->texture_ops->texture_sub_resource_validate_location(sub_resource, sub_resource->map_binding);
|
wined3d_texture_validate_location(texture, sub_resource_idx, sub_resource->map_binding);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1656,13 +1662,6 @@ static void texture3d_sub_resource_invalidate_location(struct wined3d_resource *
|
||||||
wined3d_volume_invalidate_location(volume, location);
|
wined3d_volume_invalidate_location(volume, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void texture3d_sub_resource_validate_location(struct wined3d_resource *sub_resource, DWORD location)
|
|
||||||
{
|
|
||||||
struct wined3d_volume *volume = volume_from_resource(sub_resource);
|
|
||||||
|
|
||||||
wined3d_volume_validate_location(volume, location);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void texture3d_sub_resource_upload_data(struct wined3d_resource *sub_resource,
|
static void texture3d_sub_resource_upload_data(struct wined3d_resource *sub_resource,
|
||||||
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data)
|
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data)
|
||||||
{
|
{
|
||||||
|
@ -1736,7 +1735,6 @@ static const struct wined3d_texture_ops texture3d_ops =
|
||||||
{
|
{
|
||||||
texture3d_sub_resource_load,
|
texture3d_sub_resource_load,
|
||||||
texture3d_sub_resource_invalidate_location,
|
texture3d_sub_resource_invalidate_location,
|
||||||
texture3d_sub_resource_validate_location,
|
|
||||||
texture3d_sub_resource_upload_data,
|
texture3d_sub_resource_upload_data,
|
||||||
texture3d_load_location,
|
texture3d_load_location,
|
||||||
texture3d_prepare_location,
|
texture3d_prepare_location,
|
||||||
|
|
|
@ -130,18 +130,6 @@ void wined3d_volume_upload_data(struct wined3d_volume *volume, const struct wine
|
||||||
HeapFree(GetProcessHeap(), 0, converted_mem);
|
HeapFree(GetProcessHeap(), 0, converted_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wined3d_volume_validate_location(struct wined3d_volume *volume, DWORD location)
|
|
||||||
{
|
|
||||||
struct wined3d_texture_sub_resource *sub_resource;
|
|
||||||
|
|
||||||
TRACE("Volume %p, setting %s.\n", volume, wined3d_debug_location(location));
|
|
||||||
|
|
||||||
sub_resource = &volume->container->sub_resources[volume->texture_level];
|
|
||||||
sub_resource->locations |= location;
|
|
||||||
|
|
||||||
TRACE("new location flags are %s.\n", wined3d_debug_location(sub_resource->locations));
|
|
||||||
}
|
|
||||||
|
|
||||||
void wined3d_volume_invalidate_location(struct wined3d_volume *volume, DWORD location)
|
void wined3d_volume_invalidate_location(struct wined3d_volume *volume, DWORD location)
|
||||||
{
|
{
|
||||||
struct wined3d_texture_sub_resource *sub_resource;
|
struct wined3d_texture_sub_resource *sub_resource;
|
||||||
|
@ -260,10 +248,11 @@ BOOL wined3d_volume_load_location(struct wined3d_volume *volume,
|
||||||
struct wined3d_context *context, DWORD location)
|
struct wined3d_context *context, DWORD location)
|
||||||
{
|
{
|
||||||
DWORD required_access = volume_access_from_location(location);
|
DWORD required_access = volume_access_from_location(location);
|
||||||
|
unsigned int sub_resource_idx = volume->texture_level;
|
||||||
struct wined3d_texture *texture = volume->container;
|
struct wined3d_texture *texture = volume->container;
|
||||||
struct wined3d_texture_sub_resource *sub_resource;
|
struct wined3d_texture_sub_resource *sub_resource;
|
||||||
|
|
||||||
sub_resource = &texture->sub_resources[volume->texture_level];
|
sub_resource = &texture->sub_resources[sub_resource_idx];
|
||||||
TRACE("Volume %p, loading %s, have %s.\n", volume, wined3d_debug_location(location),
|
TRACE("Volume %p, loading %s, have %s.\n", volume, wined3d_debug_location(location),
|
||||||
wined3d_debug_location(sub_resource->locations));
|
wined3d_debug_location(sub_resource->locations));
|
||||||
|
|
||||||
|
@ -371,7 +360,7 @@ BOOL wined3d_volume_load_location(struct wined3d_volume *volume,
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
wined3d_volume_validate_location(volume, location);
|
wined3d_texture_validate_location(texture, sub_resource_idx, location);
|
||||||
|
|
||||||
if (location != WINED3D_LOCATION_SYSMEM && wined3d_volume_can_evict(volume))
|
if (location != WINED3D_LOCATION_SYSMEM && wined3d_volume_can_evict(volume))
|
||||||
wined3d_volume_evict_sysmem(volume);
|
wined3d_volume_evict_sysmem(volume);
|
||||||
|
@ -397,10 +386,11 @@ void wined3d_volume_cleanup(struct wined3d_volume *volume)
|
||||||
static void volume_unload(struct wined3d_resource *resource)
|
static void volume_unload(struct wined3d_resource *resource)
|
||||||
{
|
{
|
||||||
struct wined3d_volume *volume = volume_from_resource(resource);
|
struct wined3d_volume *volume = volume_from_resource(resource);
|
||||||
struct wined3d_device *device = volume->resource.device;
|
struct wined3d_texture *texture = volume->container;
|
||||||
|
struct wined3d_device *device = texture->resource.device;
|
||||||
struct wined3d_context *context;
|
struct wined3d_context *context;
|
||||||
|
|
||||||
if (volume->resource.pool == WINED3D_POOL_DEFAULT)
|
if (texture->resource.pool == WINED3D_POOL_DEFAULT)
|
||||||
ERR("Unloading DEFAULT pool volume.\n");
|
ERR("Unloading DEFAULT pool volume.\n");
|
||||||
|
|
||||||
TRACE("texture %p.\n", resource);
|
TRACE("texture %p.\n", resource);
|
||||||
|
@ -413,7 +403,7 @@ static void volume_unload(struct wined3d_resource *resource)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ERR("Out of memory when unloading volume %p.\n", volume);
|
ERR("Out of memory when unloading volume %p.\n", volume);
|
||||||
wined3d_volume_validate_location(volume, WINED3D_LOCATION_DISCARDED);
|
wined3d_texture_validate_location(texture, volume->texture_level, WINED3D_LOCATION_DISCARDED);
|
||||||
wined3d_volume_invalidate_location(volume, ~WINED3D_LOCATION_DISCARDED);
|
wined3d_volume_invalidate_location(volume, ~WINED3D_LOCATION_DISCARDED);
|
||||||
}
|
}
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
|
@ -2369,7 +2369,6 @@ struct wined3d_texture_ops
|
||||||
void (*texture_sub_resource_load)(struct wined3d_resource *sub_resource,
|
void (*texture_sub_resource_load)(struct wined3d_resource *sub_resource,
|
||||||
struct wined3d_context *context, BOOL srgb);
|
struct wined3d_context *context, BOOL srgb);
|
||||||
void (*texture_sub_resource_invalidate_location)(struct wined3d_resource *sub_resource, DWORD location);
|
void (*texture_sub_resource_invalidate_location)(struct wined3d_resource *sub_resource, DWORD location);
|
||||||
void (*texture_sub_resource_validate_location)(struct wined3d_resource *sub_resource, DWORD location);
|
|
||||||
void (*texture_sub_resource_upload_data)(struct wined3d_resource *sub_resource,
|
void (*texture_sub_resource_upload_data)(struct wined3d_resource *sub_resource,
|
||||||
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data);
|
const struct wined3d_context *context, const struct wined3d_sub_resource_data *data);
|
||||||
BOOL (*texture_load_location)(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
BOOL (*texture_load_location)(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
||||||
|
@ -2496,6 +2495,8 @@ void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
|
||||||
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
||||||
BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture,
|
BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture,
|
||||||
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
||||||
|
void wined3d_texture_validate_location(struct wined3d_texture *texture,
|
||||||
|
unsigned int sub_resource_idx, DWORD location) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
#define WINED3D_LOCATION_DISCARDED 0x00000001
|
#define WINED3D_LOCATION_DISCARDED 0x00000001
|
||||||
#define WINED3D_LOCATION_SYSMEM 0x00000002
|
#define WINED3D_LOCATION_SYSMEM 0x00000002
|
||||||
|
@ -2533,7 +2534,6 @@ BOOL wined3d_volume_load_location(struct wined3d_volume *volume,
|
||||||
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
||||||
BOOL wined3d_volume_prepare_location(struct wined3d_volume *volume,
|
BOOL wined3d_volume_prepare_location(struct wined3d_volume *volume,
|
||||||
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
||||||
void wined3d_volume_validate_location(struct wined3d_volume *volume, DWORD location) DECLSPEC_HIDDEN;
|
|
||||||
void wined3d_volume_upload_data(struct wined3d_volume *volume, const struct wined3d_context *context,
|
void wined3d_volume_upload_data(struct wined3d_volume *volume, const struct wined3d_context *context,
|
||||||
const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN;
|
const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
@ -2662,7 +2662,6 @@ void surface_set_texture_target(struct wined3d_surface *surface, GLenum target,
|
||||||
void surface_translate_drawable_coords(const struct wined3d_surface *surface, HWND window, RECT *rect) DECLSPEC_HIDDEN;
|
void surface_translate_drawable_coords(const struct wined3d_surface *surface, HWND window, RECT *rect) DECLSPEC_HIDDEN;
|
||||||
HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point,
|
HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point,
|
||||||
struct wined3d_surface *src_surface, const RECT *src_rect) DECLSPEC_HIDDEN;
|
struct wined3d_surface *src_surface, const RECT *src_rect) DECLSPEC_HIDDEN;
|
||||||
void surface_validate_location(struct wined3d_surface *surface, DWORD location) DECLSPEC_HIDDEN;
|
|
||||||
void wined3d_surface_upload_data(struct wined3d_surface *surface, const struct wined3d_gl_info *gl_info,
|
void wined3d_surface_upload_data(struct wined3d_surface *surface, const struct wined3d_gl_info *gl_info,
|
||||||
const struct wined3d_format *format, const RECT *src_rect, UINT src_pitch, const POINT *dst_point,
|
const struct wined3d_format *format, const RECT *src_rect, UINT src_pitch, const POINT *dst_point,
|
||||||
BOOL srgb, const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN;
|
BOOL srgb, const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN;
|
||||||
|
|
Loading…
Reference in New Issue