void verifyArguments(int nlhs, mxArray *plhs[], int nrhs, mxArray const *prhs[]){ /* Throw an error if the input is not a GPU array. */ // mexFunction arguments (Aval, rowInd, colInd, nnz, rows, cols, b, K) if (nrhs < 8){ cudaDeviceReset(); printUsage(); mexErrMsgIdAndTxt(errId, "Invalid Input argument: nrhs < 8"); } else if(!(mxIsGPUArray(prhs[0]))){ cudaDeviceReset(); printUsage(); mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[0] is not a GPU array"); } else if(!(mxIsGPUArray(prhs[1]))){ cudaDeviceReset(); printUsage(); mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[1] is not a GPU array"); } else if(!(mxIsGPUArray(prhs[2]))){ cudaDeviceReset(); printUsage(); mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[2] is not a GPU array"); } else if(!(mxIsGPUArray(prhs[6]))){ cudaDeviceReset(); printUsage(); mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[6] is not a GPU array"); } }
/////////////////////////////////////////////////////////////////////////// // Check inputs /////////////////////////////////////////////////////////////////////////// void checkInputs(int nrhs, const mxArray *prhs[]) { const mwSize * tdims, * fdims; // Check number of inputs if (nrhs != 2) { mexErrMsgTxt("Incorrect number of inputs. Function expects 2 inputs."); } // Inputs must be gpuArrays if (!mxIsGPUArray(prhs[0]) || !mxIsGPUArray(prhs[1])) { mexErrMsgTxt("Both input images must be stored in gpuArrays."); } const mxGPUArray * img1 = mxGPUCreateFromMxArray(prhs[0]); const mxGPUArray * img2 = mxGPUCreateFromMxArray(prhs[1]); // Check input dimensions tdims = mxGPUGetDimensions(img1); fdims = mxGPUGetDimensions(img2); mwSize ndimsImg1 = mxGPUGetNumberOfDimensions(img1); mwSize ndimsImg2 = mxGPUGetNumberOfDimensions(img2); // Clean-up headers. Data is not deleted. mxGPUDestroyGPUArray(img1); mxGPUDestroyGPUArray(img2); if (ndimsImg1 > 2) { mexErrMsgTxt("Incorrect number of dimensions. First input must be a matrix."); } if (ndimsImg2 > 2) { mexErrMsgTxt("Incorrect number of dimensions. Second input must be a matrix."); } if (tdims[0] > fdims[0]) { mexErrMsgTxt("Template should be smaller than image."); } if (tdims[1] > fdims[1]) { mexErrMsgTxt("Template should be smaller than image."); } if (!isGPUDataUINT8(prhs[0]) || !isGPUDataUINT8(prhs[1])) { mexErrMsgTxt("Input image must be a gpuArray with uint8 data."); } }