wined3d: Do not implicitly set WINED3D_RESOURCE_ACCESS_MAP for dynamic resources.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2018-02-14 10:09:56 +03:30 committed by Alexandre Julliard
parent 7772c4fdbf
commit 02dc04bcc9
11 changed files with 25 additions and 23 deletions

View File

@ -289,7 +289,7 @@ HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device *
desc.byte_width = size; desc.byte_width = size;
desc.usage = usage & WINED3DUSAGE_MASK; desc.usage = usage & WINED3DUSAGE_MASK;
desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER; desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;
@ -577,7 +577,7 @@ HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *de
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -297,11 +297,13 @@ static inline D3DPOOL d3dpool_from_wined3daccess(unsigned int access, unsigned i
} }
} }
static inline unsigned int wined3daccess_from_d3dpool(D3DPOOL pool) static inline unsigned int wined3daccess_from_d3dpool(D3DPOOL pool, unsigned int usage)
{ {
switch (pool) switch (pool)
{ {
case D3DPOOL_DEFAULT: case D3DPOOL_DEFAULT:
if (usage & D3DUSAGE_DYNAMIC)
return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
return WINED3D_RESOURCE_ACCESS_GPU; return WINED3D_RESOURCE_ACCESS_GPU;
case D3DPOOL_MANAGED: case D3DPOOL_MANAGED:
return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP; return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP;

View File

@ -1018,7 +1018,7 @@ static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width
desc.usage = usage & WINED3DUSAGE_MASK; desc.usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = 1; desc.depth = 1;
@ -2111,7 +2111,7 @@ static HRESULT d3d8_device_prepare_vertex_buffer(struct d3d8_device *device, UIN
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY;
desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER; desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;
@ -2206,7 +2206,7 @@ static HRESULT d3d8_device_prepare_index_buffer(struct d3d8_device *device, UINT
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -1110,7 +1110,7 @@ HRESULT texture_init(struct d3d8_texture *texture, struct d3d8_device *device,
desc.usage |= WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = 1; desc.depth = 1;
@ -1157,7 +1157,7 @@ HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *devic
desc.usage |= WINED3DUSAGE_LEGACY_CUBEMAP | WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_LEGACY_CUBEMAP | WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = edge_length; desc.width = edge_length;
desc.height = edge_length; desc.height = edge_length;
desc.depth = 1; desc.depth = 1;
@ -1203,7 +1203,7 @@ HRESULT volumetexture_init(struct d3d8_texture *texture, struct d3d8_device *dev
desc.usage |= WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool); desc.access = wined3daccess_from_d3dpool(pool, usage);
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = depth; desc.depth = depth;

View File

@ -290,7 +290,7 @@ HRESULT vertexbuffer_init(struct d3d9_vertexbuffer *buffer, struct d3d9_device *
desc.byte_width = size; desc.byte_width = size;
desc.usage = usage & WINED3DUSAGE_MASK; desc.usage = usage & WINED3DUSAGE_MASK;
desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER; desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;
@ -576,7 +576,7 @@ HRESULT indexbuffer_init(struct d3d9_indexbuffer *buffer, struct d3d9_device *de
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -300,11 +300,13 @@ static inline D3DPOOL d3dpool_from_wined3daccess(unsigned int access, unsigned i
} }
} }
static inline unsigned int wined3daccess_from_d3dpool(D3DPOOL pool) static inline unsigned int wined3daccess_from_d3dpool(D3DPOOL pool, unsigned int usage)
{ {
switch (pool) switch (pool)
{ {
case D3DPOOL_DEFAULT: case D3DPOOL_DEFAULT:
if (usage & D3DUSAGE_DYNAMIC)
return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
return WINED3D_RESOURCE_ACCESS_GPU; return WINED3D_RESOURCE_ACCESS_GPU;
case D3DPOOL_MANAGED: case D3DPOOL_MANAGED:
return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP; return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP;

View File

@ -1273,7 +1273,7 @@ static HRESULT d3d9_device_create_surface(struct d3d9_device *device, UINT width
desc.usage = usage & WINED3DUSAGE_MASK; desc.usage = usage & WINED3DUSAGE_MASK;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = 1; desc.depth = 1;
@ -2551,7 +2551,7 @@ static HRESULT d3d9_device_prepare_vertex_buffer(struct d3d9_device *device, UIN
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY;
desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER; desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;
@ -2653,7 +2653,7 @@ static HRESULT d3d9_device_prepare_index_buffer(struct d3d9_device *device, UINT
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -1222,7 +1222,7 @@ HRESULT texture_init(struct d3d9_texture *texture, struct d3d9_device *device,
desc.usage |= WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = 1; desc.depth = 1;
@ -1277,7 +1277,7 @@ HRESULT cubetexture_init(struct d3d9_texture *texture, struct d3d9_device *devic
desc.usage |= WINED3DUSAGE_LEGACY_CUBEMAP | WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_LEGACY_CUBEMAP | WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool) | WINED3D_RESOURCE_ACCESS_MAP; desc.access = wined3daccess_from_d3dpool(pool, usage) | WINED3D_RESOURCE_ACCESS_MAP;
desc.width = edge_length; desc.width = edge_length;
desc.height = edge_length; desc.height = edge_length;
desc.depth = 1; desc.depth = 1;
@ -1331,7 +1331,7 @@ HRESULT volumetexture_init(struct d3d9_texture *texture, struct d3d9_device *dev
desc.usage |= WINED3DUSAGE_TEXTURE; desc.usage |= WINED3DUSAGE_TEXTURE;
if (pool == D3DPOOL_SCRATCH) if (pool == D3DPOOL_SCRATCH)
desc.usage |= WINED3DUSAGE_SCRATCH; desc.usage |= WINED3DUSAGE_SCRATCH;
desc.access = wined3daccess_from_d3dpool(pool); desc.access = wined3daccess_from_d3dpool(pool, usage);
desc.width = width; desc.width = width;
desc.height = height; desc.height = height;
desc.depth = depth; desc.depth = depth;

View File

@ -3471,7 +3471,7 @@ static HRESULT d3d_device_prepare_vertex_buffer(struct d3d_device *device, UINT
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY;
desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER; desc.bind_flags = WINED3D_BIND_VERTEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;
@ -3663,7 +3663,7 @@ static HRESULT d3d_device_prepare_index_buffer(struct d3d_device *device, UINT m
desc.byte_width = size; desc.byte_width = size;
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -131,7 +131,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer,
desc.byte_width = new_size * sizeof(*indices); desc.byte_width = new_size * sizeof(*indices);
desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL; desc.usage = WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY | WINED3DUSAGE_STATICDECL;
desc.bind_flags = WINED3D_BIND_INDEX_BUFFER; desc.bind_flags = WINED3D_BIND_INDEX_BUFFER;
desc.access = WINED3D_RESOURCE_ACCESS_GPU; desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_MAP;
desc.misc_flags = 0; desc.misc_flags = 0;
desc.structure_byte_stride = 0; desc.structure_byte_stride = 0;

View File

@ -178,8 +178,6 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
resource->multisample_type = multisample_type; resource->multisample_type = multisample_type;
resource->multisample_quality = multisample_quality; resource->multisample_quality = multisample_quality;
resource->usage = usage; resource->usage = usage;
if (usage & WINED3DUSAGE_DYNAMIC)
access |= WINED3D_RESOURCE_ACCESS_MAP;
resource->access = access; resource->access = access;
resource->width = width; resource->width = width;
resource->height = height; resource->height = height;