[PATCH 1/5] wined3d: Explicitly calculate the sub-resource level in texture2d_create_dc().

Henri Verbeet hverbeet at codeweavers.com
Mon Mar 5 01:36:32 CST 2018


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/texture.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 1ffc2a6..8e8a4dc 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1211,12 +1211,12 @@ static void texture2d_create_dc(void *object)
 {
     struct wined3d_surface *surface = object;
     struct wined3d_context *context = NULL;
+    unsigned int sub_resource_idx, level;
     const struct wined3d_format *format;
     unsigned int row_pitch, slice_pitch;
     struct wined3d_texture *texture;
     struct wined3d_bo_address data;
     D3DKMT_CREATEDCFROMMEMORY desc;
-    unsigned int sub_resource_idx;
     struct wined3d_device *device;
     NTSTATUS status;
 
@@ -1224,6 +1224,7 @@ static void texture2d_create_dc(void *object)
 
     texture = surface->container;
     sub_resource_idx = surface_get_sub_resource_idx(surface);
+    level = sub_resource_idx % texture->level_count;
     device = texture->resource.device;
 
     format = texture->resource.format;
@@ -1238,7 +1239,7 @@ static void texture2d_create_dc(void *object)
 
     wined3d_texture_load_location(texture, sub_resource_idx, context, texture->resource.map_binding);
     wined3d_texture_invalidate_location(texture, sub_resource_idx, ~texture->resource.map_binding);
-    wined3d_texture_get_pitch(texture, surface->texture_level, &row_pitch, &slice_pitch);
+    wined3d_texture_get_pitch(texture, level, &row_pitch, &slice_pitch);
     wined3d_texture_get_memory(texture, sub_resource_idx, &data, texture->resource.map_binding);
     desc.pMemory = context_map_bo_address(context, &data,
             texture->sub_resources[sub_resource_idx].size,
@@ -1248,8 +1249,8 @@ static void texture2d_create_dc(void *object)
         context_release(context);
 
     desc.Format = format->ddi_format;
-    desc.Width = wined3d_texture_get_level_width(texture, surface->texture_level);
-    desc.Height = wined3d_texture_get_level_height(texture, surface->texture_level);
+    desc.Width = wined3d_texture_get_level_width(texture, level);
+    desc.Height = wined3d_texture_get_level_height(texture, level);
     desc.Pitch = row_pitch;
     desc.hDeviceDc = CreateCompatibleDC(NULL);
     desc.pColorTable = NULL;
-- 
2.1.4




More information about the wine-devel mailing list