diff --git a/level_zero/core/source/CMakeLists.txt b/level_zero/core/source/CMakeLists.txt index 2532f5fd87..5431702683 100644 --- a/level_zero/core/source/CMakeLists.txt +++ b/level_zero/core/source/CMakeLists.txt @@ -62,6 +62,7 @@ set(L0_RUNTIME_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/kernel/kernel_hw.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel/kernel_imp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel/kernel_imp.h + ${CMAKE_CURRENT_SOURCE_DIR}/kernel/sampler_patch_values.h ${CMAKE_CURRENT_SOURCE_DIR}/image/image.h ${CMAKE_CURRENT_SOURCE_DIR}/image/image_format_desc_helper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image/image_format_desc_helper.h diff --git a/level_zero/core/source/kernel/kernel_imp.cpp b/level_zero/core/source/kernel/kernel_imp.cpp index beb05c1044..cef7cbb357 100644 --- a/level_zero/core/source/kernel/kernel_imp.cpp +++ b/level_zero/core/source/kernel/kernel_imp.cpp @@ -32,6 +32,7 @@ #include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/image/image.h" #include "level_zero/core/source/image/image_format_desc_helper.h" +#include "level_zero/core/source/kernel/sampler_patch_values.h" #include "level_zero/core/source/module/module.h" #include "level_zero/core/source/module/module_imp.h" #include "level_zero/core/source/printf_handler/printf_handler.h" @@ -40,35 +41,6 @@ #include namespace L0 { -enum class SamplerPatchValues : uint32_t { - DefaultSampler = 0x00, - AddressNone = 0x00, - AddressClamp = 0x01, - AddressClampToEdge = 0x02, - AddressRepeat = 0x03, - AddressMirroredRepeat = 0x04, - AddressMirroredRepeat101 = 0x05, - NormalizedCoordsFalse = 0x00, - NormalizedCoordsTrue = 0x08 -}; - -inline SamplerPatchValues getAddrMode(ze_sampler_address_mode_t addressingMode) { - switch (addressingMode) { - case ZE_SAMPLER_ADDRESS_MODE_REPEAT: - return SamplerPatchValues::AddressRepeat; - case ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: - return SamplerPatchValues::AddressClampToEdge; - case ZE_SAMPLER_ADDRESS_MODE_CLAMP: - return SamplerPatchValues::AddressClamp; - case ZE_SAMPLER_ADDRESS_MODE_NONE: - return SamplerPatchValues::AddressNone; - case ZE_SAMPLER_ADDRESS_MODE_MIRROR: - return SamplerPatchValues::AddressMirroredRepeat; - default: - DEBUG_BREAK_IF(true); - } - return SamplerPatchValues::AddressNone; -} KernelImmutableData::KernelImmutableData(L0::Device *l0device) : device(l0device) {} @@ -681,7 +653,7 @@ ze_result_t KernelImp::setArgSampler(uint32_t argIndex, size_t argSize, const vo auto samplerDesc = sampler->getSamplerDesc(); - NEO::patchNonPointer(ArrayRef(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.samplerSnapWa, (samplerDesc.addressMode == ZE_SAMPLER_ADDRESS_MODE_CLAMP && samplerDesc.filterMode == ZE_SAMPLER_FILTER_MODE_NEAREST) ? std::numeric_limits::max() : 0u); + NEO::patchNonPointer(ArrayRef(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.samplerSnapWa, (samplerDesc.addressMode == ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER && samplerDesc.filterMode == ZE_SAMPLER_FILTER_MODE_NEAREST) ? std::numeric_limits::max() : 0u); NEO::patchNonPointer(ArrayRef(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.samplerAddressingMode, static_cast(getAddrMode(samplerDesc.addressMode))); NEO::patchNonPointer(ArrayRef(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.samplerNormalizedCoords, samplerDesc.isNormalized ? static_cast(SamplerPatchValues::NormalizedCoordsTrue) : static_cast(SamplerPatchValues::NormalizedCoordsFalse)); diff --git a/level_zero/core/source/kernel/sampler_patch_values.h b/level_zero/core/source/kernel/sampler_patch_values.h new file mode 100644 index 0000000000..eb024a2f21 --- /dev/null +++ b/level_zero/core/source/kernel/sampler_patch_values.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include "shared/source/helpers/debug_helpers.h" + +#include + +namespace L0 { +enum class SamplerPatchValues : uint32_t { + DefaultSampler = 0x00, + AddressNone = 0x00, + AddressClampToBorder = 0x01, + AddressClampToEdge = 0x02, + AddressRepeat = 0x03, + AddressMirroredRepeat = 0x04, + AddressMirroredRepeat101 = 0x05, + NormalizedCoordsFalse = 0x00, + NormalizedCoordsTrue = 0x08 +}; + +inline SamplerPatchValues getAddrMode(ze_sampler_address_mode_t addressingMode) { + switch (addressingMode) { + case ZE_SAMPLER_ADDRESS_MODE_REPEAT: + return SamplerPatchValues::AddressRepeat; + case ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: + return SamplerPatchValues::AddressClampToBorder; + case ZE_SAMPLER_ADDRESS_MODE_CLAMP: + return SamplerPatchValues::AddressClampToEdge; + case ZE_SAMPLER_ADDRESS_MODE_NONE: + return SamplerPatchValues::AddressNone; + case ZE_SAMPLER_ADDRESS_MODE_MIRROR: + return SamplerPatchValues::AddressMirroredRepeat; + default: + DEBUG_BREAK_IF(true); + } + return SamplerPatchValues::AddressNone; +} +} // namespace L0 \ No newline at end of file diff --git a/level_zero/core/source/sampler/sampler_hw.inl b/level_zero/core/source/sampler/sampler_hw.inl index f070774103..e15167613c 100644 --- a/level_zero/core/source/sampler/sampler_hw.inl +++ b/level_zero/core/source/sampler/sampler_hw.inl @@ -27,9 +27,9 @@ ze_result_t SamplerCoreFamily::initialize(Device *device, const z switch (desc->addressMode) { case ZE_SAMPLER_ADDRESS_MODE_NONE: - case ZE_SAMPLER_ADDRESS_MODE_CLAMP: - break; case ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: + break; + case ZE_SAMPLER_ADDRESS_MODE_CLAMP: addressControlModeX = SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP; addressControlModeY = SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP; addressControlModeZ = SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP; diff --git a/level_zero/core/test/unit_tests/sources/kernel/CMakeLists.txt b/level_zero/core/test/unit_tests/sources/kernel/CMakeLists.txt index 10af8a1d38..559ba4bd65 100644 --- a/level_zero/core/test/unit_tests/sources/kernel/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/sources/kernel/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2020 Intel Corporation +# Copyright (C) 2020-2021 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -7,4 +7,5 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/test_kernel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_sampler_patch_value.cpp ) diff --git a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp index 99d78d6200..ea429382b1 100644 --- a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp +++ b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp @@ -24,6 +24,7 @@ #include "level_zero/core/source/image/image_format_desc_helper.h" #include "level_zero/core/source/image/image_hw.h" #include "level_zero/core/source/kernel/kernel_hw.h" +#include "level_zero/core/source/kernel/sampler_patch_values.h" #include "level_zero/core/source/module/module_imp.h" #include "level_zero/core/source/printf_handler/printf_handler.h" #include "level_zero/core/source/sampler/sampler_hw.h" @@ -236,7 +237,7 @@ HWTEST2_F(SetKernelArg, givenSamplerAndKernelWhenSetArgSamplerThenCrossThreadDat ze_sampler_desc_t desc = {}; - desc.addressMode = ZE_SAMPLER_ADDRESS_MODE_CLAMP; + desc.addressMode = ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; desc.filterMode = ZE_SAMPLER_FILTER_MODE_NEAREST; desc.isNormalized = true; @@ -255,10 +256,10 @@ HWTEST2_F(SetKernelArg, givenSamplerAndKernelWhenSetArgSamplerThenCrossThreadDat EXPECT_EQ(std::numeric_limits::max(), *reinterpret_cast(pSamplerSnapWa)); auto pSamplerAddressingMode = ptrOffset(crossThreadData, samplerArg.metadataPayload.samplerAddressingMode); - EXPECT_EQ(0x01, *pSamplerAddressingMode); + EXPECT_EQ(static_cast(SamplerPatchValues::AddressClampToBorder), *pSamplerAddressingMode); auto pSamplerNormalizedCoords = ptrOffset(crossThreadData, samplerArg.metadataPayload.samplerNormalizedCoords); - EXPECT_EQ(0x08, *pSamplerNormalizedCoords); + EXPECT_EQ(static_cast(SamplerPatchValues::NormalizedCoordsTrue), *pSamplerNormalizedCoords); } using ArgSupport = IsWithinProducts; diff --git a/level_zero/core/test/unit_tests/sources/kernel/test_sampler_patch_value.cpp b/level_zero/core/test/unit_tests/sources/kernel/test_sampler_patch_value.cpp new file mode 100644 index 0000000000..9324c86930 --- /dev/null +++ b/level_zero/core/test/unit_tests/sources/kernel/test_sampler_patch_value.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/test/common/test_macros/test.h" + +#include "level_zero/core/source/kernel/sampler_patch_values.h" + +using namespace L0; + +TEST(SamplerPatchValueTest, givenSamplerAddressingModeWhenGetingPathValueThenCorrectValueReturned) { + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_REPEAT), SamplerPatchValues::AddressRepeat); + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER), SamplerPatchValues::AddressClampToBorder); + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_CLAMP), SamplerPatchValues::AddressClampToEdge); + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_NONE), SamplerPatchValues::AddressNone); + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_MIRROR), SamplerPatchValues::AddressMirroredRepeat); + EXPECT_EQ(getAddrMode(ZE_SAMPLER_ADDRESS_MODE_FORCE_UINT32), SamplerPatchValues::AddressNone); +} \ No newline at end of file diff --git a/level_zero/core/test/unit_tests/sources/sampler/test_sampler.cpp b/level_zero/core/test/unit_tests/sources/sampler/test_sampler.cpp index 173083a551..32bec03ac2 100644 --- a/level_zero/core/test/unit_tests/sources/sampler/test_sampler.cpp +++ b/level_zero/core/test/unit_tests/sources/sampler/test_sampler.cpp @@ -84,11 +84,11 @@ HWTEST2_P(SamplerCreateTest, givenDifferentDescriptorValuesThenSamplerIsCorrectl EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_WRAP, sampler->samplerState.getTczAddressControlMode()); } else if (addressMode == ZE_SAMPLER_ADDRESS_MODE_CLAMP) { - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, sampler->samplerState.getTcxAddressControlMode()); - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, sampler->samplerState.getTcyAddressControlMode()); - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, sampler->samplerState.getTczAddressControlMode()); } else if (addressMode == ZE_SAMPLER_ADDRESS_MODE_MIRROR) { EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_MIRROR, @@ -98,11 +98,11 @@ HWTEST2_P(SamplerCreateTest, givenDifferentDescriptorValuesThenSamplerIsCorrectl EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_MIRROR, sampler->samplerState.getTczAddressControlMode()); } else if (addressMode == ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER) { - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, sampler->samplerState.getTcxAddressControlMode()); - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, sampler->samplerState.getTcyAddressControlMode()); - EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP, + EXPECT_EQ(SAMPLER_STATE::TEXTURE_COORDINATE_MODE_CLAMP_BORDER, sampler->samplerState.getTczAddressControlMode()); }