diff --git a/clic/src/tier1/multiply_image_and_position.cpp b/clic/src/tier1/multiply_image_and_position.cpp index d9279563..6688fa93 100644 --- a/clic/src/tier1/multiply_image_and_position.cpp +++ b/clic/src/tier1/multiply_image_and_position.cpp @@ -14,7 +14,7 @@ multiply_image_and_position_func(const Device::Pointer & device, Array::Pointer dst, int dimension) -> Array::Pointer { - tier0::create_like(src, dst); + tier0::create_like(src, dst, dType::FLOAT); const KernelInfo kernel = { "multiply_image_and_position", kernel::multiply_image_and_position }; const ParameterList params = { { "src", src }, { "dst", dst }, { "index", dimension } }; const RangeArray range = { dst->width(), dst->height(), dst->depth() }; diff --git a/clic/src/tier3/bounding_box.cpp b/clic/src/tier3/bounding_box.cpp index e0340a18..81e1e3a3 100644 --- a/clic/src/tier3/bounding_box.cpp +++ b/clic/src/tier3/bounding_box.cpp @@ -12,9 +12,7 @@ auto bounding_box_func(const Device::Pointer & device, const Array::Pointer & src) -> std::array { float min_x = 0, min_y = 0, min_z = 0, max_x = 0, max_y = 0, max_z = 0; - auto temp = Array::create( - src->width(), src->height(), src->depth(), src->dimension(), dType::INDEX, mType::BUFFER, src->device()); - tier1::multiply_image_and_position_func(device, src, temp, 0); + auto temp = tier1::multiply_image_and_position_func(device, src, nullptr, 0); max_x = tier2::maximum_of_all_pixels_func(device, temp); min_x = tier2::minimum_of_masked_pixels_func(device, temp, src); temp = tier1::multiply_image_and_position_func(device, src, nullptr, 1); diff --git a/tests/tier1/test_multiply_image_and_position.cpp b/tests/tier1/test_multiply_image_and_position.cpp index fae1888a..8a944fd5 100644 --- a/tests/tier1/test_multiply_image_and_position.cpp +++ b/tests/tier1/test_multiply_image_and_position.cpp @@ -30,6 +30,27 @@ TEST_P(TestMultiplyPixelAndCoord, execute) } } +TEST_P(TestMultiplyPixelAndCoord, returnType) +{ + std::string param = GetParam(); + cle::BackendManager::getInstance().setBackend(param); + auto device = cle::BackendManager::getInstance().getBackend().getDevice("", "all"); + device->setWaitToFinish(true); + + for (cle::dType type : { cle::dType::UINT8, + cle::dType::INT8, + cle::dType::UINT16, + cle::dType::INT16, + cle::dType::FLOAT, + cle::dType::UINT32, + cle::dType::INT32 }) + { + auto gpu_input = cle::Array::create(5, 3, 1, 3, type, cle::mType::BUFFER, device); + auto gpu_output = cle::tier1::multiply_image_and_position_func(device, gpu_input, nullptr, 0); + EXPECT_EQ(gpu_output->dtype(), cle::dType::FLOAT); + } +} + std::vector getParameters() {