| 160 | } |
| 161 | |
| 162 | clfftStatus genTransposePrototype(const FFTGeneratedTransposeSquareAction::Signature & params, const size_t& lwSize, const std::string& dtPlanar, const std::string& dtComplex, |
| 163 | const std::string &funcName, std::stringstream& transKernel, std::string& dtInput, std::string& dtOutput) |
| 164 | { |
| 165 | |
| 166 | // Declare and define the function |
| 167 | clKernWrite(transKernel, 0) << "__attribute__(( reqd_work_group_size( " << lwSize << ", 1, 1 ) ))" << std::endl; |
| 168 | clKernWrite(transKernel, 0) << "kernel void" << std::endl; |
| 169 | |
| 170 | clKernWrite(transKernel, 0) << funcName << "( "; |
| 171 | |
| 172 | switch (params.fft_inputLayout) |
| 173 | { |
| 174 | case CLFFT_COMPLEX_INTERLEAVED: |
| 175 | dtInput = dtComplex; |
| 176 | dtOutput = dtComplex; |
| 177 | clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA"; |
| 178 | break; |
| 179 | case CLFFT_COMPLEX_PLANAR: |
| 180 | dtInput = dtPlanar; |
| 181 | dtOutput = dtPlanar; |
| 182 | clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA_R" << ", global " << dtInput << "* restrict inputA_I"; |
| 183 | break; |
| 184 | case CLFFT_HERMITIAN_INTERLEAVED: |
| 185 | case CLFFT_HERMITIAN_PLANAR: |
| 186 | return CLFFT_TRANSPOSED_NOTIMPLEMENTED; |
| 187 | case CLFFT_REAL: |
| 188 | dtInput = dtPlanar; |
| 189 | dtOutput = dtPlanar; |
| 190 | |
| 191 | clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA"; |
| 192 | break; |
| 193 | default: |
| 194 | return CLFFT_TRANSPOSED_NOTIMPLEMENTED; |
| 195 | } |
| 196 | |
| 197 | if (params.fft_placeness == CLFFT_OUTOFPLACE) |
| 198 | switch (params.fft_outputLayout) |
| 199 | { |
| 200 | case CLFFT_COMPLEX_INTERLEAVED: |
| 201 | dtInput = dtComplex; |
| 202 | dtOutput = dtComplex; |
| 203 | clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA"; |
| 204 | break; |
| 205 | case CLFFT_COMPLEX_PLANAR: |
| 206 | dtInput = dtPlanar; |
| 207 | dtOutput = dtPlanar; |
| 208 | clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA_R" << ", global " << dtOutput << "* restrict outputA_I"; |
| 209 | break; |
| 210 | case CLFFT_HERMITIAN_INTERLEAVED: |
| 211 | case CLFFT_HERMITIAN_PLANAR: |
| 212 | return CLFFT_TRANSPOSED_NOTIMPLEMENTED; |
| 213 | case CLFFT_REAL: |
| 214 | dtInput = dtPlanar; |
| 215 | dtOutput = dtPlanar; |
| 216 | clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA"; |
| 217 | break; |
| 218 | default: |
| 219 | return CLFFT_TRANSPOSED_NOTIMPLEMENTED; |
no outgoing calls
no test coverage detected