diff options
author | EdB <edb+piglit@sigluy.net> | 2014-11-10 15:25:01 +0100 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2014-11-14 20:30:33 -0500 |
commit | 12b17133447ee50b1891fafb0aa765f9999a6c79 (patch) | |
tree | 59f65c15fa45cf28b4899a0a0df535cd91a8b73d /tests/cl | |
parent | 8f57676e329ce3510c60bab7c411107f01c5979e (diff) |
cl: add CL_MEM_HOST_* releated tests
Diffstat (limited to 'tests/cl')
-rw-r--r-- | tests/cl/api/enqueue-map-buffer.c | 111 | ||||
-rw-r--r-- | tests/cl/api/enqueue-read_write-buffer.c | 49 |
2 files changed, 158 insertions, 2 deletions
diff --git a/tests/cl/api/enqueue-map-buffer.c b/tests/cl/api/enqueue-map-buffer.c index 214ef7fb3..13a251154 100644 --- a/tests/cl/api/enqueue-map-buffer.c +++ b/tests/cl/api/enqueue-map-buffer.c @@ -118,5 +118,116 @@ piglit_cl_test(const int argc, return PIGLIT_FAIL; } +#if defined(CL_VERSION_1_2) + /* + * CL_INVALID_OPERATION if buffer has been created with + * CL_MEM_HOST_WRITE_ONLY or CL_MEM_HOST_NO_ACCESS + * and CL_MAP_READ is set in map_flags + * + * CL_INVALID_OPERATION if buffer has been created with + * CL_MEM_HOST_READ_ONLY or CL_MEM_HOST_NO_ACCESS + * and CL_MAP_WRITE or CL_MAP_WRITE_INVALIDATE_REGION is set in map_flags. + * + * Version: 1.2 + */ + if(env->version >= 12) { + enum piglit_result result; + cl_mem device_mem; + cl_ulong alloc_size = 64; + cl_int *host_mem; + + /* host write only buffer */ + + device_mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_WRITE_ONLY, + alloc_size, NULL, NULL); + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_READ, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_READ: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_READ_ONLY"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + clReleaseMemObject(device_mem); + + /* host no access buffer */ + + device_mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_NO_ACCESS, + alloc_size, NULL, NULL); + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_READ, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_READ: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_NO_ACCESS"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_WRITE, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_WRITE: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_NO_ACCESS"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_WRITE_INVALIDATE_REGION, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_WRITE_INVALIDATE_REGION: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_NO_ACCESS"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + clReleaseMemObject(device_mem); + + /* host read only buffer */ + + device_mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_READ_ONLY, + alloc_size, NULL, NULL); + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_WRITE, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_WRITE: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_NO_ACCESS"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + host_mem = clEnqueueMapBuffer(queue, device_mem, CL_TRUE, + CL_MAP_WRITE_INVALIDATE_REGION, 0, alloc_size, + 0, NULL, NULL, &err); + + if (!piglit_cl_check_error(err, CL_INVALID_OPERATION)) { + fprintf(stderr, "clEnqueueMapBuffer CL_MAP_WRITE_INVALIDATE_REGION: Failed (error code: %s): %s.\n", + piglit_cl_get_error_name(err), + "Trigger CL_INVALID_OPERATION when buffer has been created with CL_MEM_HOST_NO_ACCESS"); + piglit_merge_result(&result, PIGLIT_FAIL); + } + + (void)host_mem; + clReleaseMemObject(device_mem); + + if (result == PIGLIT_FAIL) + return PIGLIT_FAIL; + } +#endif //CL_VERSION_1_2 + return PIGLIT_PASS; } diff --git a/tests/cl/api/enqueue-read_write-buffer.c b/tests/cl/api/enqueue-read_write-buffer.c index f98125c7e..c7ca9a49f 100644 --- a/tests/cl/api/enqueue-read_write-buffer.c +++ b/tests/cl/api/enqueue-read_write-buffer.c @@ -514,16 +514,61 @@ piglit_cl_test(const int argc, * Version: 1.1 * TODO */ + + clReleaseMemObject(mem); + +#if defined(CL_VERSION_1_2) /* * CL_INVALID_OPERATION if clEnqueueReadBuffer is called on * buffer which has been created with CL_MEM_HOST_WRITE_ONLY * or CL_MEM_HOST_NO_ACCESS. * + * CL_INVALID_OPERATION if clEnqueueWriteBuffer is called on + * buffer which has been created with CL_MEM_HOST_READ_ONLY + * or CL_MEM_HOST_NO_ACCESS. + * * Version: 1.2 - * TODO */ + if(env->version >= 12) { + /* create host write only buffer */ + mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_WRITE_ONLY, alloc_size, + NULL, NULL); - clReleaseMemObject(mem); + test_read(env->context->command_queues[0], mem, true, 0, + BUFFER_SIZE, host_buffer_read, 0, NULL, NULL, + CL_INVALID_OPERATION, &result, + "Trigger CL_INVALID_OPERATION when clEnqueueReadBuffer is called on buffer which has been created with CL_MEM_HOST_WRITE_ONLY"); + + clReleaseMemObject(mem); + + /* create host no access buffer */ + mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_NO_ACCESS, alloc_size, + NULL, NULL); + + test_read(env->context->command_queues[0], mem, true, 0, + BUFFER_SIZE, host_buffer_read, 0, NULL, NULL, + CL_INVALID_OPERATION, &result, + "Trigger CL_INVALID_OPERATION when clEnqueueReadBuffer is called on buffer which has been created with CL_MEM_HOST_NO_ACCESS"); + + test_write(env->context->command_queues[0], mem, true, 0, + BUFFER_SIZE, host_buffer_write, 0, NULL, NULL, + CL_INVALID_OPERATION, &result, + "Trigger CL_INVALID_OPERATION when clEnqueueWriteBuffer is called on buffer which has been created with CL_MEM_HOST_NO_ACCESS"); + + clReleaseMemObject(mem); + + /* create host read only buffer */ + mem = clCreateBuffer(env->context->cl_ctx, CL_MEM_HOST_READ_ONLY, alloc_size, + NULL, NULL); + + test_write(env->context->command_queues[0], mem, true, 0, + BUFFER_SIZE, host_buffer_write, 0, NULL, NULL, + CL_INVALID_OPERATION, &result, + "Trigger CL_INVALID_OPERATION when clEnqueueWriteBuffer is called on buffer which has been created with CL_MEM_HOST_READ_ONLY"); + + clReleaseMemObject(mem); + } +#endif //CL_VERSION_1_2 return result; } |