diff --git a/test_conformance/buffers/test_buffer_read.cpp b/test_conformance/buffers/test_buffer_read.cpp index 814dee45..1e2c0d6c 100644 --- a/test_conformance/buffers/test_buffer_read.cpp +++ b/test_conformance/buffers/test_buffer_read.cpp @@ -617,6 +617,11 @@ static int verify_read_struct(TestStruct *outptr, int n) return 0; } +static void callback_align_free(cl_mem memobj, void* userData) +{ + align_free(userData); +} + //----- the test functions static int test_buffer_read(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, @@ -700,11 +705,26 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context, return -1; } + err = clSetMemObjectDestructorCallback(buffer, callback_align_free, inptr[i]); + if (err != CL_SUCCESS) + { + print_error(err, " clCreateBuffer failed\n" ); + align_free( outptr[i] ); + align_free( inptr[i] ); + return -1; + } + + err = clSetMemObjectDestructorCallback(buffer, callback_align_free, outptr[i]); + if (err != CL_SUCCESS) + { + print_error(err, " clCreateBuffer failed\n" ); + align_free( outptr[i] ); + return -1; + } + err = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void *)&buffer); if ( err != CL_SUCCESS ){ print_error( err, "clSetKernelArg failed" ); - align_free( outptr[i] ); - align_free( inptr[i] ); return -1; } @@ -712,8 +732,6 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context, global_work_size, NULL, 0, NULL, NULL); if ( err != CL_SUCCESS ){ print_error( err, "clEnqueueNDRangeKernel failed" ); - align_free( outptr[i] ); - align_free( inptr[i] ); return -1; } @@ -722,8 +740,6 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context, NULL, NULL); if ( err != CL_SUCCESS ){ print_error( err, "clEnqueueReadBuffer failed" ); - align_free( outptr[i] ); - align_free( inptr[i] ); return -1; } @@ -742,9 +758,7 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context, NULL, NULL); if (err != CL_SUCCESS) { - print_error( err, "clEnqueueReadBuffer failed" ); - align_free( outptr[i] ); - align_free( inptr[i] ); + print_error( err, "clEnqueueReadBuffer failed" );; return -1; } @@ -755,11 +769,6 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context, else{ log_info( " %s%d test passed in-place readback\n", type, 1<