mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-15 08:04:47 +00:00
ddraw: Move the rest of the surface desc population to ddraw_surface_create() from device_parent_texture_sub_resource_created().
Cf. 191db92fd5
.
Put all this code in the same place, and possibly move towards getting rid of
the texture_sub_resource_created() callback entirely.
This commit is contained in:
parent
21079819e8
commit
0ff2f3a856
|
@ -6175,6 +6175,7 @@ static HRESULT ddraw_surface_create_wined3d_texture(struct ddraw *ddraw,
|
||||||
{
|
{
|
||||||
struct wined3d_sub_resource_desc wined3d_mip_desc;
|
struct wined3d_sub_resource_desc wined3d_mip_desc;
|
||||||
unsigned int sub_resource_idx = i * levels + j;
|
unsigned int sub_resource_idx = i * levels + j;
|
||||||
|
unsigned int row_pitch, slice_pitch;
|
||||||
struct ddraw_surface *mip;
|
struct ddraw_surface *mip;
|
||||||
DDSURFACEDESC2 *mip_desc;
|
DDSURFACEDESC2 *mip_desc;
|
||||||
|
|
||||||
|
@ -6182,6 +6183,30 @@ static HRESULT ddraw_surface_create_wined3d_texture(struct ddraw *ddraw,
|
||||||
|
|
||||||
mip->sysmem_fallback = sysmem_fallback;
|
mip->sysmem_fallback = sysmem_fallback;
|
||||||
mip_desc = &mip->surface_desc;
|
mip_desc = &mip->surface_desc;
|
||||||
|
|
||||||
|
*mip_desc = *desc;
|
||||||
|
|
||||||
|
wined3d_texture_get_pitch(*wined3d_texture, j, &row_pitch, &slice_pitch);
|
||||||
|
if (format_is_compressed(&desc->u4.ddpfPixelFormat))
|
||||||
|
{
|
||||||
|
if (desc->dwFlags & DDSD_LPSURFACE)
|
||||||
|
mip_desc->u1.dwLinearSize = ~0u;
|
||||||
|
else
|
||||||
|
mip_desc->u1.dwLinearSize = slice_pitch;
|
||||||
|
mip_desc->dwFlags |= DDSD_LINEARSIZE;
|
||||||
|
mip_desc->dwFlags &= ~DDSD_PITCH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(desc->dwFlags & DDSD_LPSURFACE))
|
||||||
|
mip_desc->u1.lPitch = row_pitch;
|
||||||
|
mip_desc->dwFlags |= DDSD_PITCH;
|
||||||
|
mip_desc->dwFlags &= ~DDSD_LINEARSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mip_desc->dwFlags &= ~DDSD_LPSURFACE;
|
||||||
|
mip_desc->lpSurface = NULL;
|
||||||
|
|
||||||
if (desc->ddsCaps.dwCaps & DDSCAPS_MIPMAP)
|
if (desc->ddsCaps.dwCaps & DDSCAPS_MIPMAP)
|
||||||
mip_desc->u2.dwMipMapCount = levels - j;
|
mip_desc->u2.dwMipMapCount = levels - j;
|
||||||
|
|
||||||
|
@ -6788,8 +6813,6 @@ void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw,
|
||||||
const struct wined3d_parent_ops **parent_ops)
|
const struct wined3d_parent_ops **parent_ops)
|
||||||
{
|
{
|
||||||
struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture);
|
struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture);
|
||||||
unsigned int texture_level, row_pitch, slice_pitch;
|
|
||||||
DDSURFACEDESC2 *desc = &surface->surface_desc;
|
|
||||||
unsigned int version = texture->version;
|
unsigned int version = texture->version;
|
||||||
|
|
||||||
surface->IDirectDrawSurface7_iface.lpVtbl = &ddraw_surface7_vtbl;
|
surface->IDirectDrawSurface7_iface.lpVtbl = &ddraw_surface7_vtbl;
|
||||||
|
@ -6820,29 +6843,8 @@ void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw,
|
||||||
surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface_iface;
|
surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface_iface;
|
||||||
}
|
}
|
||||||
|
|
||||||
*desc = texture->surface_desc;
|
|
||||||
surface->first_attached = surface;
|
surface->first_attached = surface;
|
||||||
|
|
||||||
texture_level = desc->ddsCaps.dwCaps & DDSCAPS_MIPMAP ? sub_resource_idx % desc->u2.dwMipMapCount : 0;
|
|
||||||
wined3d_texture_get_pitch(wined3d_texture, texture_level, &row_pitch, &slice_pitch);
|
|
||||||
if (format_is_compressed(&desc->u4.ddpfPixelFormat))
|
|
||||||
{
|
|
||||||
if (desc->dwFlags & DDSD_LPSURFACE)
|
|
||||||
desc->u1.dwLinearSize = ~0u;
|
|
||||||
else
|
|
||||||
desc->u1.dwLinearSize = slice_pitch;
|
|
||||||
desc->dwFlags |= DDSD_LINEARSIZE;
|
|
||||||
desc->dwFlags &= ~(DDSD_LPSURFACE | DDSD_PITCH);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!(desc->dwFlags & DDSD_LPSURFACE))
|
|
||||||
desc->u1.lPitch = row_pitch;
|
|
||||||
desc->dwFlags |= DDSD_PITCH;
|
|
||||||
desc->dwFlags &= ~(DDSD_LPSURFACE | DDSD_LINEARSIZE);
|
|
||||||
}
|
|
||||||
desc->lpSurface = NULL;
|
|
||||||
|
|
||||||
wined3d_texture_incref(surface->wined3d_texture = wined3d_texture);
|
wined3d_texture_incref(surface->wined3d_texture = wined3d_texture);
|
||||||
surface->sub_resource_idx = sub_resource_idx;
|
surface->sub_resource_idx = sub_resource_idx;
|
||||||
*parent_ops = &ddraw_surface_wined3d_parent_ops;
|
*parent_ops = &ddraw_surface_wined3d_parent_ops;
|
||||||
|
|
Loading…
Reference in a new issue