| 126 | } |
| 127 | |
| 128 | int test_buffer_kernel(cl_context context, cl_command_queue queue, ExplicitType vecType, size_t vecSize, int numElements, int validate_only, MTdata d) |
| 129 | { |
| 130 | clProgramWrapper program; |
| 131 | clKernelWrapper kernel; |
| 132 | clMemWrapper streams[ 3 ]; |
| 133 | size_t dataSize = numElements * 16 * sizeof(cl_long); |
| 134 | #if !(defined(_WIN32) && defined(_MSC_VER)) |
| 135 | cl_long inData[numElements * 16], outDataCL[numElements * 16], outDataGL[ numElements * 16 ]; |
| 136 | #else |
| 137 | cl_long* inData = (cl_long*)_malloca(dataSize); |
| 138 | cl_long* outDataCL = (cl_long*)_malloca(dataSize); |
| 139 | cl_long* outDataGL = (cl_long*)_malloca(dataSize); |
| 140 | #endif |
| 141 | glBufferWrapper inGLBuffer, outGLBuffer; |
| 142 | int i; |
| 143 | size_t bufferSize; |
| 144 | |
| 145 | int error; |
| 146 | size_t threads[1], localThreads[1]; |
| 147 | char kernelSource[10240]; |
| 148 | char *programPtr; |
| 149 | char sizeName[4]; |
| 150 | |
| 151 | /* Create the source */ |
| 152 | if( vecSize == 1 ) |
| 153 | sizeName[ 0 ] = 0; |
| 154 | else |
| 155 | sprintf( sizeName, "%d", (int)vecSize ); |
| 156 | |
| 157 | sprintf( kernelSource, bufferKernelPattern, get_explicit_type_name( vecType ), sizeName, |
| 158 | get_explicit_type_name( vecType ), sizeName, |
| 159 | get_explicit_type_name( vecType ), sizeName, |
| 160 | get_explicit_type_name( vecType ), sizeName, |
| 161 | get_explicit_type_name( vecType ), sizeName ); |
| 162 | |
| 163 | /* Create kernels */ |
| 164 | programPtr = kernelSource; |
| 165 | if( create_single_kernel_helper( context, &program, &kernel, 1, (const char **)&programPtr, "sample_test" ) ) |
| 166 | { |
| 167 | return -1; |
| 168 | } |
| 169 | |
| 170 | bufferSize = numElements * vecSize * get_explicit_type_size( vecType ); |
| 171 | |
| 172 | /* Generate some almost-random input data */ |
| 173 | gen_input_data( vecType, vecSize * numElements, d, inData ); |
| 174 | memset( outDataCL, 0, dataSize ); |
| 175 | memset( outDataGL, 0, dataSize ); |
| 176 | |
| 177 | /* Generate some GL buffers to go against */ |
| 178 | glGenBuffers( 1, &inGLBuffer ); |
| 179 | glGenBuffers( 1, &outGLBuffer ); |
| 180 | |
| 181 | glBindBuffer( GL_ARRAY_BUFFER, inGLBuffer ); |
| 182 | glBufferData( GL_ARRAY_BUFFER, bufferSize, inData, GL_STATIC_DRAW ); |
| 183 | |
| 184 | // Note: we need to bind the output buffer, even though we don't care about its values yet, |
| 185 | // because CL needs it to get the buffer size |
no test coverage detected