Change dynamic fusion API to return destination tensor info

The new dynamic fusion API is introduced in the following patch:
https://review.mlplatform.org/c/ml/ComputeLibrary/+/8906

For each operator (except Conv2D, which is migrated in the above patch), we
   - remove destination tensor from is_supported, validate and create calls
   - make create_op return ITensorInfo* to the intermediate destination object

Affected operators:
   - DepthwiseConv2D
   - Cast
   - Elementwise Ops
   - Clamp
   - Reshape
   - Resize

Resolves: COMPMID-5777
Change-Id: Ib60ec8a5f081752808455d7a7d790f2ed0627059
Signed-off-by: Gunes Bayir <gunes.bayir@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/8991
Reviewed-by: Ramy Elgammal <ramy.elgammal@arm.com>
Reviewed-by: Jakub Sujak <jakub.sujak@arm.com>
Dynamic-Fusion: Ramy Elgammal <ramy.elgammal@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/tests/validation/dynamic_fusion/gpu/cl/Add.cpp b/tests/validation/dynamic_fusion/gpu/cl/Add.cpp
index 1451ab3..0385407 100644
--- a/tests/validation/dynamic_fusion/gpu/cl/Add.cpp
+++ b/tests/validation/dynamic_fusion/gpu/cl/Add.cpp
@@ -48,7 +48,7 @@
 
 // *INDENT-OFF*
 // clang-format off
-DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
+DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(
                framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
                                                         TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),    // Invalid data type combination
                                                         TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),    // S16 is valid data type for Add
@@ -71,41 +71,7 @@
                                                        TensorInfo(TensorShape( 3U,  8U, 1U), 1, DataType::S16),
                                                        TensorInfo(TensorShape(32U, 13U, 2U, 2), 1, DataType::F32),
                                                       })),
-               framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S32),
-                                                       TensorInfo(TensorShape(48U, 11U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(15U, 23U, 3U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape( 3U,  8U, 9U), 1, DataType::S16),
-                                                       TensorInfo(TensorShape(32U, 13U, 2U, 2), 1, DataType::F32),
-                                                      })),
                framework::dataset::make("Expected", { true, false, true, true, false, true, true, false, false, true})),
-               input1_info, input2_info, output_info, expected)
-{
-    // Create a new workload sketch
-    auto              cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
-    auto              gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
-    GpuWorkloadSketch sketch{ &gpu_ctx };
-
-    // Fuse Elementwise Add
-    auto          lhs_info         = sketch.create_tensor_info(input1_info);
-    auto          rhs_info         = sketch.create_tensor_info(input2_info);
-    auto          dst_info         = sketch.create_tensor_info(output_info);
-    bool res = bool(GpuAdd::validate_op(sketch, &lhs_info, &rhs_info, &dst_info));
-    ARM_COMPUTE_EXPECT(res == expected, framework::LogLevel::ERRORS);
-}
-
-DATA_TEST_CASE(ValidateRhsInplace, framework::DatasetMode::ALL, zip(zip(
-               framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U,  1U, 1U), 1, DataType::F32), // Broadcasting allowed for lhs
-                                                        TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                      }),
-               framework::dataset::make("Input2Info",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U,  1U, 1U), 1, DataType::F32), // Broadcasting not allowed for rhs
-                                                      })),
-               framework::dataset::make("Expected", { true, false})),
                input1_info, input2_info, expected)
 {
     // Create a new workload sketch
@@ -116,29 +82,8 @@
     // Fuse Elementwise Add
     auto          lhs_info         = sketch.create_tensor_info(input1_info);
     auto          rhs_info         = sketch.create_tensor_info(input2_info);
-    bool res = bool(GpuAdd::validate_op(sketch, &lhs_info, &rhs_info, &rhs_info));
-    ARM_COMPUTE_EXPECT(res == expected, framework::LogLevel::ERRORS);
-}
 
