wined3d: Get rid of WINED3D_POOL_SCRATCH.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2018-01-29 21:10:23 +03:30 committed by Alexandre Julliard
parent 798504700b
commit 2abf1dd323
19 changed files with 169 additions and 52 deletions

View File

@ -227,12 +227,12 @@ static HRESULT WINAPI d3d8_vertexbuffer_GetDesc(IDirect3DVertexBuffer8 *iface,
wined3d_resource_get_desc(wined3d_resource, &wined3d_desc);
wined3d_mutex_unlock();
desc->Format = D3DFMT_VERTEXDATA;
desc->Type = D3DRTYPE_VERTEXBUFFER;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->FVF = buffer->fvf;
desc->Format = D3DFMT_VERTEXDATA;
return D3D_OK;
}
@ -273,15 +273,25 @@ static const struct wined3d_parent_ops d3d8_vertexbuffer_wined3d_parent_ops =
HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device *device,
UINT size, DWORD usage, DWORD fvf, D3DPOOL pool)
{
enum wined3d_pool wined3d_pool;
DWORD wined3d_usage;
HRESULT hr;
wined3d_pool = pool;
wined3d_usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH)
{
wined3d_pool = WINED3D_POOL_SYSTEM_MEM;
wined3d_usage |= WINED3DUSAGE_SCRATCH;
}
buffer->IDirect3DVertexBuffer8_iface.lpVtbl = &Direct3DVertexBuffer8_Vtbl;
d3d8_resource_init(&buffer->resource);
buffer->fvf = fvf;
wined3d_mutex_lock();
hr = wined3d_buffer_create_vb(device->wined3d_device, size, usage & WINED3DUSAGE_MASK,
(enum wined3d_pool)pool, buffer, &d3d8_vertexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
hr = wined3d_buffer_create_vb(device->wined3d_device, size, wined3d_usage, wined3d_pool,
buffer, &d3d8_vertexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
wined3d_mutex_unlock();
if (FAILED(hr))
{
@ -512,8 +522,8 @@ static HRESULT WINAPI d3d8_indexbuffer_GetDesc(IDirect3DIndexBuffer8 *iface,
desc->Format = d3dformat_from_wined3dformat(buffer->format);
desc->Type = D3DRTYPE_INDEXBUFFER;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
return D3D_OK;
@ -555,15 +565,25 @@ static const struct wined3d_parent_ops d3d8_indexbuffer_wined3d_parent_ops =
HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *device,
UINT size, DWORD usage, D3DFORMAT format, D3DPOOL pool)
{
enum wined3d_pool wined3d_pool;
DWORD wined3d_usage;
HRESULT hr;
wined3d_pool = pool;
wined3d_usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH)
{
wined3d_pool = WINED3D_POOL_SYSTEM_MEM;
wined3d_usage |= WINED3DUSAGE_SCRATCH;
}
buffer->IDirect3DIndexBuffer8_iface.lpVtbl = &d3d8_indexbuffer_vtbl;
d3d8_resource_init(&buffer->resource);
buffer->format = wined3dformat_from_d3dformat(format);
wined3d_mutex_lock();
hr = wined3d_buffer_create_ib(device->wined3d_device, size, usage & WINED3DUSAGE_MASK,
(enum wined3d_pool)pool, buffer, &d3d8_indexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
hr = wined3d_buffer_create_ib(device->wined3d_device, size, wined3d_usage, wined3d_pool,
buffer, &d3d8_indexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
wined3d_mutex_unlock();
if (FAILED(hr))
{

View File

@ -275,4 +275,16 @@ enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_H
void load_local_constants(const DWORD *d3d8_elements, struct wined3d_shader *wined3d_vertex_shader) DECLSPEC_HIDDEN;
size_t parse_token(const DWORD *pToken) DECLSPEC_HIDDEN;
static inline DWORD d3dusage_from_wined3dusage(unsigned int usage)
{
return usage & WINED3DUSAGE_MASK;
}
static inline D3DPOOL d3dpool_from_wined3dpool(enum wined3d_pool pool, unsigned int usage)
{
if (pool == WINED3D_POOL_SYSTEM_MEM && usage & WINED3DUSAGE_SCRATCH)
return D3DPOOL_SCRATCH;
return pool;
}
#endif /* __WINE_D3DX8_PRIVATE_H */

View File

@ -1027,6 +1027,12 @@ static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
wined3d_mutex_lock();
if (FAILED(hr = wined3d_texture_create(device->wined3d_device, &desc,

View File

@ -191,8 +191,8 @@ static HRESULT WINAPI d3d8_surface_GetDesc(IDirect3DSurface8 *iface, D3DSURFACE_
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->Width = wined3d_desc.width;

View File

@ -253,8 +253,8 @@ static HRESULT WINAPI d3d8_texture_2d_GetLevelDesc(IDirect3DTexture8 *iface, UIN
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->Width = wined3d_desc.width;
@ -600,8 +600,8 @@ static HRESULT WINAPI d3d8_texture_cube_GetLevelDesc(IDirect3DCubeTexture8 *ifac
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->Width = wined3d_desc.width;
@ -945,8 +945,8 @@ static HRESULT WINAPI d3d8_texture_3d_GetLevelDesc(IDirect3DVolumeTexture8 *ifac
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_VOLUME;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->Width = wined3d_desc.width;
desc->Height = wined3d_desc.height;
@ -1114,6 +1114,12 @@ HRESULT texture_init(struct d3d8_texture *texture, struct d3d8_device *device,
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (pool != D3DPOOL_DEFAULT || (usage & D3DUSAGE_DYNAMIC))
flags |= WINED3D_TEXTURE_CREATE_MAPPABLE;
@ -1159,6 +1165,12 @@ HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *devic
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (pool != D3DPOOL_DEFAULT || (usage & D3DUSAGE_DYNAMIC))
flags |= WINED3D_TEXTURE_CREATE_MAPPABLE;
@ -1203,6 +1215,12 @@ HRESULT volumetexture_init(struct d3d8_texture *texture, struct d3d8_device *dev
desc.depth = depth;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (!levels)
levels = wined3d_log2i(max(max(width, height), depth)) + 1;

View File

@ -125,8 +125,8 @@ static HRESULT WINAPI d3d8_volume_GetDesc(IDirect3DVolume8 *iface, D3DVOLUME_DES
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_VOLUME;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->Width = wined3d_desc.width;
desc->Height = wined3d_desc.height;

View File

@ -229,10 +229,10 @@ static HRESULT WINAPI d3d9_vertexbuffer_GetDesc(IDirect3DVertexBuffer9 *iface,
wined3d_mutex_unlock();
desc->Format = D3DFMT_VERTEXDATA;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Size = wined3d_desc.size;
desc->Type = D3DRTYPE_VERTEXBUFFER;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
desc->FVF = buffer->fvf;
return D3D_OK;
@ -274,15 +274,25 @@ static const struct wined3d_parent_ops d3d9_vertexbuffer_wined3d_parent_ops =
HRESULT vertexbuffer_init(struct d3d9_vertexbuffer *buffer, struct d3d9_device *device,
UINT size, UINT usage, DWORD fvf, D3DPOOL pool)
{
enum wined3d_pool wined3d_pool;
DWORD wined3d_usage;
HRESULT hr;
wined3d_pool = pool;
wined3d_usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH)
{
wined3d_pool = WINED3D_POOL_SYSTEM_MEM;
wined3d_usage |= WINED3DUSAGE_SCRATCH;
}
buffer->IDirect3DVertexBuffer9_iface.lpVtbl = &d3d9_vertexbuffer_vtbl;
buffer->fvf = fvf;
d3d9_resource_init(&buffer->resource);
wined3d_mutex_lock();
hr = wined3d_buffer_create_vb(device->wined3d_device, size, usage & WINED3DUSAGE_MASK,
(enum wined3d_pool)pool, buffer, &d3d9_vertexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
hr = wined3d_buffer_create_vb(device->wined3d_device, size, wined3d_usage, wined3d_pool,
buffer, &d3d9_vertexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
wined3d_mutex_unlock();
if (FAILED(hr))
{
@ -510,10 +520,10 @@ static HRESULT WINAPI d3d9_indexbuffer_GetDesc(IDirect3DIndexBuffer9 *iface, D3D
wined3d_mutex_unlock();
desc->Format = d3dformat_from_wined3dformat(buffer->format);
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Size = wined3d_desc.size;
desc->Type = D3DRTYPE_INDEXBUFFER;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Size = wined3d_desc.size;
return D3D_OK;
}
@ -554,15 +564,25 @@ static const struct wined3d_parent_ops d3d9_indexbuffer_wined3d_parent_ops =
HRESULT indexbuffer_init(struct d3d9_indexbuffer *buffer, struct d3d9_device *device,
UINT size, DWORD usage, D3DFORMAT format, D3DPOOL pool)
{
enum wined3d_pool wined3d_pool;
DWORD wined3d_usage;
HRESULT hr;
wined3d_pool = pool;
wined3d_usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH)
{
wined3d_pool = WINED3D_POOL_SYSTEM_MEM;
wined3d_usage |= WINED3DUSAGE_SCRATCH;
}
buffer->IDirect3DIndexBuffer9_iface.lpVtbl = &d3d9_indexbuffer_vtbl;
buffer->format = wined3dformat_from_d3dformat(format);
d3d9_resource_init(&buffer->resource);
wined3d_mutex_lock();
hr = wined3d_buffer_create_ib(device->wined3d_device, size, usage & WINED3DUSAGE_MASK,
(enum wined3d_pool)pool, buffer, &d3d9_indexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
hr = wined3d_buffer_create_ib(device->wined3d_device, size, wined3d_usage, wined3d_pool,
buffer, &d3d9_indexbuffer_wined3d_parent_ops, &buffer->wined3d_buffer);
wined3d_mutex_unlock();
if (FAILED(hr))
{

View File

@ -278,4 +278,16 @@ static inline struct d3d9_device *impl_from_IDirect3DDevice9Ex(IDirect3DDevice9E
return CONTAINING_RECORD(iface, struct d3d9_device, IDirect3DDevice9Ex_iface);
}
static inline DWORD d3dusage_from_wined3dusage(unsigned int usage)
{
return usage & WINED3DUSAGE_MASK;
}
static inline D3DPOOL d3dpool_from_wined3dpool(enum wined3d_pool pool, unsigned int usage)
{
if (pool == WINED3D_POOL_SYSTEM_MEM && usage & WINED3DUSAGE_SCRATCH)
return D3DPOOL_SCRATCH;
return pool;
}
#endif /* __WINE_D3D9_PRIVATE_H */

View File

@ -1283,6 +1283,12 @@ static HRESULT d3d9_device_create_surface(struct d3d9_device *device, UINT width
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (is_gdi_compat_wined3dformat(desc.format))
flags |= WINED3D_TEXTURE_CREATE_GET_DC;

View File

@ -223,8 +223,8 @@ static HRESULT WINAPI d3d9_surface_GetDesc(IDirect3DSurface9 *iface, D3DSURFACE_
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->MultiSampleQuality = wined3d_desc.multisample_quality;
desc->Width = wined3d_desc.width;

View File

@ -289,8 +289,8 @@ static HRESULT WINAPI d3d9_texture_2d_GetLevelDesc(IDirect3DTexture9 *iface, UIN
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->MultiSampleQuality = wined3d_desc.multisample_quality;
desc->Width = wined3d_desc.width;
@ -676,8 +676,8 @@ static HRESULT WINAPI d3d9_texture_cube_GetLevelDesc(IDirect3DCubeTexture9 *ifac
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_SURFACE;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->MultiSampleType = wined3d_desc.multisample_type;
desc->MultiSampleQuality = wined3d_desc.multisample_quality;
desc->Width = wined3d_desc.width;
@ -1059,8 +1059,8 @@ static HRESULT WINAPI d3d9_texture_3d_GetLevelDesc(IDirect3DVolumeTexture9 *ifac
{
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_VOLUME;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Width = wined3d_desc.width;
desc->Height = wined3d_desc.height;
desc->Depth = wined3d_desc.depth;
@ -1226,6 +1226,12 @@ HRESULT texture_init(struct d3d9_texture *texture, struct d3d9_device *device,
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (pool != D3DPOOL_DEFAULT || (usage & D3DUSAGE_DYNAMIC))
flags |= WINED3D_TEXTURE_CREATE_MAPPABLE;
@ -1279,6 +1285,12 @@ HRESULT cubetexture_init(struct d3d9_texture *texture, struct d3d9_device *devic
desc.depth = 1;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (pool != D3DPOOL_DEFAULT || (usage & D3DUSAGE_DYNAMIC))
flags |= WINED3D_TEXTURE_CREATE_MAPPABLE;
@ -1331,6 +1343,12 @@ HRESULT volumetexture_init(struct d3d9_texture *texture, struct d3d9_device *dev
desc.depth = depth;
desc.size = 0;
if (pool == D3DPOOL_SCRATCH)
{
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.usage |= WINED3DUSAGE_SCRATCH;
}
if (!levels)
{
if (usage & D3DUSAGE_AUTOGENMIPMAP)

View File

@ -126,8 +126,8 @@ static HRESULT WINAPI d3d9_volume_GetDesc(IDirect3DVolume9 *iface, D3DVOLUME_DES
desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
desc->Type = D3DRTYPE_VOLUME;
desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK;
desc->Pool = wined3d_desc.pool;
desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage);
desc->Pool = d3dpool_from_wined3dpool(wined3d_desc.pool, wined3d_desc.usage);
desc->Width = wined3d_desc.width;
desc->Height = wined3d_desc.height;
desc->Depth = wined3d_desc.depth;

View File

@ -1453,11 +1453,11 @@ HRESULT CDECL wined3d_buffer_create_vb(struct wined3d_device *device, UINT size,
TRACE("device %p, size %u, usage %#x, pool %#x, parent %p, parent_ops %p, buffer %p.\n",
device, size, usage, pool, parent, parent_ops, buffer);
if (pool == WINED3D_POOL_SCRATCH)
if (usage & WINED3DUSAGE_SCRATCH)
{
/* The d3d9 tests shows that this is not allowed. It doesn't make much
* sense anyway, SCRATCH buffers wouldn't be usable anywhere. */
WARN("Vertex buffer in WINED3D_POOL_SCRATCH requested, returning WINED3DERR_INVALIDCALL.\n");
WARN("Vertex buffer with WINED3DUSAGE_SCRATCH requested, returning WINED3DERR_INVALIDCALL.\n");
*buffer = NULL;
return WINED3DERR_INVALIDCALL;
}

View File

@ -3427,7 +3427,7 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device,
return WINED3D_OK;
}
if (texture && texture->resource.pool == WINED3D_POOL_SCRATCH)
if (texture && texture->resource.usage & WINED3DUSAGE_SCRATCH)
{
WARN("Rejecting attempt to set scratch texture.\n");
return WINED3DERR_INVALIDCALL;
@ -3768,7 +3768,7 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device,
return WINED3DERR_INVALIDCALL;
}
if (src_texture->resource.pool != WINED3D_POOL_SYSTEM_MEM)
if (src_texture->resource.pool != WINED3D_POOL_SYSTEM_MEM || src_texture->resource.usage & WINED3DUSAGE_SCRATCH)
{
WARN("Source texture not in WINED3D_POOL_SYSTEM_MEM, returning WINED3DERR_INVALIDCALL.\n");
return WINED3DERR_INVALIDCALL;

View File

@ -38,7 +38,6 @@ static DWORD resource_access_from_pool(enum wined3d_pool pool)
case WINED3D_POOL_MANAGED:
return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP;
case WINED3D_POOL_SCRATCH:
case WINED3D_POOL_SYSTEM_MEM:
return WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP;
@ -57,6 +56,7 @@ static void resource_check_usage(DWORD usage)
| WINED3DUSAGE_AUTOGENMIPMAP
| WINED3DUSAGE_STATICDECL
| WINED3DUSAGE_OVERLAY
| WINED3DUSAGE_SCRATCH
| WINED3DUSAGE_PRIVATE
| WINED3DUSAGE_LEGACY_CUBEMAP
| WINED3DUSAGE_TEXTURE;
@ -104,6 +104,12 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
resource_check_usage(usage);
if (usage & WINED3DUSAGE_SCRATCH && pool != WINED3D_POOL_SYSTEM_MEM)
{
ERR("WINED3DUSAGE_SCRATCH used with pool %s.\n", debug_d3dpool(pool));
return WINED3DERR_INVALIDCALL;
}
for (i = 0; i < ARRAY_SIZE(resource_types); ++i)
{
if (resource_types[i].type != type
@ -157,7 +163,7 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
* Use 2D textures, the texture code will pad to a power of 2 size. */
gl_type = WINED3D_GL_RES_TYPE_TEX_2D;
}
else if (pool == WINED3D_POOL_SCRATCH)
else if (usage & WINED3DUSAGE_SCRATCH)
{
/* Needed for proper format information. */
gl_type = base_type;

View File

@ -1317,8 +1317,8 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr
desc.format = dst_format->id;
desc.multisample_type = WINED3D_MULTISAMPLE_NONE;
desc.multisample_quality = 0;
desc.usage = WINED3DUSAGE_PRIVATE;
desc.pool = WINED3D_POOL_SCRATCH;
desc.usage = WINED3DUSAGE_SCRATCH | WINED3DUSAGE_PRIVATE;
desc.pool = WINED3D_POOL_SYSTEM_MEM;
desc.width = wined3d_texture_get_level_width(src_texture, texture_level);
desc.height = wined3d_texture_get_level_height(src_texture, texture_level);
desc.depth = 1;

View File

@ -2078,7 +2078,7 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3
/* level_count == 0 returns an error as well. */
if (level_count != 1 || layer_count != 1)
{
if (desc->pool != WINED3D_POOL_SCRATCH)
if (!(desc->usage & WINED3DUSAGE_SCRATCH))
{
WARN("Attempted to create a mipmapped/cube/array NPOT texture without unconditional NPOT support.\n");
return WINED3DERR_INVALIDCALL;
@ -2595,7 +2595,7 @@ static HRESULT volumetexture_init(struct wined3d_texture *texture, const struct
}
if (desc->usage & WINED3DUSAGE_DYNAMIC && (desc->pool == WINED3D_POOL_MANAGED
|| desc->pool == WINED3D_POOL_SCRATCH))
|| desc->usage & WINED3DUSAGE_SCRATCH))
{
WARN("Attempted to create a DYNAMIC texture in pool %s.\n", debug_d3dpool(desc->pool));
return WINED3DERR_INVALIDCALL;
@ -2616,7 +2616,7 @@ static HRESULT volumetexture_init(struct wined3d_texture *texture, const struct
if (pow2_w != desc->width || pow2_h != desc->height || pow2_d != desc->depth)
{
if (desc->pool == WINED3D_POOL_SCRATCH)
if (desc->usage & WINED3DUSAGE_SCRATCH)
{
WARN("Creating a scratch NPOT volume texture despite lack of HW support.\n");
}

View File

@ -4654,7 +4654,6 @@ const char *debug_d3dpool(enum wined3d_pool pool)
POOL_TO_STR(WINED3D_POOL_DEFAULT);
POOL_TO_STR(WINED3D_POOL_MANAGED);
POOL_TO_STR(WINED3D_POOL_SYSTEM_MEM);
POOL_TO_STR(WINED3D_POOL_SCRATCH);
#undef POOL_TO_STR
default:
FIXME("Unrecognized pool %#x.\n", pool);

View File

@ -681,7 +681,6 @@ enum wined3d_pool
WINED3D_POOL_DEFAULT = 0,
WINED3D_POOL_MANAGED = 1,
WINED3D_POOL_SYSTEM_MEM = 2,
WINED3D_POOL_SCRATCH = 3,
};
enum wined3d_query_type
@ -896,6 +895,7 @@ enum wined3d_shader_byte_code_format
#define WINED3DUSAGE_TEXTAPI 0x10000000
#define WINED3DUSAGE_MASK 0x10007fff
#define WINED3DUSAGE_SCRATCH 0x00200000
#define WINED3DUSAGE_PRIVATE 0x00400000
#define WINED3DUSAGE_LEGACY_CUBEMAP 0x00800000
#define WINED3DUSAGE_TEXTURE 0x01000000