summaryrefslogtreecommitdiff
path: root/utests/compiler_copy_buffer_row.cpp
blob: 308e6e3ee6b1896d29013047048312d14e560097 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* 
 * Copyright © 2012 Intel Corporation
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 *
 * Author: Benjamin Segovia <benjamin.segovia@intel.com>
 */

#include "utest_helper.hpp"

static void compiler_copy_buffer_row(void)
{
  uint32_t *src_buffer = NULL;
  int *data_buffer = NULL;
  const int row = 8192;
  const int row_n = 2;
  const int n =  row * row_n;
  int status = 0;

  CALL (cl_test_init, "test_copy_buffer_row.cl", "test_copy_buffer_row", SOURCE);

  // Create the input data
  src_buffer = (uint32_t *) malloc(sizeof(uint32_t) * n);
  for (int32_t i = 0; i < n; ++i) src_buffer[i] = i;
  data_buffer = (int *) malloc(sizeof(int) * 2);
  data_buffer[0] = row;
  data_buffer[1] = n;

  // Allocate all buffers
  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), src_buffer);
  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, 2 * sizeof(uint32_t), data_buffer);
  free(src_buffer);
  free(data_buffer);

  // Run the code
  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
  globals[0] = n;
  locals[0] = 16;
  OCL_NDRANGE(1);

  // Check results
  OCL_MAP_BUFFER(0);
  OCL_MAP_BUFFER(1);
  for (int32_t i = 0; i < n; ++i)
    assert(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
  OCL_UNMAP_BUFFER(0);
  OCL_UNMAP_BUFFER(1);
error:
  cl_release_buffers();
  cl_report_error(status);
  cl_test_destroy();

}

UTEST_REGISTER(compiler_copy_buffer_row)