| 118 | |
| 119 | template <typename T> |
| 120 | static int |
| 121 | test_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); |
nothing calls this directly
no test coverage detected