@@ -36,7 +36,9 @@ D3DSurface::D3DSurface(Context *context, cl_dx9_surface_info_khr *surfaceInfo, D
3636 : D3DSharing(context, surfaceInfo->resource, surfaceStaging, plane, sharedResource), adapterType(adapterType),
3737 surfaceInfo(*surfaceInfo), lockable(lockable), plane(plane), oclPlane(oclPlane), d3d9Surface(surfaceInfo->resource),
3838 d3d9SurfaceStaging(surfaceStaging) {
39- resourceDevice = sharingFunctions->getDevice ();
39+ if (sharingFunctions) {
40+ resourceDevice = sharingFunctions->getDevice ();
41+ }
4042};
4143
4244Image *D3DSurface::create (Context *context, cl_dx9_surface_info_khr *surfaceInfo, cl_mem_flags flags,
@@ -125,7 +127,7 @@ void D3DSurface::synchronizeObject(UpdateData *updateData) {
125127 sharingFunctions->lockRect (d3d9SurfaceStaging, &lockedRect, D3DLOCK_READONLY);
126128 }
127129
128- auto image = castToObject <Image>(updateData->memObject );
130+ auto image = castToObjectOrAbort <Image>(updateData->memObject );
129131 auto sys = lockedRect.pBits ;
130132 auto gpu = context->getMemoryManager ()->lockResource (image->getGraphicsAllocation ());
131133 auto pitch = static_cast <ULONG>(lockedRect.Pitch );
@@ -148,6 +150,11 @@ void D3DSurface::synchronizeObject(UpdateData *updateData) {
148150
149151void D3DSurface::releaseResource (MemObj *memObject) {
150152 D3DLOCKED_RECT lockedRect = {};
153+ auto image = castToObject<Image>(memObject);
154+ if (!image) {
155+ return ;
156+ }
157+
151158 sharingFunctions->setDevice (resourceDevice);
152159 if (!sharedResource) {
153160 if (lockable) {
@@ -156,7 +163,6 @@ void D3DSurface::releaseResource(MemObj *memObject) {
156163 sharingFunctions->lockRect (d3d9SurfaceStaging, &lockedRect, 0 );
157164 }
158165
159- auto image = castToObject<Image>(memObject);
160166 auto sys = lockedRect.pBits ;
161167 auto gpu = context->getMemoryManager ()->lockResource (image->getGraphicsAllocation ());
162168 auto pitch = static_cast <ULONG>(lockedRect.Pitch );
@@ -306,3 +312,12 @@ cl_int D3DSurface::findImgFormat(D3DFORMAT d3dFormat, cl_image_format &imgFormat
306312 }
307313 return CL_SUCCESS;
308314}
315+
316+ int D3DSurface::validateUpdateData (UpdateData *updateData) {
317+ UNRECOVERABLE_IF (updateData == nullptr );
318+ auto image = castToObject<Image>(updateData->memObject );
319+ if (!image) {
320+ return CL_INVALID_MEM_OBJECT;
321+ }
322+ return CL_SUCCESS;
323+ }
0 commit comments