mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-25 16:29:03 +00:00
Use clSetMemObjectDestructorCallback for CL_MEM_USE_HOST_PTR
This commit is contained in:
@@ -617,6 +617,11 @@ static int verify_read_struct(TestStruct *outptr, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void callback_align_free(cl_mem memobj, void* userData)
|
||||||
|
{
|
||||||
|
align_free(userData);
|
||||||
|
}
|
||||||
|
|
||||||
//----- the test functions
|
//----- the test functions
|
||||||
static int test_buffer_read(cl_device_id deviceID, cl_context context,
|
static int test_buffer_read(cl_device_id deviceID, cl_context context,
|
||||||
cl_command_queue queue, int num_elements,
|
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;
|
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);
|
err = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void *)&buffer);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clSetKernelArg failed" );
|
print_error( err, "clSetKernelArg failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
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);
|
global_work_size, NULL, 0, NULL, NULL);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueNDRangeKernel failed" );
|
print_error( err, "clEnqueueNDRangeKernel failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,8 +740,6 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context,
|
|||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueReadBuffer failed" );
|
print_error( err, "clEnqueueReadBuffer failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,9 +758,7 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context,
|
|||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if (err != CL_SUCCESS)
|
if (err != CL_SUCCESS)
|
||||||
{
|
{
|
||||||
print_error( err, "clEnqueueReadBuffer failed" );
|
print_error( err, "clEnqueueReadBuffer failed" );;
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,11 +769,6 @@ static int test_buffer_read(cl_device_id deviceID, cl_context context,
|
|||||||
else{
|
else{
|
||||||
log_info( " %s%d test passed in-place readback\n", type, 1<<i );
|
log_info( " %s%d test passed in-place readback\n", type, 1<<i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// cleanup
|
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
}
|
}
|
||||||
} // mem flag
|
} // mem flag
|
||||||
|
|
||||||
@@ -851,19 +860,32 @@ static int test_buffer_read_async(cl_device_id deviceID, cl_context context,
|
|||||||
return -1;
|
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);
|
err = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void *)&buffer);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clSetKernelArg failed" );
|
print_error( err, "clSetKernelArg failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = clEnqueueNDRangeKernel( queue, kernel[i], 1, NULL, global_work_size, NULL, 0, NULL, NULL );
|
err = clEnqueueNDRangeKernel( queue, kernel[i], 1, NULL, global_work_size, NULL, 0, NULL, NULL );
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueNDRangeKernel failed" );
|
print_error( err, "clEnqueueNDRangeKernel failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -879,15 +901,11 @@ static int test_buffer_read_async(cl_device_id deviceID, cl_context context,
|
|||||||
#endif
|
#endif
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueReadBuffer failed" );
|
print_error( err, "clEnqueueReadBuffer failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
err = clWaitForEvents(1, &event );
|
err = clWaitForEvents(1, &event );
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clWaitForEvents() failed" );
|
print_error( err, "clWaitForEvents() failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -900,10 +918,6 @@ static int test_buffer_read_async(cl_device_id deviceID, cl_context context,
|
|||||||
log_info(" %s%d test passed. cl_mem_flags src: %s\n", type,
|
log_info(" %s%d test passed. cl_mem_flags src: %s\n", type,
|
||||||
1 << i, flag_set_names[src_flag_id]);
|
1 << i, flag_set_names[src_flag_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanup
|
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
}
|
}
|
||||||
} // mem flags
|
} // mem flags
|
||||||
|
|
||||||
@@ -993,19 +1007,32 @@ static int test_buffer_read_array_barrier(
|
|||||||
return -1;
|
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);
|
err = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void *)&buffer);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clSetKernelArgs failed" );
|
print_error( err, "clSetKernelArgs failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = clEnqueueNDRangeKernel( queue, kernel[i], 1, NULL, global_work_size, NULL, 0, NULL, NULL );
|
err = clEnqueueNDRangeKernel( queue, kernel[i], 1, NULL, global_work_size, NULL, 0, NULL, NULL );
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueNDRangeKernel failed" );
|
print_error( err, "clEnqueueNDRangeKernel failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1021,22 +1048,17 @@ static int test_buffer_read_array_barrier(
|
|||||||
#endif
|
#endif
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueReadBuffer failed" );
|
print_error( err, "clEnqueueReadBuffer failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
err = clEnqueueBarrierWithWaitList(queue, 0, NULL, NULL);
|
err = clEnqueueBarrierWithWaitList(queue, 0, NULL, NULL);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clEnqueueBarrierWithWaitList() failed" );
|
print_error( err, "clEnqueueBarrierWithWaitList() failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = clWaitForEvents(1, &event);
|
err = clWaitForEvents(1, &event);
|
||||||
if ( err != CL_SUCCESS ){
|
if ( err != CL_SUCCESS ){
|
||||||
print_error( err, "clWaitForEvents() failed" );
|
print_error( err, "clWaitForEvents() failed" );
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1049,10 +1071,6 @@ static int test_buffer_read_array_barrier(
|
|||||||
log_info(" %s%d test passed. cl_mem_flags src: %s\n", type,
|
log_info(" %s%d test passed. cl_mem_flags src: %s\n", type,
|
||||||
1 << i, flag_set_names[src_flag_id]);
|
1 << i, flag_set_names[src_flag_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanup
|
|
||||||
align_free( outptr[i] );
|
|
||||||
align_free( inptr[i] );
|
|
||||||
}
|
}
|
||||||
} // cl_mem flags
|
} // cl_mem flags
|
||||||
return total_errors;
|
return total_errors;
|
||||||
|
|||||||
Reference in New Issue
Block a user