diff --git a/tests/validation/CL/WarpPerspective.cpp b/tests/validation/CL/WarpPerspective.cpp
index 2edf911..a868e16 100644
--- a/tests/validation/CL/WarpPerspective.cpp
+++ b/tests/validation/CL/WarpPerspective.cpp
@@ -105,20 +105,14 @@
                                                                                                                        framework::dataset::make("InterpolationPolicy", { InterpolationPolicy::NEAREST_NEIGHBOR, InterpolationPolicy::BILINEAR })),
                                                                                                                datasets::BorderModes()))
 {
-    // Create the valid mask Tensor
-    RawTensor valid_mask(_reference.shape(), _reference.data_type());
-
-    validate(CLAccessor(_target), _reference, valid_mask, tolerance_value, tolerance_number);
+    validate(CLAccessor(_target), _reference, _valid_mask, tolerance_value, tolerance_number);
 }
 FIXTURE_DATA_TEST_CASE(RunLarge, CLWarpPerspectiveFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
                                                                                                                      DataType::U8)),
                                                                                                                      framework::dataset::make("InterpolationPolicy", { InterpolationPolicy::NEAREST_NEIGHBOR, InterpolationPolicy::BILINEAR })),
                                                                                                              datasets::BorderModes()))
 {
-    // Create the valid mask Tensor
-    RawTensor valid_mask{ _reference.shape(), _reference.data_type() };
-
-    validate(CLAccessor(_target), _reference, valid_mask, tolerance_value, tolerance_number);
+    validate(CLAccessor(_target), _reference, _valid_mask, tolerance_value, tolerance_number);
 }
 
 TEST_SUITE_END()
diff --git a/tests/validation/NEON/WarpPerspective.cpp b/tests/validation/NEON/WarpPerspective.cpp
index 45d3a0b..804c080 100644
--- a/tests/validation/NEON/WarpPerspective.cpp
+++ b/tests/validation/NEON/WarpPerspective.cpp
@@ -106,20 +106,14 @@
                                                                                                                        framework::dataset::make("InterpolationPolicy", { InterpolationPolicy::NEAREST_NEIGHBOR, InterpolationPolicy::BILINEAR })),
                                                                                                                datasets::BorderModes()))
 {
-    // Create the valid mask Tensor
-    RawTensor valid_mask(_reference.shape(), _reference.data_type());
-
-    validate(Accessor(_target), _reference, valid_mask, tolerance_value, tolerance_number);
+    validate(Accessor(_target), _reference, _valid_mask, tolerance_value, tolerance_number);
 }
 FIXTURE_DATA_TEST_CASE(RunLarge, NEWarpPerspectiveFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
                                                                                                                      DataType::U8)),
                                                                                                                      framework::dataset::make("InterpolationPolicy", { InterpolationPolicy::NEAREST_NEIGHBOR, InterpolationPolicy::BILINEAR })),
                                                                                                              datasets::BorderModes()))
 {
-    // Create the valid mask Tensor
-    RawTensor valid_mask{ _reference.shape(), _reference.data_type() };
-
-    validate(Accessor(_target), _reference, valid_mask, tolerance_value, tolerance_number);
+    validate(Accessor(_target), _reference, _valid_mask, tolerance_value, tolerance_number);
 }
 
 TEST_SUITE_END()
diff --git a/tests/validation/fixtures/WarpPerspectiveFixture.h b/tests/validation/fixtures/WarpPerspectiveFixture.h
index c77efbd..1a6d6c0 100644
--- a/tests/validation/fixtures/WarpPerspectiveFixture.h
+++ b/tests/validation/fixtures/WarpPerspectiveFixture.h
@@ -70,9 +70,9 @@
 
 protected:
     template <typename U>
-    void fill(U &&tensor, int i = 0)
+    void fill(U &&tensor)
     {
-        library->fill_tensor_uniform(tensor, i);
+        library->fill_tensor_uniform(tensor, 0);
     }
 
     TensorType compute_target(const TensorShape &shape, const TensorShape &vmask_shape, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value,
@@ -112,19 +112,21 @@
 
         // Create reference
         SimpleTensor<T> src{ shape, data_type };
-        SimpleTensor<T> valid_mask{ vmask_shape, data_type };
+
+        // Create the valid mask Tensor
+        _valid_mask = SimpleTensor<T>(shape, data_type);
 
         // Fill reference
-        fill(src, 0);
-        fill(valid_mask, 1);
+        fill(src);
 
         // Compute reference
-        return reference::warp_perspective<T>(src, valid_mask, matrix, policy, border_mode, constant_border_value);
+        return reference::warp_perspective<T>(src, _valid_mask, matrix, policy, border_mode, constant_border_value);
     }
 
     TensorType      _target{};
     SimpleTensor<T> _reference{};
     BorderMode      _border_mode{};
+    SimpleTensor<T> _valid_mask{};
 };
 } // namespace validation
 } // namespace test