-DATA_TEST_CASE(ValidateLhsInplace, framework::DatasetMode::ALL, zip(zip(
-               framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U,  1U, 1U), 1, DataType::F32), // Broadcasting not allowed for lhs
-                                                        TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                      }),
-               framework::dataset::make("Input2Info",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
-                                                       TensorInfo(TensorShape(32U,  1U, 1U), 1, DataType::F32), // Broadcasting allowed for rhs
-                                                      })),
-               framework::dataset::make("Expected", { false, true})),
-               input1_info, input2_info, expected)
-{
-    // Create a new workload sketch
-    auto              cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
-    auto              gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
-    GpuWorkloadSketch sketch{ &gpu_ctx };
-
-    // Fuse Elementwise Add
-    auto          lhs_info         = sketch.create_tensor_info(input1_info);
-    auto          rhs_info         = sketch.create_tensor_info(input2_info);
-    bool res = bool(GpuAdd::validate_op(sketch, &lhs_info, &rhs_info, &lhs_info));
+    bool res = bool(GpuAdd::validate_op(sketch, &lhs_info, &rhs_info));
     ARM_COMPUTE_EXPECT(res == expected, framework::LogLevel::ERRORS);
 }
 // clang-format on
diff --git a/tests/validation/dynamic_fusion/gpu/cl/Clamp.cpp b/tests/validation/dynamic_fusion/gpu/cl/Clamp.cpp
index 947201f..177c02c 100644
--- a/tests/validation/dynamic_fusion/gpu/cl/Clamp.cpp
+++ b/tests/validation/dynamic_fusion/gpu/cl/Clamp.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Arm Limited.
+ * Copyright (c) 2022-2023 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -51,33 +51,21 @@
 TEST_SUITE(CLAMP)
 // *INDENT-OFF*
 // clang-format off
-DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
+DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
                 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
                                                         TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F16),
-                                                        TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),    // Mismatching data types
-                                                        TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),    // Mismatching shapes
                                                         TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),    // Minimum value larger than maximum value
                                                     }),
-                framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
-                                                        TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F16),
-                                                        TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16),
-                                                        TensorInfo(TensorShape(30U, 11U, 2U), 1, DataType::F32),
-                                                        TensorInfo(TensorShape(30U, 11U, 2U), 1, DataType::F32),
-                                                    })),
                 framework::dataset::make("MinVal", { 0.2f,
                                                      1.5f,
-                                                     0.1f,
-                                                     3.0f,
                                                      9.0f,
                                                     })),
                 framework::dataset::make("MaxVal", { 0.5f,
                                                      2.0f,
                                                      1.0f,
-                                                     4.0f,
-                                                     1.0f,
                                                     })),
-                framework::dataset::make("Expected", { true, true, false, false, false })),
-                input_info, output_info, min_val, max_val, expected)
+                framework::dataset::make("Expected", { true, true, false })),
+                input_info, min_val, max_val, expected)
 {
     // Create a new workload sketch
     CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
@@ -86,13 +74,12 @@
 
     // Fuse Clamp
     const TensorInfo src_info = sketch.create_tensor_info(input_info);
-    const TensorInfo dst_info = sketch.create_tensor_info(output_info);
 
     ClampAttributes attributes {};
     attributes.min_val(min_val)
               .max_val(max_val);
 
-    const bool res = static_cast<bool>(GpuClamp::validate_op(sketch, &src_info, &dst_info, attributes));
+    const bool res = static_cast<bool>(GpuClamp::validate_op(sketch, &src_info, attributes));
     ARM_COMPUTE_EXPECT(res == expected, framework::LogLevel::ERRORS);
 }
 // clang-format on
