compute-runtime/unit_tests/sampler/sampler_tests.cpp

133 lines
4.6 KiB
C++

/*
* Copyright (c) 2017 - 2018, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include "runtime/sampler/sampler.h"
#include "unit_tests/mocks/mock_context.h"
#include "unit_tests/mocks/mock_sampler.h"
#include "gtest/gtest.h"
#include "patch_list.h"
#include <tuple>
using namespace OCLRT;
struct CreateSampler : public ::testing::TestWithParam<
std::tuple<uint32_t /*cl_bool*/, uint32_t /*cl_addressing_mode*/, uint32_t /*cl_filter_mode*/>> {
CreateSampler() {
}
void SetUp() override {
std::tie(normalizedCoords, addressingMode, filterMode) = GetParam();
context = new MockContext();
}
void TearDown() override {
delete context;
}
MockContext *context;
cl_int retVal = CL_INVALID_VALUE;
cl_bool normalizedCoords;
cl_addressing_mode addressingMode;
cl_filter_mode filterMode;
};
TEST_P(CreateSampler, shouldReturnSuccess) {
auto sampler = Sampler::create(
context,
normalizedCoords,
addressingMode,
filterMode,
retVal);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, sampler);
delete sampler;
}
TEST_P(CreateSampler, shouldPropagateSamplerState) {
auto sampler = new MockSampler(
context,
normalizedCoords,
addressingMode,
filterMode);
ASSERT_NE(nullptr, sampler);
EXPECT_EQ(context, sampler->getContext());
EXPECT_EQ(normalizedCoords, sampler->getNormalizedCoordinates());
EXPECT_EQ(addressingMode, sampler->getAddressingMode());
EXPECT_EQ(filterMode, sampler->getFilterMode());
//check for SnapWA
bool snapWaNeeded = addressingMode == CL_ADDRESS_CLAMP && filterMode == CL_FILTER_NEAREST;
auto snapWaValue = snapWaNeeded ? iOpenCL::CONSTANT_REGISTER_BOOLEAN_TRUE : iOpenCL::CONSTANT_REGISTER_BOOLEAN_FALSE;
EXPECT_EQ(snapWaValue, sampler->getSnapWaValue());
delete sampler;
}
static cl_bool normalizedCoordModes[] = {
CL_FALSE,
CL_TRUE};
static cl_addressing_mode addressingModes[] = {
CL_ADDRESS_MIRRORED_REPEAT,
CL_ADDRESS_REPEAT,
CL_ADDRESS_CLAMP_TO_EDGE,
CL_ADDRESS_CLAMP,
CL_ADDRESS_NONE};
static cl_filter_mode filterModes[] = {
CL_FILTER_NEAREST,
CL_FILTER_LINEAR};
INSTANTIATE_TEST_CASE_P(Sampler,
CreateSampler,
::testing::Combine(
::testing::ValuesIn(normalizedCoordModes),
::testing::ValuesIn(addressingModes),
::testing::ValuesIn(filterModes)));
typedef ::testing::TestWithParam<std::tuple<uint32_t /*normalizedCoords*/, uint32_t /*addressingMode*/, uint32_t /*filterMode*/>> TransformableSamplerTest;
TEST_P(TransformableSamplerTest, givenSamplerWhenHasProperParametersThenIsTransformable) {
bool expectedRetVal;
bool retVal;
cl_bool normalizedCoords;
cl_addressing_mode addressingMode;
cl_filter_mode filterMode;
std::tie(normalizedCoords, addressingMode, filterMode) = GetParam();
expectedRetVal = addressingMode == CL_ADDRESS_CLAMP_TO_EDGE &&
filterMode == CL_FILTER_NEAREST &&
normalizedCoords == CL_FALSE;
MockSampler sampler(nullptr, normalizedCoords, addressingMode, filterMode);
retVal = sampler.isTransformable();
EXPECT_EQ(expectedRetVal, retVal);
}
INSTANTIATE_TEST_CASE_P(Sampler,
TransformableSamplerTest,
::testing::Combine(
::testing::ValuesIn(normalizedCoordModes),
::testing::ValuesIn(addressingModes),
::testing::ValuesIn(filterModes)));