Nikolay Sivov : d2d1: Create staging texture with read access for bitmaps with D2D1_BITMAP_OPTIONS_CPU_READ.

Alexandre Julliard julliard at winehq.org
Mon May 30 15:34:57 CDT 2022


Module: wine
Branch: master
Commit: a95ed154470649a3518ff6ce7f287205f503453f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a95ed154470649a3518ff6ce7f287205f503453f

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun May 29 13:17:22 2022 +0300

d2d1: Create staging texture with read access for bitmaps with D2D1_BITMAP_OPTIONS_CPU_READ.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>

---

 dlls/d2d1/bitmap.c     | 4 ++++
 dlls/d2d1/tests/d2d1.c | 4 +---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
index 971e3c7ff6b..8386f703b46 100644
--- a/dlls/d2d1/bitmap.c
+++ b/dlls/d2d1/bitmap.c
@@ -374,12 +374,16 @@ HRESULT d2d_bitmap_create(struct d2d_device_context *context, D2D1_SIZE_U size,
     texture_desc.SampleDesc.Count = 1;
     texture_desc.SampleDesc.Quality = 0;
     texture_desc.Usage = D3D11_USAGE_DEFAULT;
+    if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CPU_READ)
+        texture_desc.Usage = D3D11_USAGE_STAGING;
     texture_desc.BindFlags = 0;
     if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_TARGET)
         texture_desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
     if (!(desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CANNOT_DRAW))
         texture_desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
     texture_desc.CPUAccessFlags = 0;
+    if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CPU_READ)
+        texture_desc.CPUAccessFlags |= D3D11_CPU_ACCESS_READ;
     texture_desc.MiscFlags = 0;
     if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE)
         texture_desc.MiscFlags |= D3D11_RESOURCE_MISC_GDI_COMPATIBLE;
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index e8f07976d54..0069cf746bb 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -11709,10 +11709,8 @@ static void test_bitmap_map(BOOL d3d11)
         hr = IDXGISurface_QueryInterface(surface, &IID_ID3D11Texture2D, (void **)&texture);
         ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
         ID3D11Texture2D_GetDesc(texture, &texture_desc);
-        todo_wine
         ok(texture_desc.Usage == D3D11_USAGE_STAGING, "Unexpected usage %u.\n", texture_desc.Usage);
         ok(!texture_desc.BindFlags, "Unexpected bind flags %#x.\n", texture_desc.BindFlags);
-        todo_wine
         ok(texture_desc.CPUAccessFlags == D3D11_CPU_ACCESS_READ, "Unexpected CPU access flags %#x.\n",
                 texture_desc.CPUAccessFlags);
         ok(!texture_desc.MiscFlags, "Unexpected misc flags %#x.\n", texture_desc.MiscFlags);
@@ -11822,7 +11820,7 @@ static void test_bitmap_create(BOOL d3d11)
         bitmap_desc.bitmapOptions = invalid_options[i].options;
         bitmap_desc.colorContext = NULL;
         hr = ID2D1DeviceContext_CreateBitmap(ctx.context, size, NULL, 0, &bitmap_desc, &bitmap);
-        todo_wine
+        todo_wine_if(i != 1)
         ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
         if (SUCCEEDED(hr))
             ID2D1Bitmap1_Release(bitmap);




More information about the wine-cvs mailing list