diff --git a/tests/validation/dynamic_fusion/gpu/cl/DepthwiseConv2d.cpp b/tests/validation/dynamic_fusion/gpu/cl/DepthwiseConv2d.cpp
index f08cc60..b6331d7 100644
--- a/tests/validation/dynamic_fusion/gpu/cl/DepthwiseConv2d.cpp
+++ b/tests/validation/dynamic_fusion/gpu/cl/DepthwiseConv2d.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Arm Limited.
+ * Copyright (c) 2022-2023 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -53,31 +53,29 @@
 
 // *INDENT-OFF*
 // clang-format off
-DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(zip(
-                framework::dataset::make("InputInfo", { TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Mismatching data type input/weights
-                                                        TensorInfo(TensorShape(3U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Mismatching input feature maps
-                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Mismatching depth multiplier
-                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Invalid biases size
-                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Invalid biases dimensions
-                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // Invalid output size
-                                                        TensorInfo(TensorShape(8U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // patch size bigger than input width
-                                                        TensorInfo(TensorShape(8U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),    // dilation < 1
+DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(                                                                  // Explanations of failing tests
+                framework::dataset::make("InputInfo", { TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // Mismatching data type input/weights
+                                                        TensorInfo(TensorShape(3U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // Mismatching input feature maps
+                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // Mismatching depth multiplier
+                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // Invalid biases size
+                                                        TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // Invalid biases dimensions
+                                                        TensorInfo(TensorShape(8U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),                  // dilation < 1
                                                         TensorInfo(TensorShape(8U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM8, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM8_SIGNED, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM16, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM8, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM8_PER_CHANNEL, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM16, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U8, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S8, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U16, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S16, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U32, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S32, DataLayout::NHWC),    // Unsupported data type
-                                                        TensorInfo(TensorShape(32U, 13U, 8U), 1, DataType::F32, DataLayout::NCHW),    // Unsupported data layout
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM8, DataLayout::NHWC),              // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM8_SIGNED, DataLayout::NHWC),       // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM16, DataLayout::NHWC),              // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM8, DataLayout::NHWC),               // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QSYMM8_PER_CHANNEL, DataLayout::NHWC),   // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::QASYMM16, DataLayout::NHWC),             // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U8, DataLayout::NHWC),                   // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S8, DataLayout::NHWC),                   // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U16, DataLayout::NHWC),                  // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S16, DataLayout::NHWC),                  // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::U32, DataLayout::NHWC),                  // Unsupported data type
+                                                        TensorInfo(TensorShape(8U, 32U, 13U), 1, DataType::S32, DataLayout::NHWC),                  // Unsupported data type
+                                                        TensorInfo(TensorShape(32U, 13U, 8U), 1, DataType::F32, DataLayout::NCHW),                  // Unsupported data layout
                                                         TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                        TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC), // weight dimension > 3
+                                                        TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC),              // weight dimension > 3
                                                         TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC),
                                                         TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC),
                                                         TensorInfo(TensorShape(8U, 32U, 13U, 4U), 1, DataType::F32, DataLayout::NHWC),
@@ -87,8 +85,6 @@
                                                           TensorInfo(TensorShape(2U, 3U, 3U, 2U), 1, DataType::F32, DataLayout::NHWC),
                                                           TensorInfo(TensorShape(2U, 3U, 3U, 2U), 1, DataType::F32, DataLayout::NHWC),
                                                           TensorInfo(TensorShape(2U, 3U, 3U, 2U), 1, DataType::F32, DataLayout::NHWC),
-                                                          TensorInfo(TensorShape(2U, 3U, 3U, 2U), 1, DataType::F32, DataLayout::NHWC),
-                                                          TensorInfo(TensorShape(16U, 3U, 3U), 1, DataType::F32, DataLayout::NHWC),
                                                           TensorInfo(TensorShape(16U, 3U, 3U), 1, DataType::F32, DataLayout::NHWC),
                                                           TensorInfo(TensorShape(16U, 3U, 3U), 1, DataType::F32, DataLayout::NHWC),
                                                           TensorInfo(TensorShape(24U, 3U, 3U), 1, DataType::QASYMM8, DataLayout::NHWC),
@@ -115,8 +111,6 @@
                                                          TensorInfo(TensorShape(2U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(4U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(2U, 2U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(16U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(16U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(16U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(24U), 1, DataType::S32, DataLayout::NHWC),
@@ -138,34 +132,6 @@
                                                          TensorInfo(TensorShape(24U), 1, DataType::F32, DataLayout::NHWC),
                                                          TensorInfo(TensorShape(24U), 1, DataType::F32, DataLayout::NHWC),
                                                        })),
-                framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(2U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(2U, 27U, 13U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(16U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(16U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(16U, 25U, 11U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QASYMM8, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QASYMM8_SIGNED, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QSYMM16, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QSYMM8, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QSYMM8_PER_CHANNEL, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::QASYMM16, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::U8, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::S8, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::U16, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::S16, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::U32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U), 1, DataType::S32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(32U, 11U, 24U), 1, DataType::F32, DataLayout::NCHW),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 32U, 11U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 33U, 14U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 17U, 5U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                         TensorInfo(TensorShape(24U, 15U, 4U, 4U), 1, DataType::F32, DataLayout::NHWC),
-                                                       })),
                 framework::dataset::make("Padding", {  Padding2D(0, 0, 0, 0),
                                                        Padding2D(0, 0, 0, 0),
                                                        Padding2D(0, 0, 0, 0),
@@ -173,8 +139,6 @@
                                                        Padding2D(0, 0, 0, 0),
                                                        Padding2D(0, 0, 0, 0),
                                                        Padding2D(0, 0, 0, 0),
-                                                       Padding2D(0, 0, 0, 0),
-                                                       Padding2D(0, 0, 0, 0),
                                                        Padding2D(1, 1, 0, 0),
                                                        Padding2D(1, 1, 0, 0),
                                                        Padding2D(1, 1, 0, 0),
@@ -217,8 +181,6 @@
                                                        Size2D(1, 1),
                                                        Size2D(1, 1),
                                                        Size2D(1, 1),
-                                                       Size2D(1, 1),
-                                                       Size2D(1, 1),
                                                        Size2D(2, 3),
                                                        Size2D(2, 3),
                                                       })),
@@ -227,8 +189,6 @@
                                                               3,
                                                               1,
                                                               1,
-                                                              1,
-                                                              2,
                                                               2,
                                                               2,
                                                               3,
@@ -255,8 +215,6 @@
                                                               Size2D(1U, 1U),
                                                               Size2D(1U, 1U),
                                                               Size2D(1U, 1U),
-                                                              Size2D(1U, 1U),
-                                                              Size2D(20U, 1U),
                                                               Size2D(0U, 1U),
                                                               Size2D(1U, 1U),
                                                               Size2D(1U, 1U),
@@ -278,10 +236,10 @@
                                                               Size2D(1U, 1U),
                                                               Size2D(2U, 3U),
                                                              })),
-                framework::dataset::make("Expected", { false, false, false, false, false, false, false, false, true, false,
+                framework::dataset::make("Expected", { false, false, false, false, false, false, true, false,
                                                        false, false, false, false, false, false, false, false, false, false,
                                                        false, false, true, false, true, true, true })),
-                input_info, weights_info, biases_info, output_info, padding, stride, depth_multiplier, dilation, expected)
+                input_info, weights_info, biases_info, padding, stride, depth_multiplier, dilation, expected)
 {
     CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
     GpuWorkloadContext gpu_ctx = GpuWorkloadContext{ &cl_compile_ctx };
@@ -290,7 +248,6 @@
     const TensorInfo sketch_input_info   = sketch.create_tensor_info(input_info);
     const TensorInfo sketch_weights_info = sketch.create_tensor_info(weights_info);
     const TensorInfo sketch_biases_info  = sketch.create_tensor_info(biases_info);
-    const TensorInfo sketch_output_info  = sketch.create_tensor_info(output_info);
 
     DepthwiseConv2dAttributes attributes {};
     attributes.pad(padding)
@@ -298,7 +255,7 @@
               .dilation(dilation)
               .depth_multiplier(depth_multiplier);
 
-    const Status status = GpuDepthwiseConv2d::validate_op(sketch, &sketch_input_info, &sketch_weights_info, &sketch_biases_info, &sketch_output_info, attributes);
+    const Status status = GpuDepthwiseConv2d::validate_op(sketch, &sketch_input_info, &sketch_weights_info, &sketch_biases_info, attributes);
     const bool res = bool(status);
     ARM_COMPUTE_EXPECT(res == expected, framework::LogLevel::ERRORS);
 }
diff --git a/tests/validation/dynamic_fusion/gpu/cl/Reshape.cpp b/tests/validation/dynamic_fusion/gpu/cl/Reshape.cpp
index b7a71db..51822b0 100644
--- a/tests/validation/dynamic_fusion/gpu/cl/Reshape.cpp
+++ b/tests/validation/dynamic_fusion/gpu/cl/Reshape.cpp
@@ -44,17 +44,15 @@
     TensorInfo(TensorShape(9U, 5U, 7U, 3U), 1, DataType::F32),
     TensorInfo(TensorShape(8U, 4U, 6U, 4U), 1, DataType::F32),
     TensorInfo(TensorShape(8U, 4U, 6U, 4U), 1, DataType::F32), // mismatching dimensions
-    TensorInfo(TensorShape(9U, 5U, 7U, 3U), 1, DataType::F16), // mismatching types
 }),
-framework::dataset::make("OutputInfo",
+framework::dataset::make("OutputShape",
 {
-    TensorInfo(TensorShape(9U, 5U, 21U), 1, DataType::F32),
-    TensorInfo(TensorShape(8U, 24U, 4U), 1, DataType::F32),
-    TensorInfo(TensorShape(192U, 192U), 1, DataType::F32),
-    TensorInfo(TensorShape(9U, 5U, 21U), 1, DataType::F32),
+    TensorShape(9U, 5U, 21U),
+    TensorShape(8U, 24U, 4U),
+    TensorShape(192U, 192U),
 })),
-framework::dataset::make("Expected", { true, true, false, false })),
-input_info, output_info, expected)
+framework::dataset::make("Expected", { true, true, false })),
+input_info, output_shape, expected)
 {
     // Create a new workload sketch
     auto              cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
@@ -62,13 +60,12 @@
     GpuWorkloadSketch sketch{ &gpu_ctx };
 
     // Create sketch tensors
-    auto              input_shape  = input_info.tensor_shape();
-    auto              output_shape = output_info.tensor_shape();
-    auto              src_info     = sketch.create_tensor_info(input_info);
-    auto              dst_info     = sketch.create_tensor_info(output_info);
+    TensorShape input_shape = input_info.tensor_shape();
+    TensorInfo  src_info    = sketch.create_tensor_info(input_info);
+
     ReshapeAttributes attributes;
     attributes.shape(output_shape);
-    Status status = GpuReshape::validate_op(sketch, &src_info, &dst_info, attributes);
+    Status status = GpuReshape::validate_op(sketch, &src_info, attributes);
     ARM_COMPUTE_EXPECT(bool(status) == expected, framework::LogLevel::ERRORS);
 }
 
diff --git a/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp b/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp
index 3791aef..696be54 100644
--- a/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp
+++ b/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2022 Arm Limited.
+* Copyright (c) 2022-2023 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -86,8 +86,8 @@
 const auto default_input_shape  = TensorShape{ 2, 3, 3, 2 };
 const auto default_output_shape = TensorShape{ 4, 6, 3, 2 };
 
-constexpr auto default_data_type            = DataType::U8;
-constexpr auto default_data_layout          = DataLayout::NHWC;
+constexpr auto default_data_type   = DataType::U8;
+constexpr auto default_data_layout = DataLayout::NHWC;
 
 TEST_CASE(NullPtr, framework::DatasetMode::ALL)
 {
@@ -98,15 +98,10 @@
     GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
     GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-    const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-    const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+    const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
     // nullptr is given as input
-    Status status = GpuResize::validate_op(sketch, nullptr, &sketch_output_info, ResizeAttributes());
-    ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
-
-    // nullptr is given as output
-    status = GpuResize::validate_op(sketch, &sketch_input_info, nullptr, ResizeAttributes());
+    Status status = GpuResize::validate_op(sketch, nullptr, ResizeAttributes());
     ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
 }
 
@@ -137,18 +132,19 @@
 
     for(auto &kv : supported_data_types)
     {
-        const TensorInfo input_info  = TensorInfo{ default_input_shape, 1, kv.first, default_data_layout };
-        const TensorInfo output_info = TensorInfo{ default_output_shape, 1, kv.first, default_data_layout };
+        const TensorInfo input_info = TensorInfo{ default_input_shape, 1, kv.first, default_data_layout };
 
         CLCompileContext   cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
         GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
         GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-        const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-        const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+        const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
-        // nullptr is given as input
-        Status status = GpuResize::validate_op(sketch, &sketch_input_info, &sketch_output_info, ResizeAttributes());
+        ResizeAttributes attributes;
+        attributes.output_width(default_output_shape[0]); // shape is not important unless it's empty
+        attributes.output_height(default_output_shape[1]);
+
+        Status status = GpuResize::validate_op(sketch, &sketch_input_info, attributes);
         ARM_COMPUTE_EXPECT(bool(status) == kv.second, framework::LogLevel::ERRORS);
     }
 }
@@ -164,10 +160,9 @@
     GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
     GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-    const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-    const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+    const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
-    Status status = GpuResize::validate_op(sketch, &sketch_input_info, &sketch_output_info, ResizeAttributes());
+    Status status = GpuResize::validate_op(sketch, &sketch_input_info, ResizeAttributes());
     ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
 }
 
@@ -185,15 +180,14 @@
     GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
     GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-    const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-    const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+    const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
     ResizeAttributes attributes{};
     attributes.interpolation_policy(interpolation_policy)
     .sampling_policy(sampling_policy)
     .align_corners(align_corners);
 
-    Status status = GpuResize::validate_op(sketch, &sketch_input_info, &sketch_output_info, attributes);
+    Status status = GpuResize::validate_op(sketch, &sketch_input_info, attributes);
     ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
 }
 
@@ -207,13 +201,12 @@
     GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
     GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-    const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-    const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+    const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
     ResizeAttributes attributes{};
     attributes.interpolation_policy(interpolation_policy);
 
-    Status status = GpuResize::validate_op(sketch, &sketch_input_info, &sketch_output_info, attributes);
+    Status status = GpuResize::validate_op(sketch, &sketch_input_info, attributes);
     ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
 }
 
@@ -227,13 +220,12 @@
     GpuWorkloadContext gpu_ctx        = GpuWorkloadContext{ &cl_compile_ctx };
     GpuWorkloadSketch  sketch{ &gpu_ctx };
 
-    const TensorInfo sketch_input_info  = sketch.create_tensor_info(input_info);
-    const TensorInfo sketch_output_info = sketch.create_tensor_info(output_info);
+    const TensorInfo sketch_input_info = sketch.create_tensor_info(input_info);
 
     ResizeAttributes attributes{};
     attributes.interpolation_policy(interpolation_policy);
 
-    Status status = GpuResize::validate_op(sketch, &sketch_input_info, &sketch_output_info, attributes);
+    Status status = GpuResize::validate_op(sketch, &sketch_input_info, attributes);
     ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
 }