OpenCL子缓冲区在OSX AMD GPU上不起作用(在Intel上工作正常)

时间:2018-12-12 19:28:12

标签: macos opencl amd

在OSX上选择Intel GPU时,我有以下代码可以完美工作。

            cl::Buffer targetPtrBuffer = .. a valid OpenCL object

            // CL Data
            cl_buffer_region kernelRegion;
            kernelRegion.origin = 0;
            kernelRegion.size = sizeof(float) * 288*160;
            cl::Buffer kernelBuffer = targetPtrBuffer.createSubBuffer(CL_MEM_READ_ONLY,
                                                                      CL_BUFFER_CREATE_TYPE_REGION,
                                                                      &kernelRegion);

            int targetWidth = 288;
            int targetHeight = 160;
            cv::Mat empty = cv::Mat(cv::Size(targetWidth, targetHeight),CV_32FC1,cv::Scalar(0));
            OpenCL::getInstance(upImpl->mGpuId)->getQueue().enqueueReadBuffer(kernelBuffer, CL_TRUE, 0,
                                                                         sizeof(float) *  targetWidth * targetHeight, &empty.at<float>(0));
            OpenCL::getInstance(upImpl->mGpuId)->getQueue().finish();
            op::log(std::to_string(cv::countNonZero(empty)));

但是,当我选择AMD GPU时,createSubBuffer不起作用,并且我得到一个全为0的空对象。这仅在OSX上发生,在Windows上可以正常工作。同样在OSX上,它可以与Intel GPU一起正常工作,但在AMD GPU上无法工作。

0 个答案:

没有答案