@@ -4571,17 +4571,13 @@ class OpenCLAllocator : public MatAllocator
4571
4571
}
4572
4572
else
4573
4573
{
4574
- // CL_MEM_USE_HOST_PTR (nothing is required) and OTHER cases
4575
- if (u->flags & UMatData::USER_ALLOCATED)
4576
- {
4577
- cl_int retval = 0 ;
4578
- void * data = clEnqueueMapBuffer (q, (cl_mem)u->handle , CL_TRUE,
4579
- (CL_MAP_READ | CL_MAP_WRITE),
4580
- 0 , u->size , 0 , 0 , 0 , &retval);
4581
- CV_OclDbgAssert (retval == CL_SUCCESS);
4582
- CV_OclDbgAssert (clEnqueueUnmapMemObject (q, (cl_mem)u->handle , data, 0 , 0 , 0 ) == CL_SUCCESS);
4583
- CV_OclDbgAssert (clFinish (q) == CL_SUCCESS);
4584
- }
4574
+ cl_int retval = 0 ;
4575
+ void * data = clEnqueueMapBuffer (q, (cl_mem)u->handle , CL_TRUE,
4576
+ (CL_MAP_READ | CL_MAP_WRITE),
4577
+ 0 , u->size , 0 , 0 , 0 , &retval);
4578
+ CV_OclDbgAssert (retval == CL_SUCCESS);
4579
+ CV_OclDbgAssert (clEnqueueUnmapMemObject (q, (cl_mem)u->handle , data, 0 , 0 , 0 ) == CL_SUCCESS);
4580
+ CV_OclDbgAssert (clFinish (q) == CL_SUCCESS);
4585
4581
}
4586
4582
}
4587
4583
u->markHostCopyObsolete (false );
@@ -4686,8 +4682,6 @@ class OpenCLAllocator : public MatAllocator
4686
4682
4687
4683
cl_command_queue q = (cl_command_queue)Queue::getDefault ().ptr ();
4688
4684
4689
- // FIXIT Workaround for UMat synchronization issue
4690
- // if( u->refcount == 0 )
4691
4685
{
4692
4686
if ( !u->copyOnMap () )
4693
4687
{
@@ -4720,11 +4714,6 @@ class OpenCLAllocator : public MatAllocator
4720
4714
return ;
4721
4715
}
4722
4716
#endif
4723
- if (!u->hostCopyObsolete ()) // FIXIT Workaround for UMat synchronization issue
4724
- {
4725
- CV_Assert (u->data );
4726
- return ;
4727
- }
4728
4717
4729
4718
cl_int retval = 0 ;
4730
4719
u->data = (uchar*)clEnqueueMapBuffer (q, (cl_mem)u->handle , CL_TRUE,
@@ -4771,10 +4760,6 @@ class OpenCLAllocator : public MatAllocator
4771
4760
4772
4761
UMatDataAutoLock autolock (u);
4773
4762
4774
- // FIXIT Workaround for UMat synchronization issue
4775
- if (u->refcount > 0 )
4776
- return ;
4777
-
4778
4763
cl_command_queue q = (cl_command_queue)Queue::getDefault ().ptr ();
4779
4764
cl_int retval = 0 ;
4780
4765
if ( !u->copyOnMap () && u->deviceMemMapped () )
@@ -4800,7 +4785,8 @@ class OpenCLAllocator : public MatAllocator
4800
4785
u->allocatorFlags_ &= ~svm::OPENCL_SVM_BUFFER_MAP;
4801
4786
}
4802
4787
}
4803
- u->data = 0 ;
4788
+ if (u->refcount == 0 )
4789
+ u->data = 0 ;
4804
4790
u->markDeviceCopyObsolete (false );
4805
4791
u->markHostCopyObsolete (true );
4806
4792
return ;
@@ -4813,7 +4799,9 @@ class OpenCLAllocator : public MatAllocator
4813
4799
// required for multithreaded applications (see stitching test)
4814
4800
CV_OclDbgAssert (clFinish (q) == CL_SUCCESS);
4815
4801
}
4816
- u->data = 0 ;
4802
+
4803
+ if (u->refcount == 0 )
4804
+ u->data = 0 ;
4817
4805
}
4818
4806
else if ( u->copyOnMap () && u->deviceCopyObsolete () )
4819
4807
{
0 commit comments