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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
* Copyright (C) 2017-2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/ptr_math.h"
#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h"
#include "opencl/test/unit_test/command_queue/command_enqueue_fixture.h"
#include "opencl/test/unit_test/fixtures/buffer_fixture.h"
#include "opencl/test/unit_test/mocks/mock_context.h"
#include "gtest/gtest.h"
namespace NEO {
struct EnqueueCopyBufferRectHelper {
cl_int enqueueCopyBufferRect(
CommandQueue *pCmdQ,
Buffer *srcBuffer,
Buffer *dstBuffer,
const size_t *srcOrigin,
const size_t *dstOrigin,
const size_t *region,
size_t srcRowPitch,
size_t srcSlicePitch,
size_t dstRowPitch,
size_t dstSlicePitch,
cl_uint numEventsInWaitList,
const cl_event *eventWaitList,
cl_event *event) {
cl_int retVal = pCmdQ->enqueueCopyBufferRect(
srcBuffer,
dstBuffer,
srcOrigin,
dstOrigin,
region,
srcRowPitch,
srcSlicePitch,
dstRowPitch,
dstSlicePitch,
numEventsInWaitList,
eventWaitList,
event);
return retVal;
}
};
struct EnqueueCopyBufferRectTest : public CommandEnqueueFixture,
public EnqueueCopyBufferRectHelper,
public ::testing::Test {
struct BufferRect : public BufferDefaults {
static const size_t sizeInBytes;
};
void SetUp(void) override {
CommandEnqueueFixture::SetUp();
BufferDefaults::context = new MockContext;
srcBuffer = BufferHelper<BufferRect>::create();
dstBuffer = BufferHelper<BufferRect>::create();
}
void TearDown(void) override {
delete srcBuffer;
delete dstBuffer;
delete BufferDefaults::context;
CommandEnqueueFixture::TearDown();
}
protected:
template <typename FamilyType>
void enqueueCopyBufferRect2D() {
typedef typename FamilyType::WALKER_TYPE GPGPU_WALKER;
typedef typename FamilyType::PIPELINE_SELECT PIPELINE_SELECT;
size_t srcOrigin[] = {0, 0, 0};
size_t dstOrigin[] = {0, 0, 0};
size_t region[] = {50, 50, 1};
auto retVal = EnqueueCopyBufferRectHelper::enqueueCopyBufferRect(
pCmdQ,
srcBuffer,
dstBuffer,
srcOrigin,
dstOrigin,
region,
rowPitch,
slicePitch,
rowPitch,
slicePitch,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
parseCommands<FamilyType>(*pCmdQ);
}
template <typename FamilyType>
void enqueueCopyBufferRect3D() {
typedef typename FamilyType::WALKER_TYPE GPGPU_WALKER;
typedef typename FamilyType::PIPELINE_SELECT PIPELINE_SELECT;
size_t srcOrigin[] = {0, 0, 0};
size_t dstOrigin[] = {0, 0, 0};
size_t region[] = {50, 50, 50};
auto retVal = EnqueueCopyBufferRectHelper::enqueueCopyBufferRect(
pCmdQ,
srcBuffer,
dstBuffer,
srcOrigin,
dstOrigin,
region,
rowPitch,
slicePitch,
rowPitch,
slicePitch,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
parseCommands<FamilyType>(*pCmdQ);
}
Buffer *srcBuffer = nullptr;
Buffer *dstBuffer = nullptr;
static const size_t rowPitch = 100;
static const size_t slicePitch = 100 * 100;
};
} // namespace NEO
|