Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/wined3d/adapter_gl.c | 20 ++++++++++++++++----
dlls/wined3d/adapter_vk.c | 4 ++--
dlls/wined3d/buffer.c | 8 +++++---
dlls/wined3d/directx.c | 4 ++--
dlls/wined3d/surface.c | 23 +++++++++++------------
dlls/wined3d/texture.c | 10 ++++------
dlls/wined3d/wined3d_private.h | 14 ++++++++------
7 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 0415099439c..5ffa6fdff6f 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -4588,15 +4588,27 @@ static void adapter_gl_uninit_3d(struct wined3d_device *device)
}
static void *adapter_gl_map_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, size_t size, GLenum binding, uint32_t flags)
+ const struct wined3d_bo_address *data, size_t size, uint32_t bind_flags, uint32_t map_flags)
{
- return wined3d_context_gl_map_bo_address(wined3d_context_gl(context), data, size, binding, flags);
+ struct wined3d_context_gl *context_gl;
+ GLenum binding;
+
+ context_gl = wined3d_context_gl(context);
+ binding = wined3d_buffer_gl_binding_from_bind_flags(context_gl->gl_info, bind_flags);
+
+ return wined3d_context_gl_map_bo_address(context_gl, data, size, binding, map_flags);
}
static void adapter_gl_unmap_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, GLenum binding)
+ const struct wined3d_bo_address *data, uint32_t bind_flags)
{
- return wined3d_context_gl_unmap_bo_address(wined3d_context_gl(context), data, binding);
+ struct wined3d_context_gl *context_gl;
+ GLenum binding;
+
+ context_gl = wined3d_context_gl(context);
+ binding = wined3d_buffer_gl_binding_from_bind_flags(context_gl->gl_info, bind_flags);
+
+ wined3d_context_gl_unmap_bo_address(context_gl, data, binding);
}
static HRESULT adapter_gl_create_swapchain(struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index ef2734f0551..3480cf80d91 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -472,7 +472,7 @@ static void adapter_vk_uninit_3d(struct wined3d_device *device)
}
static void *adapter_vk_map_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, size_t size, GLenum binding, uint32_t flags)
+ const struct wined3d_bo_address *data, size_t size, uint32_t bind_flags, uint32_t map_flags)
{
if (data->buffer_object)
{
@@ -484,7 +484,7 @@ static void *adapter_vk_map_bo_address(struct wined3d_context *context,
}
static void adapter_vk_unmap_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, GLenum binding)
+ const struct wined3d_bo_address *data, uint32_t bind_flags)
{
if (data->buffer_object)
ERR("Unsupported buffer object %#lx.\n", data->buffer_object);
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 8d72b782dfa..c7be6510993 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -1288,9 +1288,11 @@ static const struct wined3d_resource_ops buffer_resource_ops =
buffer_resource_sub_resource_unmap,
};
-static GLenum buffer_type_hint_from_bind_flags(const struct wined3d_gl_info *gl_info,
- unsigned int bind_flags)
+GLenum wined3d_buffer_gl_binding_from_bind_flags(const struct wined3d_gl_info *gl_info, uint32_t bind_flags)
{
+ if (!bind_flags)
+ return GL_PIXEL_UNPACK_BUFFER;
+
if (bind_flags == WINED3D_BIND_INDEX_BUFFER)
return GL_ELEMENT_ARRAY_BUFFER;
@@ -1536,7 +1538,7 @@ HRESULT wined3d_buffer_gl_init(struct wined3d_buffer_gl *buffer_gl, struct wined
TRACE("buffer_gl %p, device %p, desc %p, data %p, parent %p, parent_ops %p.\n",
buffer_gl, device, desc, data, parent, parent_ops);
- buffer_gl->buffer_type_hint = buffer_type_hint_from_bind_flags(gl_info, desc->bind_flags);
+ buffer_gl->buffer_type_hint = wined3d_buffer_gl_binding_from_bind_flags(gl_info, desc->bind_flags);
return wined3d_buffer_init(&buffer_gl->b, device, desc, data, parent, parent_ops, &wined3d_buffer_gl_ops);
}
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 8cb83ee884c..27898b8a112 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2354,7 +2354,7 @@ static void adapter_no3d_uninit_3d(struct wined3d_device *device)
}
static void *adapter_no3d_map_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, size_t size, GLenum binding, uint32_t flags)
+ const struct wined3d_bo_address *data, size_t size, uint32_t bind_flags, uint32_t map_flags)
{
if (data->buffer_object)
{
@@ -2366,7 +2366,7 @@ static void *adapter_no3d_map_bo_address(struct wined3d_context *context,
}
static void adapter_no3d_unmap_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, GLenum binding)
+ const struct wined3d_bo_address *data, uint32_t bind_flags)
{
if (data->buffer_object)
ERR("Unsupported buffer object %#lx.\n", data->buffer_object);
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 4a3ecf9863a..ded5b53c852 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -658,15 +658,15 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr
wined3d_texture_get_memory(dst_texture, 0, &dst_data, map_binding);
src = wined3d_context_map_bo_address(context, &src_data,
- src_texture->sub_resources[sub_resource_idx].size, GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_READ);
+ src_texture->sub_resources[sub_resource_idx].size, 0, WINED3D_MAP_READ);
dst = wined3d_context_map_bo_address(context, &dst_data,
- dst_texture->sub_resources[0].size, GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_WRITE);
+ dst_texture->sub_resources[0].size, 0, WINED3D_MAP_WRITE);
conv->convert(src, dst, src_row_pitch, dst_row_pitch, desc.width, desc.height);
wined3d_texture_invalidate_location(dst_texture, 0, ~map_binding);
- wined3d_context_unmap_bo_address(context, &dst_data, GL_PIXEL_UNPACK_BUFFER);
- wined3d_context_unmap_bo_address(context, &src_data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &dst_data, 0);
+ wined3d_context_unmap_bo_address(context, &src_data, 0);
}
else
{
@@ -1662,8 +1662,7 @@ static HRESULT surface_cpu_blt(struct wined3d_texture *dst_texture, unsigned int
wined3d_texture_get_pitch(dst_texture, texture_level, &dst_map.row_pitch, &dst_map.slice_pitch);
wined3d_texture_get_memory(dst_texture, dst_sub_resource_idx, &dst_data, map_binding);
dst_map.data = wined3d_context_map_bo_address(context, &dst_data,
- dst_texture->sub_resources[dst_sub_resource_idx].size,
- GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_READ | WINED3D_MAP_WRITE);
+ dst_texture->sub_resources[dst_sub_resource_idx].size, 0, WINED3D_MAP_READ | WINED3D_MAP_WRITE);
src_map = dst_map;
src_format = dst_texture->resource.format;
@@ -1698,7 +1697,7 @@ static HRESULT surface_cpu_blt(struct wined3d_texture *dst_texture, unsigned int
wined3d_texture_get_pitch(src_texture, texture_level, &src_map.row_pitch, &src_map.slice_pitch);
wined3d_texture_get_memory(src_texture, src_sub_resource_idx, &src_data, map_binding);
src_map.data = wined3d_context_map_bo_address(context, &src_data,
- src_texture->sub_resources[src_sub_resource_idx].size, GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_READ);
+ src_texture->sub_resources[src_sub_resource_idx].size, 0, WINED3D_MAP_READ);
map_binding = dst_texture->resource.map_binding;
texture_level = dst_sub_resource_idx % dst_texture->level_count;
@@ -1708,7 +1707,7 @@ static HRESULT surface_cpu_blt(struct wined3d_texture *dst_texture, unsigned int
wined3d_texture_get_pitch(dst_texture, texture_level, &dst_map.row_pitch, &dst_map.slice_pitch);
wined3d_texture_get_memory(dst_texture, dst_sub_resource_idx, &dst_data, map_binding);
dst_map.data = wined3d_context_map_bo_address(context, &dst_data,
- dst_texture->sub_resources[dst_sub_resource_idx].size, GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_WRITE);
+ dst_texture->sub_resources[dst_sub_resource_idx].size, 0, WINED3D_MAP_WRITE);
}
flags &= ~WINED3D_BLT_RAW;
@@ -2084,9 +2083,9 @@ error:
FIXME(" Unsupported flags %#x.\n", flags);
release:
- wined3d_context_unmap_bo_address(context, &dst_data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &dst_data, 0);
if (!same_sub_resource)
- wined3d_context_unmap_bo_address(context, &src_data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &src_data, 0);
if (SUCCEEDED(hr) && dst_texture->swapchain && dst_texture->swapchain->front_buffer == dst_texture)
{
SetRect(&dst_texture->swapchain->front_buffer_update,
@@ -2157,7 +2156,7 @@ static void surface_cpu_blt_colour_fill(struct wined3d_rendertarget_view *view,
wined3d_texture_get_pitch(texture, level, &map.row_pitch, &map.slice_pitch);
wined3d_texture_get_memory(texture, view->sub_resource_idx, &data, map_binding);
map.data = wined3d_context_map_bo_address(context, &data,
- texture->sub_resources[view->sub_resource_idx].size, GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_WRITE);
+ texture->sub_resources[view->sub_resource_idx].size, 0, WINED3D_MAP_WRITE);
map.data = (BYTE *)map.data
+ (box->front * map.slice_pitch)
+ ((box->top / view->format->block_height) * map.row_pitch)
@@ -2217,7 +2216,7 @@ static void surface_cpu_blt_colour_fill(struct wined3d_rendertarget_view *view,
memcpy(dst, map.data, w * h * bpp);
}
- wined3d_context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &data, 0);
context_release(context);
}
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 380aff5016f..7bb0dd0a10d 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -749,8 +749,7 @@ static void wined3d_texture_create_dc(void *object)
if (!context)
context = context_acquire(device, NULL, 0);
desc.pMemory = wined3d_context_map_bo_address(context, &data,
- texture->sub_resources[sub_resource_idx].size,
- GL_PIXEL_UNPACK_BUFFER, WINED3D_MAP_READ | WINED3D_MAP_WRITE);
+ texture->sub_resources[sub_resource_idx].size, 0, WINED3D_MAP_READ | WINED3D_MAP_WRITE);
}
else
{
@@ -818,7 +817,7 @@ static void wined3d_texture_destroy_dc(void *object)
if (data.buffer_object)
{
context = context_acquire(device, NULL, 0);
- wined3d_context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &data, 0);
context_release(context);
}
}
@@ -2962,8 +2961,7 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour
wined3d_texture_invalidate_location(texture, sub_resource_idx, ~resource->map_binding);
wined3d_texture_get_memory(texture, sub_resource_idx, &data, resource->map_binding);
- base_memory = wined3d_context_map_bo_address(context, &data,
- sub_resource->size, GL_PIXEL_UNPACK_BUFFER, flags);
+ base_memory = wined3d_context_map_bo_address(context, &data, sub_resource->size, 0, flags);
TRACE("Base memory pointer %p.\n", base_memory);
context_release(context);
@@ -3047,7 +3045,7 @@ static HRESULT texture_resource_sub_resource_unmap(struct wined3d_resource *reso
context = context_acquire(device, NULL, 0);
wined3d_texture_get_memory(texture, sub_resource_idx, &data, texture->resource.map_binding);
- wined3d_context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+ wined3d_context_unmap_bo_address(context, &data, 0);
context_release(context);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 58977f8cd12..3dc54696812 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2812,9 +2812,9 @@ struct wined3d_adapter_ops
HRESULT (*adapter_init_3d)(struct wined3d_device *device);
void (*adapter_uninit_3d)(struct wined3d_device *device);
void *(*adapter_map_bo_address)(struct wined3d_context *context,
- const struct wined3d_bo_address *data, size_t size, GLenum binding, uint32_t flags);
+ const struct wined3d_bo_address *data, size_t size, uint32_t bind_flags, uint32_t map_flags);
void (*adapter_unmap_bo_address)(struct wined3d_context *context,
- const struct wined3d_bo_address *data, GLenum binding);
+ const struct wined3d_bo_address *data, uint32_t bind_flags);
HRESULT (*adapter_create_swapchain)(struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain);
void (*adapter_destroy_swapchain)(struct wined3d_swapchain *swapchain);
@@ -4225,6 +4225,8 @@ static inline struct wined3d_buffer_gl *wined3d_buffer_gl(struct wined3d_buffer
return CONTAINING_RECORD(buffer, struct wined3d_buffer_gl, b);
}
+GLenum wined3d_buffer_gl_binding_from_bind_flags(const struct wined3d_gl_info *gl_info,
+ uint32_t bind_flags) DECLSPEC_HIDDEN;
void wined3d_buffer_gl_destroy_buffer_object(struct wined3d_buffer_gl *buffer_gl,
struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
HRESULT wined3d_buffer_gl_init(struct wined3d_buffer_gl *buffer_gl, struct wined3d_device *device,
@@ -5250,15 +5252,15 @@ static inline float wined3d_get_float_state(const struct wined3d_state *state, e
}
static inline void *wined3d_context_map_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, size_t size, GLenum binding, uint32_t flags)
+ const struct wined3d_bo_address *data, size_t size, uint32_t bind_flags, uint32_t map_flags)
{
- return context->device->adapter->adapter_ops->adapter_map_bo_address(context, data, size, binding, flags);
+ return context->device->adapter->adapter_ops->adapter_map_bo_address(context, data, size, bind_flags, map_flags);
}
static inline void wined3d_context_unmap_bo_address(struct wined3d_context *context,
- const struct wined3d_bo_address *data, GLenum binding)
+ const struct wined3d_bo_address *data, uint32_t bind_flags)
{
- return context->device->adapter->adapter_ops->adapter_unmap_bo_address(context, data, binding);
+ context->device->adapter->adapter_ops->adapter_unmap_bo_address(context, data, bind_flags);
}
/* The WNDCLASS-Name for the fake window which we use to retrieve the GL capabilities */
--
2.11.0