wined3d: Pass a wined3d_context_gl structure to wined3d_texture_prepare_texture().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
e3d28cd45d
commit
ed9a6a2d67
|
@ -2228,7 +2228,8 @@ static void wined3d_cs_exec_blt_sub_resource(struct wined3d_cs *cs, const void *
|
|||
&& update_h == wined3d_texture_get_level_height(dst_texture, level)
|
||||
&& update_d == wined3d_texture_get_level_depth(dst_texture, level))
|
||||
{
|
||||
wined3d_texture_prepare_texture(dst_texture, context, FALSE);
|
||||
wined3d_texture_prepare_location(dst_texture, op->dst_sub_resource_idx,
|
||||
context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
}
|
||||
else if (!wined3d_texture_load_location(dst_texture, op->dst_sub_resource_idx,
|
||||
context, WINED3D_LOCATION_TEXTURE_RGB))
|
||||
|
@ -2337,7 +2338,7 @@ static void wined3d_cs_exec_update_sub_resource(struct wined3d_cs *cs, const voi
|
|||
/* Only load the sub-resource for partial updates. */
|
||||
if (!box->left && !box->top && !box->front
|
||||
&& box->right == width && box->bottom == height && box->back == depth)
|
||||
wined3d_texture_prepare_texture(texture, context, FALSE);
|
||||
wined3d_texture_prepare_location(texture, op->sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
else
|
||||
wined3d_texture_load_location(texture, op->sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
|
||||
|
|
|
@ -693,7 +693,7 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr
|
|||
|
||||
TRACE("Using upload conversion.\n");
|
||||
|
||||
wined3d_texture_prepare_texture(dst_texture, context, FALSE);
|
||||
wined3d_texture_prepare_location(dst_texture, 0, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(dst_texture), wined3d_context_gl(context), FALSE);
|
||||
wined3d_texture_upload_data(dst_texture, 0, context, src_format, &src_box,
|
||||
wined3d_const_bo_address(&src_data), src_row_pitch, src_slice_pitch, 0, 0, 0, FALSE);
|
||||
|
@ -868,7 +868,7 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl,
|
|||
gl_info = context->gl_info;
|
||||
device_invalidate_state(device, STATE_FRAMEBUFFER);
|
||||
|
||||
wined3d_texture_prepare_texture(&texture_gl->t, context, srgb);
|
||||
wined3d_texture_gl_prepare_texture(texture_gl, context_gl, srgb);
|
||||
wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
|
||||
|
||||
TRACE("Reading back offscreen render target %p, %u.\n", texture_gl, sub_resource_idx);
|
||||
|
@ -1529,6 +1529,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
|
|||
struct wined3d_context *context, BOOL srgb)
|
||||
{
|
||||
unsigned int width, height, level, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
|
||||
struct wined3d_texture_gl *texture_gl = wined3d_texture_gl(texture);
|
||||
struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
struct wined3d_device *device = texture->resource.device;
|
||||
|
@ -1547,7 +1548,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
|
|||
&& wined3d_resource_is_offscreen(&texture->resource)
|
||||
&& (sub_resource->locations & WINED3D_LOCATION_DRAWABLE))
|
||||
{
|
||||
texture2d_load_fb_texture(wined3d_texture_gl(texture), sub_resource_idx, srgb, context);
|
||||
texture2d_load_fb_texture(texture_gl, sub_resource_idx, srgb, context);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1621,8 +1622,8 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
|
|||
wined3d_texture_load_location(texture, sub_resource_idx, context, WINED3D_LOCATION_SYSMEM);
|
||||
}
|
||||
|
||||
wined3d_texture_prepare_texture(texture, context, srgb);
|
||||
wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(texture), wined3d_context_gl(context), srgb);
|
||||
wined3d_texture_gl_prepare_texture(texture_gl, context_gl, srgb);
|
||||
wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
|
||||
wined3d_texture_get_pitch(texture, level, &src_row_pitch, &src_slice_pitch);
|
||||
|
||||
format = texture->resource.format;
|
||||
|
|
|
@ -1715,52 +1715,53 @@ static void wined3d_texture_force_reload(struct wined3d_texture *texture)
|
|||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
|
||||
void wined3d_texture_gl_prepare_texture(struct wined3d_texture_gl *texture_gl,
|
||||
struct wined3d_context_gl *context_gl, BOOL srgb)
|
||||
{
|
||||
DWORD alloc_flag = srgb ? WINED3D_TEXTURE_SRGB_ALLOCATED : WINED3D_TEXTURE_RGB_ALLOCATED;
|
||||
const struct wined3d_d3d_info *d3d_info = context->d3d_info;
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
struct wined3d_resource *resource = &texture->resource;
|
||||
const struct wined3d_d3d_info *d3d_info = context_gl->c.d3d_info;
|
||||
const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
|
||||
struct wined3d_resource *resource = &texture_gl->t.resource;
|
||||
const struct wined3d_device *device = resource->device;
|
||||
const struct wined3d_format *format = resource->format;
|
||||
const struct wined3d_color_key_conversion *conversion;
|
||||
const struct wined3d_format_gl *format_gl;
|
||||
GLenum internal;
|
||||
|
||||
TRACE("texture %p, context %p, format %s.\n", texture, context, debug_d3dformat(format->id));
|
||||
TRACE("texture_gl %p, context_gl %p, format %s.\n", texture_gl, context_gl, debug_d3dformat(format->id));
|
||||
|
||||
if (!d3d_info->shader_color_key
|
||||
&& !(texture->async.flags & WINED3D_TEXTURE_ASYNC_COLOR_KEY)
|
||||
!= !(texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT))
|
||||
&& !(texture_gl->t.async.flags & WINED3D_TEXTURE_ASYNC_COLOR_KEY)
|
||||
!= !(texture_gl->t.async.color_key_flags & WINED3D_CKEY_SRC_BLT))
|
||||
{
|
||||
wined3d_texture_force_reload(texture);
|
||||
wined3d_texture_force_reload(&texture_gl->t);
|
||||
|
||||
if (texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT)
|
||||
texture->async.flags |= WINED3D_TEXTURE_ASYNC_COLOR_KEY;
|
||||
if (texture_gl->t.async.color_key_flags & WINED3D_CKEY_SRC_BLT)
|
||||
texture_gl->t.async.flags |= WINED3D_TEXTURE_ASYNC_COLOR_KEY;
|
||||
}
|
||||
|
||||
if (texture->flags & alloc_flag)
|
||||
if (texture_gl->t.flags & alloc_flag)
|
||||
return;
|
||||
|
||||
if (resource->format_flags & WINED3DFMT_FLAG_DECOMPRESS)
|
||||
{
|
||||
TRACE("WINED3DFMT_FLAG_DECOMPRESS set.\n");
|
||||
texture->flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
format = wined3d_resource_get_decompress_format(resource);
|
||||
}
|
||||
else if (format->conv_byte_count)
|
||||
{
|
||||
texture->flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
}
|
||||
else if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE)))
|
||||
else if ((conversion = wined3d_format_get_color_key_conversion(&texture_gl->t, TRUE)))
|
||||
{
|
||||
texture->flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
|
||||
format = wined3d_get_format(device->adapter, conversion->dst_format, resource->bind_flags);
|
||||
TRACE("Using format %s for color key conversion.\n", debug_d3dformat(format->id));
|
||||
}
|
||||
format_gl = wined3d_format_gl(format);
|
||||
|
||||
wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(texture), wined3d_context_gl(context), srgb);
|
||||
wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
|
||||
|
||||
if (srgb)
|
||||
internal = format_gl->srgb_internal;
|
||||
|
@ -1774,11 +1775,11 @@ void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct win
|
|||
|
||||
TRACE("internal %#x, format %#x, type %#x.\n", internal, format_gl->format, format_gl->type);
|
||||
|
||||
if (wined3d_texture_use_immutable_storage(texture, gl_info))
|
||||
wined3d_texture_gl_allocate_immutable_storage(wined3d_texture_gl(texture), internal, gl_info);
|
||||
if (wined3d_texture_use_immutable_storage(&texture_gl->t, gl_info))
|
||||
wined3d_texture_gl_allocate_immutable_storage(texture_gl, internal, gl_info);
|
||||
else
|
||||
wined3d_texture_gl_allocate_mutable_storage(wined3d_texture_gl(texture), internal, format_gl, gl_info);
|
||||
texture->flags |= alloc_flag;
|
||||
wined3d_texture_gl_allocate_mutable_storage(texture_gl, internal, format_gl, gl_info);
|
||||
texture_gl->t.flags |= alloc_flag;
|
||||
}
|
||||
|
||||
static void wined3d_texture_gl_prepare_rb(struct wined3d_texture_gl *texture_gl,
|
||||
|
@ -1822,6 +1823,9 @@ static void wined3d_texture_gl_prepare_rb(struct wined3d_texture_gl *texture_gl,
|
|||
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
||||
struct wined3d_context *context, DWORD location)
|
||||
{
|
||||
struct wined3d_texture_gl *texture_gl = wined3d_texture_gl(texture);
|
||||
struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
|
||||
|
||||
switch (location)
|
||||
{
|
||||
case WINED3D_LOCATION_SYSMEM:
|
||||
|
@ -1842,11 +1846,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
|
|||
return TRUE;
|
||||
|
||||
case WINED3D_LOCATION_TEXTURE_RGB:
|
||||
wined3d_texture_prepare_texture(texture, context, FALSE);
|
||||
wined3d_texture_gl_prepare_texture(texture_gl, context_gl, FALSE);
|
||||
return TRUE;
|
||||
|
||||
case WINED3D_LOCATION_TEXTURE_SRGB:
|
||||
wined3d_texture_prepare_texture(texture, context, TRUE);
|
||||
wined3d_texture_gl_prepare_texture(texture_gl, context_gl, TRUE);
|
||||
return TRUE;
|
||||
|
||||
case WINED3D_LOCATION_DRAWABLE:
|
||||
|
@ -1855,11 +1859,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
|
|||
return TRUE;
|
||||
|
||||
case WINED3D_LOCATION_RB_MULTISAMPLE:
|
||||
wined3d_texture_gl_prepare_rb(wined3d_texture_gl(texture), context->gl_info, TRUE);
|
||||
wined3d_texture_gl_prepare_rb(texture_gl, context->gl_info, TRUE);
|
||||
return TRUE;
|
||||
|
||||
case WINED3D_LOCATION_RB_RESOLVED:
|
||||
wined3d_texture_gl_prepare_rb(wined3d_texture_gl(texture), context->gl_info, FALSE);
|
||||
wined3d_texture_gl_prepare_rb(texture_gl, context->gl_info, FALSE);
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
|
@ -3844,7 +3848,7 @@ void wined3d_texture_upload_from_texture(struct wined3d_texture *dst_texture, un
|
|||
if (update_w == wined3d_texture_get_level_width(dst_texture, dst_level)
|
||||
&& update_h == wined3d_texture_get_level_height(dst_texture, dst_level)
|
||||
&& update_d == wined3d_texture_get_level_depth(dst_texture, dst_level))
|
||||
wined3d_texture_prepare_texture(dst_texture, context, FALSE);
|
||||
wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
else
|
||||
wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(dst_texture), wined3d_context_gl(context), FALSE);
|
||||
|
|
|
@ -190,7 +190,7 @@ static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target
|
|||
return;
|
||||
}
|
||||
|
||||
wined3d_texture_prepare_texture(&texture_gl->t, context, FALSE);
|
||||
wined3d_texture_gl_prepare_texture(texture_gl, context_gl, FALSE);
|
||||
texture_name = wined3d_texture_gl_get_texture_name(texture_gl, context, FALSE);
|
||||
|
||||
level_idx = desc->u.texture.level_idx;
|
||||
|
|
|
@ -3550,8 +3550,6 @@ BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
|
|||
unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
||||
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
||||
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_prepare_texture(struct wined3d_texture *texture,
|
||||
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_set_map_binding(struct wined3d_texture *texture, DWORD map_binding) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
|
||||
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
||||
|
@ -3625,6 +3623,8 @@ void wined3d_texture_gl_bind(struct wined3d_texture_gl *texture_gl,
|
|||
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_gl_bind_and_dirtify(struct wined3d_texture_gl *texture_gl,
|
||||
struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_gl_prepare_texture(struct wined3d_texture_gl *texture_gl,
|
||||
struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
|
||||
void wined3d_texture_gl_set_compatible_renderbuffer(struct wined3d_texture_gl *texture_gl,
|
||||
struct wined3d_context *context, unsigned int level,
|
||||
const struct wined3d_rendertarget_info *rt) DECLSPEC_HIDDEN;
|
||||
|
|
Loading…
Reference in New Issue