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