And some misc fixes.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/tests/d3dkmt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/tests/d3dkmt.c b/dlls/win32u/tests/d3dkmt.c index ba25286642e..e895b41cef7 100644 --- a/dlls/win32u/tests/d3dkmt.c +++ b/dlls/win32u/tests/d3dkmt.c @@ -4818,17 +4818,18 @@ static void test_shared_resources(void) { hr = ID3D12Device_OpenSharedHandle( d3d12_imp, handle, &IID_ID3D12Resource, (void **)&import ); ok_hr( S_OK, hr ); + ok_ptr( import, !=, NULL ); if (import) ok_ref( 0, IUnknown_Release( import ) );
if (name) { - HANDLE other; + HANDLE other = 0;
hr = ID3D12Device_OpenSharedHandleByName( d3d12_imp, name, GENERIC_ALL, &other ); ok_hr( S_OK, hr ); hr = ID3D12Device_OpenSharedHandle( d3d12_imp, other, &IID_ID3D12Resource, (void **)&import ); ok_hr( S_OK, hr ); - CloseHandle( other ); + if (other) CloseHandle( other );
if (import) ok_ref( 0, IUnknown_Release( import ) ); }
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/d3dkmt.c | 25 +++++++++++-------------- server/d3dkmt.c | 5 +---- server/protocol.def | 1 - 3 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 23640cb39be..2d3558570c4 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -202,23 +202,21 @@ static NTSTATUS d3dkmt_object_create( struct d3dkmt_object *object, BOOL shared, return status; }
-static NTSTATUS d3dkmt_object_update( enum d3dkmt_type type, D3DKMT_HANDLE global, HANDLE handle, - const void *runtime, UINT runtime_size ) +static NTSTATUS d3dkmt_object_update( struct d3dkmt_object *object, const void *runtime, UINT runtime_size ) { NTSTATUS status;
SERVER_START_REQ( d3dkmt_object_update ) { - req->type = type; - req->global = global; - req->handle = wine_server_obj_handle( handle ); + req->type = object->type; + req->global = object->global; if (runtime_size) wine_server_add_data( req, runtime, runtime_size ); status = wine_server_call( req ); } SERVER_END_REQ;
- if (status) WARN( "Failed to update global object %#x/%p, status %#x\n", global, handle, status ); - else TRACE( "Updated global object %#x/%p\n", global, handle ); + if (status) WARN( "Failed to update object %#x/%p global %#x, status %#x\n", object->local, object, object->global, status ); + else TRACE( "Updated object %#x/%p global %#x\n", object->local, object, object->global ); return status; }
@@ -455,19 +453,18 @@ NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromHdc( D3DKMT_OPENADAPTERFROMHDC *desc ) */ NTSTATUS WINAPI NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc ) { - HANDLE shared; - switch (desc->Type) { case D3DKMT_ESCAPE_UPDATE_RESOURCE_WINE: + { + struct d3dkmt_resource *resource; + TRACE( "D3DKMT_ESCAPE_UPDATE_RESOURCE_WINE hContext %#x, pPrivateDriverData %p, PrivateDriverDataSize %#x\n", desc->hContext, desc->pPrivateDriverData, desc->PrivateDriverDataSize );
- if (is_d3dkmt_global( desc->hContext )) shared = NULL; - else shared = UlongToHandle( desc->hContext ); - - return d3dkmt_object_update( D3DKMT_RESOURCE, shared ? 0 : desc->hContext, shared, - desc->pPrivateDriverData, desc->PrivateDriverDataSize ); + if (!(resource = get_d3dkmt_object( desc->hContext, D3DKMT_RESOURCE ))) return STATUS_INVALID_PARAMETER; + return d3dkmt_object_update( &resource->obj, desc->pPrivateDriverData, desc->PrivateDriverDataSize ); + }
default: FIXME( "(%p): stub\n", desc ); diff --git a/server/d3dkmt.c b/server/d3dkmt.c index c253740a7bb..827465613f7 100644 --- a/server/d3dkmt.c +++ b/server/d3dkmt.c @@ -398,10 +398,7 @@ DECL_HANDLER(d3dkmt_object_update) if (!(size = get_req_data_size())) runtime = NULL; else if (!(runtime = memdup( get_req_data(), size ))) return;
- if (req->global) object = d3dkmt_object_open( req->global, req->type ); - else object = d3dkmt_object_open_shared( req->handle, req->type ); - if (!object) goto done; - + if (!(object = d3dkmt_object_open( req->global, req->type ))) goto done; tmp = object->runtime; object->runtime = runtime; object->runtime_size = size; diff --git a/server/protocol.def b/server/protocol.def index 87b8730f92a..c44150fc4bf 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -4188,7 +4188,6 @@ enum inproc_sync_type @REQ(d3dkmt_object_update) unsigned int type; /* d3dkmt object type */ d3dkmt_handle_t global; /* global d3dkmt handle */ - obj_handle_t handle; /* shared object handle */ VARARG(runtime,bytes); /* client runtime data */ @END
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index cb6684fc7f6..a42e9f86176 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -227,8 +227,8 @@ static void init_shared_resource_path( const WCHAR *name, UNICODE_STRING *str ) str->Length = str->MaximumLength - sizeof(WCHAR);
memcpy( str->Buffer + str->Length / sizeof(WCHAR), name, (len + 1) * sizeof(WCHAR) ); - str->MaximumLength += len; - str->Length += len; + str->MaximumLength += len * sizeof(WCHAR); + str->Length += len * sizeof(WCHAR); }
static HANDLE create_shared_resource_handle( D3DKMT_HANDLE local, const VkExportMemoryWin32HandleInfoKHR *info )