MCPcopy Create free account
hub / github.com/KhronosGroup/OpenCL-CTS / CBasicTest

Class CBasicTest

test_conformance/generic_address_space/basic_tests.cpp:24–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22#include <algorithm>
23
24class CBasicTest : CTest {
25public:
26 CBasicTest(const std::vector<std::string>& kernel) : CTest(), _kernels(kernel) {
27
28 }
29
30 CBasicTest(const std::string& kernel) : CTest(), _kernels(1, kernel) {
31
32 }
33
34 int ExecuteSubcase(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, const std::string& src) {
35 cl_int error;
36
37 clProgramWrapper program;
38 clKernelWrapper kernel;
39
40 const char *srcPtr = src.c_str();
41
42 if (create_single_kernel_helper(context, &program, &kernel, 1, &srcPtr,
43 "testKernel"))
44 {
45 log_error("create_single_kernel_helper failed");
46 return -1;
47 }
48
49 size_t bufferSize = num_elements * sizeof(cl_uint);
50 clMemWrapper buffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY, bufferSize, NULL, &error);
51 test_error(error, "clCreateBuffer failed");
52
53 error = clSetKernelArg(kernel, 0, sizeof(buffer), &buffer);
54 test_error(error, "clSetKernelArg failed");
55
56 size_t globalWorkGroupSize = num_elements;
57 size_t localWorkGroupSize = 0;
58 error = get_max_common_work_group_size(context, kernel, globalWorkGroupSize, &localWorkGroupSize);
59 test_error(error, "Unable to get common work group size");
60
61 error = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &globalWorkGroupSize, &localWorkGroupSize, 0, NULL, NULL);
62 test_error(error, "clEnqueueNDRangeKernel failed");
63
64 // verify results
65 std::vector<cl_uint> results(num_elements);
66
67 error = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, bufferSize, &results[0], 0, NULL, NULL);
68 test_error(error, "clEnqueueReadBuffer failed");
69
70 size_t passCount = std::count(results.begin(), results.end(), 1);
71 if (passCount != results.size()) {
72 std::vector<cl_uint>::iterator iter = std::find(results.begin(), results.end(), 0);
73 log_error("Verification on device failed at index %td\n",
74 std::distance(results.begin(), iter));
75 log_error("%zu out of %zu failed\n", (results.size() - passCount),
76 results.size());
77 return -1;
78 }
79
80 return CL_SUCCESS;
81 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected