Суббуфер OpenCL не работает на OSX AMD GPU (отлично работает на Intel) - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующий код, который отлично работает при выборе Intel GPU в OSX.

            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.

...