@@ -95,7 +95,13 @@ void *OCLRT::Context::getOsContextInfo(cl_context_info ¶mName, size_t *srcPa
9595
9696cl_int CL_API_CALL clGetDeviceIDsFromDX9INTEL (cl_platform_id platform, cl_dx9_device_source_intel dx9DeviceSource, void *dx9Object,
9797 cl_dx9_device_set_intel dx9DeviceSet, cl_uint numEntries, cl_device_id *devices, cl_uint *numDevices) {
98- cl_device_id device = castToObject<Platform>(platform)->getDevice (0 );
98+ Platform *platformInternal = nullptr ;
99+ auto retVal = validateObjects (WithCastToInternal (platform, &platformInternal));
100+ if (retVal != CL_SUCCESS) {
101+ return retVal;
102+ }
103+ cl_device_id device = platformInternal->getDevice (0 );
104+
99105 GetInfoHelper::set (devices, device);
100106 GetInfoHelper::set (numDevices, 1u );
101107 return CL_SUCCESS;
@@ -122,14 +128,25 @@ cl_mem CL_API_CALL clCreateFromDX9MediaSurfaceINTEL(cl_context context, cl_mem_f
122128
123129cl_int CL_API_CALL clEnqueueAcquireDX9ObjectsINTEL (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
124130 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
125- auto cmdQ = castToObject<CommandQueue>(commandQueue);
131+ CommandQueue *cmdQ = nullptr ;
132+
133+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
134+ if (retVal != CL_SUCCESS) {
135+ return retVal;
136+ }
137+
126138 return cmdQ->enqueueAcquireSharedObjects (numObjects, memObjects, numEventsInWaitList,
127139 eventWaitList, event, CL_COMMAND_ACQUIRE_DX9_OBJECTS_INTEL);
128140}
129141
130142cl_int CL_API_CALL clEnqueueReleaseDX9ObjectsINTEL (cl_command_queue commandQueue, cl_uint numObjects, cl_mem *memObjects,
131143 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
132- auto cmdQ = castToObject<CommandQueue>(commandQueue);
144+ CommandQueue *cmdQ = nullptr ;
145+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
146+ if (retVal != CL_SUCCESS) {
147+ return retVal;
148+ }
149+
133150 for (unsigned int object = 0 ; object < numObjects; object++) {
134151 auto memObject = castToObject<MemObj>(memObjects[object]);
135152 if (!static_cast <D3DSharing<D3DTypesHelper::D3D9> *>(memObject->peekSharingHandler ())->isSharedResource ()) {
@@ -138,8 +155,8 @@ cl_int CL_API_CALL clEnqueueReleaseDX9ObjectsINTEL(cl_command_queue commandQueue
138155 }
139156 }
140157
141- auto retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
142- eventWaitList, event, CL_COMMAND_RELEASE_DX9_OBJECTS_INTEL);
158+ retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
159+ eventWaitList, event, CL_COMMAND_RELEASE_DX9_OBJECTS_INTEL);
143160 if (!cmdQ->getContext ().getInteropUserSyncEnabled ()) {
144161 cmdQ->finish (true );
145162 }
@@ -150,7 +167,13 @@ cl_int CL_API_CALL clGetDeviceIDsFromDX9MediaAdapterKHR(cl_platform_id platform,
150167 cl_dx9_media_adapter_type_khr *mediaAdapterType, void *mediaAdapters,
151168 cl_dx9_media_adapter_set_khr mediaAdapterSet, cl_uint numEntries,
152169 cl_device_id *devices, cl_uint *numDevices) {
153- cl_device_id device = castToObject<Platform>(platform)->getDevice (0 );
170+ Platform *platformInternal = nullptr ;
171+ auto retVal = validateObjects (WithCastToInternal (platform, &platformInternal));
172+ if (retVal != CL_SUCCESS) {
173+ return retVal;
174+ }
175+ cl_device_id device = platformInternal->getDevice (0 );
176+
154177 GetInfoHelper::set (devices, device);
155178 GetInfoHelper::set (numDevices, 1u );
156179 return CL_SUCCESS;
@@ -167,14 +190,24 @@ cl_mem CL_API_CALL clCreateFromDX9MediaSurfaceKHR(cl_context context, cl_mem_fla
167190
168191cl_int CL_API_CALL clEnqueueAcquireDX9MediaSurfacesKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
169192 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
170- auto cmdQ = castToObject<CommandQueue>(commandQueue);
193+ CommandQueue *cmdQ = nullptr ;
194+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
195+ if (retVal != CL_SUCCESS) {
196+ return retVal;
197+ }
171198 return cmdQ->enqueueAcquireSharedObjects (numObjects, memObjects, numEventsInWaitList,
172199 eventWaitList, event, CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR);
173200}
174201
175202cl_int CL_API_CALL clEnqueueReleaseDX9MediaSurfacesKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
176203 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
177- auto cmdQ = castToObject<CommandQueue>(commandQueue);
204+ CommandQueue *cmdQ = nullptr ;
205+
206+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
207+ if (retVal != CL_SUCCESS) {
208+ return retVal;
209+ }
210+
178211 for (unsigned int object = 0 ; object < numObjects; object++) {
179212 auto memObject = castToObject<MemObj>(memObjects[object]);
180213 if (!static_cast <D3DSharing<D3DTypesHelper::D3D9> *>(memObject->peekSharingHandler ())->isSharedResource ()) {
@@ -183,8 +216,8 @@ cl_int CL_API_CALL clEnqueueReleaseDX9MediaSurfacesKHR(cl_command_queue commandQ
183216 }
184217 }
185218
186- auto retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
187- eventWaitList, event, CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR);
219+ retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
220+ eventWaitList, event, CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR);
188221 if (!cmdQ->getContext ().getInteropUserSyncEnabled ()) {
189222 cmdQ->finish (true );
190223 }
@@ -201,11 +234,17 @@ cl_int CL_API_CALL clGetDeviceIDsFromD3D10KHR(cl_platform_id platform, cl_d3d10_
201234 cl_uint localNumDevices = 0 ;
202235 cl_int retCode = CL_SUCCESS;
203236
237+ Platform *platformInternal = nullptr ;
238+ auto retVal = validateObjects (WithCastToInternal (platform, &platformInternal));
239+ if (retVal != CL_SUCCESS) {
240+ return retVal;
241+ }
242+
204243 if (DebugManager.injectFcn ) {
205244 sharingFcns.getDxgiDescFcn = (D3DSharingFunctions<D3DTypesHelper::D3D10>::GetDxgiDescFcn)DebugManager.injectFcn ;
206245 }
207246
208- cl_device_id device = castToObject<Platform>(platform) ->getDevice (0 );
247+ cl_device_id device = platformInternal ->getDevice (0 );
209248
210249 switch (d3dDeviceSource) {
211250 case CL_D3D10_DEVICE_KHR:
@@ -244,7 +283,13 @@ cl_int CL_API_CALL clGetDeviceIDsFromD3D10KHR(cl_platform_id platform, cl_d3d10_
244283
245284cl_mem CL_API_CALL clCreateFromD3D10BufferKHR (cl_context context, cl_mem_flags flags, ID3D10Buffer *resource, cl_int *errcodeRet) {
246285 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
247- auto ctx = castToObject<Context>(context);
286+ Context *ctx = nullptr ;
287+
288+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
289+
290+ if (err.localErrcode != CL_SUCCESS) {
291+ return nullptr ;
292+ }
248293
249294 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D10>>()->isTracked (resource, 0 )) {
250295 err.set (CL_INVALID_D3D10_RESOURCE_KHR);
@@ -256,7 +301,13 @@ cl_mem CL_API_CALL clCreateFromD3D10BufferKHR(cl_context context, cl_mem_flags f
256301cl_mem CL_API_CALL clCreateFromD3D10Texture2DKHR (cl_context context, cl_mem_flags flags, ID3D10Texture2D *resource,
257302 UINT subresource, cl_int *errcodeRet) {
258303 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
259- auto ctx = castToObject<Context>(context);
304+ Context *ctx = nullptr ;
305+
306+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
307+
308+ if (err.localErrcode != CL_SUCCESS) {
309+ return nullptr ;
310+ }
260311
261312 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D10>>()->isTracked (resource, subresource)) {
262313 err.set (CL_INVALID_D3D10_RESOURCE_KHR);
@@ -268,7 +319,13 @@ cl_mem CL_API_CALL clCreateFromD3D10Texture2DKHR(cl_context context, cl_mem_flag
268319cl_mem CL_API_CALL clCreateFromD3D10Texture3DKHR (cl_context context, cl_mem_flags flags, ID3D10Texture3D *resource,
269320 UINT subresource, cl_int *errcodeRet) {
270321 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
271- auto ctx = castToObject<Context>(context);
322+ Context *ctx = nullptr ;
323+
324+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
325+
326+ if (err.localErrcode != CL_SUCCESS) {
327+ return nullptr ;
328+ }
272329
273330 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D10>>()->isTracked (resource, subresource)) {
274331 err.set (CL_INVALID_D3D10_RESOURCE_KHR);
@@ -279,9 +336,19 @@ cl_mem CL_API_CALL clCreateFromD3D10Texture3DKHR(cl_context context, cl_mem_flag
279336
280337cl_int CL_API_CALL clEnqueueAcquireD3D10ObjectsKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
281338 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
282- auto cmdQ = castToObject<CommandQueue>(commandQueue);
339+ CommandQueue *cmdQ = nullptr ;
340+
341+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
342+ if (retVal != CL_SUCCESS) {
343+ return retVal;
344+ }
345+
283346 for (unsigned int object = 0 ; object < numObjects; object++) {
284- if (castToObject<MemObj>(memObjects[object])->acquireCount >= 1 ) {
347+ auto memObj = castToObject<MemObj>(memObjects[object]);
348+ if (memObj == nullptr ) {
349+ return CL_INVALID_MEM_OBJECT;
350+ }
351+ if (memObj->acquireCount >= 1 ) {
285352 return CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR;
286353 }
287354 }
@@ -291,9 +358,18 @@ cl_int CL_API_CALL clEnqueueAcquireD3D10ObjectsKHR(cl_command_queue commandQueue
291358
292359cl_int CL_API_CALL clEnqueueReleaseD3D10ObjectsKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
293360 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
294- auto cmdQ = castToObject<CommandQueue>(commandQueue);
361+ CommandQueue *cmdQ = nullptr ;
362+
363+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
364+ if (retVal != CL_SUCCESS) {
365+ return retVal;
366+ }
367+
295368 for (unsigned int object = 0 ; object < numObjects; object++) {
296369 auto memObject = castToObject<MemObj>(memObjects[object]);
370+ if (memObject == nullptr ) {
371+ return CL_INVALID_MEM_OBJECT;
372+ }
297373 if (memObject->acquireCount == 0 ) {
298374 return CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR;
299375 }
@@ -303,8 +379,8 @@ cl_int CL_API_CALL clEnqueueReleaseD3D10ObjectsKHR(cl_command_queue commandQueue
303379 }
304380 }
305381
306- auto retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
307- eventWaitList, event, CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR);
382+ retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
383+ eventWaitList, event, CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR);
308384 if (!cmdQ->getContext ().getInteropUserSyncEnabled ()) {
309385 cmdQ->finish (true );
310386 }
@@ -321,11 +397,17 @@ cl_int CL_API_CALL clGetDeviceIDsFromD3D11KHR(cl_platform_id platform, cl_d3d11_
321397 cl_uint localNumDevices = 0 ;
322398 cl_int retCode = CL_SUCCESS;
323399
400+ Platform *platformInternal = nullptr ;
401+ auto retVal = validateObjects (WithCastToInternal (platform, &platformInternal));
402+ if (retVal != CL_SUCCESS) {
403+ return retVal;
404+ }
405+
324406 if (DebugManager.injectFcn ) {
325407 sharingFcns.getDxgiDescFcn = (D3DSharingFunctions<D3DTypesHelper::D3D11>::GetDxgiDescFcn)DebugManager.injectFcn ;
326408 }
327409
328- cl_device_id device = castToObject<Platform>(platform) ->getDevice (0 );
410+ cl_device_id device = platformInternal ->getDevice (0 );
329411
330412 switch (d3dDeviceSource) {
331413 case CL_D3D11_DEVICE_KHR:
@@ -364,7 +446,12 @@ cl_int CL_API_CALL clGetDeviceIDsFromD3D11KHR(cl_platform_id platform, cl_d3d11_
364446
365447cl_mem CL_API_CALL clCreateFromD3D11BufferKHR (cl_context context, cl_mem_flags flags, ID3D11Buffer *resource, cl_int *errcodeRet) {
366448 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
367- auto ctx = castToObject<Context>(context);
449+ Context *ctx = nullptr ;
450+
451+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
452+ if (err.localErrcode != CL_SUCCESS) {
453+ return nullptr ;
454+ }
368455
369456 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D11>>()->isTracked (resource, 0 )) {
370457 err.set (CL_INVALID_D3D11_RESOURCE_KHR);
@@ -376,7 +463,12 @@ cl_mem CL_API_CALL clCreateFromD3D11BufferKHR(cl_context context, cl_mem_flags f
376463cl_mem CL_API_CALL clCreateFromD3D11Texture2DKHR (cl_context context, cl_mem_flags flags, ID3D11Texture2D *resource,
377464 UINT subresource, cl_int *errcodeRet) {
378465 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
379- auto ctx = castToObject<Context>(context);
466+ Context *ctx = nullptr ;
467+
468+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
469+ if (err.localErrcode != CL_SUCCESS) {
470+ return nullptr ;
471+ }
380472
381473 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D11>>()->isTracked (resource, subresource)) {
382474 err.set (CL_INVALID_D3D11_RESOURCE_KHR);
@@ -388,7 +480,13 @@ cl_mem CL_API_CALL clCreateFromD3D11Texture2DKHR(cl_context context, cl_mem_flag
388480cl_mem CL_API_CALL clCreateFromD3D11Texture3DKHR (cl_context context, cl_mem_flags flags, ID3D11Texture3D *resource,
389481 UINT subresource, cl_int *errcodeRet) {
390482 ErrorCodeHelper err (errcodeRet, CL_SUCCESS);
391- auto ctx = castToObject<Context>(context);
483+ Context *ctx = nullptr ;
484+
485+ err.set (validateObjects (WithCastToInternal (context, &ctx)));
486+
487+ if (err.localErrcode != CL_SUCCESS) {
488+ return nullptr ;
489+ }
392490
393491 if (ctx->getSharing <D3DSharingFunctions<D3DTypesHelper::D3D11>>()->isTracked (resource, subresource)) {
394492 err.set (CL_INVALID_D3D11_RESOURCE_KHR);
@@ -399,9 +497,19 @@ cl_mem CL_API_CALL clCreateFromD3D11Texture3DKHR(cl_context context, cl_mem_flag
399497
400498cl_int CL_API_CALL clEnqueueAcquireD3D11ObjectsKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
401499 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
402- auto cmdQ = castToObject<CommandQueue>(commandQueue);
500+ CommandQueue *cmdQ = nullptr ;
501+
502+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
503+ if (retVal != CL_SUCCESS) {
504+ return retVal;
505+ }
506+
403507 for (unsigned int object = 0 ; object < numObjects; object++) {
404- if (castToObject<MemObj>(memObjects[object])->acquireCount >= 1 ) {
508+ auto memObj = castToObject<MemObj>(memObjects[object]);
509+ if (memObj == nullptr ) {
510+ return CL_INVALID_MEM_OBJECT;
511+ }
512+ if (memObj->acquireCount >= 1 ) {
405513 return CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR;
406514 }
407515 }
@@ -411,9 +519,18 @@ cl_int CL_API_CALL clEnqueueAcquireD3D11ObjectsKHR(cl_command_queue commandQueue
411519
412520cl_int CL_API_CALL clEnqueueReleaseD3D11ObjectsKHR (cl_command_queue commandQueue, cl_uint numObjects, const cl_mem *memObjects,
413521 cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) {
414- auto cmdQ = castToObject<CommandQueue>(commandQueue);
522+ CommandQueue *cmdQ = nullptr ;
523+
524+ auto retVal = validateObjects (WithCastToInternal (commandQueue, &cmdQ));
525+ if (retVal != CL_SUCCESS) {
526+ return retVal;
527+ }
528+
415529 for (unsigned int object = 0 ; object < numObjects; object++) {
416530 auto memObject = castToObject<MemObj>(memObjects[object]);
531+ if (memObject == nullptr ) {
532+ return CL_INVALID_MEM_OBJECT;
533+ }
417534 if (memObject->acquireCount == 0 ) {
418535 return CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR;
419536 }
@@ -423,8 +540,8 @@ cl_int CL_API_CALL clEnqueueReleaseD3D11ObjectsKHR(cl_command_queue commandQueue
423540 }
424541 }
425542
426- auto retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
427- eventWaitList, event, CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR);
543+ retVal = cmdQ->enqueueReleaseSharedObjects (numObjects, memObjects, numEventsInWaitList,
544+ eventWaitList, event, CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR);
428545 if (!cmdQ->getContext ().getInteropUserSyncEnabled ()) {
429546 cmdQ->finish (true );
430547 }
0 commit comments