From 39d450bc84fa04cbe9c397373b5a24d1d6cb4dd8 Mon Sep 17 00:00:00 2001 From: Jim Snow Date: Mon, 22 Mar 2021 19:24:26 -0700 Subject: [PATCH] Refactor L0 sampler error path and add ULTs Signed-off-by: Jim Snow --- .../core/source/sampler/sampler_imp.cpp | 5 ++- .../sources/sampler/test_sampler.cpp | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/level_zero/core/source/sampler/sampler_imp.cpp b/level_zero/core/source/sampler/sampler_imp.cpp index f5a456ebef..0c9c3bc7eb 100644 --- a/level_zero/core/source/sampler/sampler_imp.cpp +++ b/level_zero/core/source/sampler/sampler_imp.cpp @@ -32,7 +32,10 @@ Sampler *Sampler::create(uint32_t productFamily, Device *device, const ze_sample SamplerImp *sampler = nullptr; if (allocator) { sampler = static_cast((*allocator)()); - sampler->initialize(device, desc); + if (sampler->initialize(device, desc) != ZE_RESULT_SUCCESS) { + sampler->destroy(); + sampler = nullptr; + } } return sampler; 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 5d1dc19418..a29caaa0a7 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 @@ -187,5 +187,39 @@ HWTEST2_F(ContextCreateSamplerTest, givenInvalidHardwareFamilyThenSamplerIsNotCr EXPECT_EQ(nullptr, sampler); } +HWTEST2_F(ContextCreateSamplerTest, givenInvalidAddressModeThenSamplerIsNotCreated, SamplerCreateSupport) { + auto addressModeArray = std::make_unique(sizeof(ze_sampler_address_mode_t)); + addressModeArray[0] = 99; // out of range value + auto addressMode = *reinterpret_cast(addressModeArray.get()); + ze_sampler_filter_mode_t filterMode = ZE_SAMPLER_FILTER_MODE_LINEAR; + ze_bool_t isNormalized = false; + + ze_sampler_desc_t desc = {}; + desc.addressMode = addressMode; + desc.filterMode = filterMode; + desc.isNormalized = isNormalized; + + L0::Sampler *sampler = Sampler::create(gfxCoreFamily, device, &desc); + + EXPECT_EQ(nullptr, sampler); +} + +HWTEST2_F(ContextCreateSamplerTest, givenInvalidFilterModeThenSamplerIsNotCreated, SamplerCreateSupport) { + ze_sampler_address_mode_t addressMode = ZE_SAMPLER_ADDRESS_MODE_NONE; + auto filterModeArray = std::make_unique(sizeof(ze_sampler_filter_mode_t)); + filterModeArray[0] = 99; // out of range value + ze_sampler_filter_mode_t filterMode = *reinterpret_cast(filterModeArray.get()); + ze_bool_t isNormalized = false; + + ze_sampler_desc_t desc = {}; + desc.addressMode = addressMode; + desc.filterMode = filterMode; + desc.isNormalized = isNormalized; + + L0::Sampler *sampler = Sampler::create(gfxCoreFamily, device, &desc); + + EXPECT_EQ(nullptr, sampler); +} + } // namespace ult } // namespace L0