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

Function test_writeimage

test_conformance/basic/test_writeimage.cpp:120–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

118
119template <typename T>
120static int
121test_writeimage(cl_device_id device, cl_context context, cl_command_queue queue,
122 const cl_image_format *img_format, cl_mem_flags img_flags)
123{
124 clMemWrapper streams[2];
125 clProgramWrapper program;
126 clKernelWrapper kernel;
127
128 std::string kernel_name("test_");
129
130 size_t img_width = 512;
131 size_t img_height = 512;
132
133 int err;
134
135 const size_t origin[3] = { 0, 0, 0 };
136 const size_t region[3] = { img_width, img_height, 1 };
137
138 const size_t num_elements = img_width * img_height * 4;
139 const size_t length = num_elements * sizeof(T);
140
141 PASSIVE_REQUIRE_IMAGE_SUPPORT(device)
142
143 std::vector<T> input(num_elements);
144 std::vector<T> output(num_elements);
145
146 generate_random_inputs(input);
147
148 streams[0] = create_image_2d(context, img_flags, img_format, img_width,
149 img_height, 0, nullptr, &err);
150 test_error(err, "create_image failed.");
151
152 streams[1] =
153 clCreateBuffer(context, CL_MEM_READ_WRITE, length, nullptr, &err);
154 test_error(err, "clCreateBuffer failed.");
155
156 err = clEnqueueWriteBuffer(queue, streams[1], CL_TRUE, 0, length,
157 input.data(), 0, nullptr, nullptr);
158 test_error(err, "clEnqueueWriteImage failed.");
159
160 kernel_name += GetChannelOrderName(img_format->image_channel_order);
161 kernel_name += GetChannelTypeName(img_format->image_channel_data_type);
162
163 err = create_single_kernel_helper(context, &program, &kernel, 1,
164 &kernel_source, kernel_name.c_str());
165 test_error(err, "create_single_kernel_helper failed.");
166
167 err |= clSetKernelArg(kernel, 0, sizeof(streams[1]), &streams[1]);
168 err |= clSetKernelArg(kernel, 1, sizeof(streams[0]), &streams[0]);
169 test_error(err, "clSetKernelArgs failed\n");
170
171 size_t threads[] = { img_width, img_height };
172 err = clEnqueueNDRangeKernel(queue, kernel, 2, nullptr, threads, nullptr, 0,
173 nullptr, nullptr);
174 test_error(err, "clEnqueueNDRangeKernel failed\n");
175
176 err = clEnqueueReadImage(queue, streams[0], CL_TRUE, origin, region, 0, 0,
177 output.data(), 0, nullptr, nullptr);

Callers

nothing calls this directly

Calls 6

create_image_2dFunction · 0.85
GetChannelOrderNameFunction · 0.85
GetChannelTypeNameFunction · 0.85
get_mem_flag_nameFunction · 0.85
generate_random_inputsFunction · 0.70

Tested by

no test coverage detected