COMPMID-556: Static helper function for getting gws from window.

Change-Id: I3e47385b2f7a7977c2c61272f2fb30e800f39406
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/93429
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/arm_compute/core/CL/ICLKernel.h b/arm_compute/core/CL/ICLKernel.h
index 9119940..a1bc3eb 100644
--- a/arm_compute/core/CL/ICLKernel.h
+++ b/arm_compute/core/CL/ICLKernel.h
@@ -180,6 +180,13 @@
      * @return The maximum workgroup size value.
      */
     size_t get_max_workgroup_size();
+    /** Get the global work size given an execution window
+     *
+     * @param[in] window Execution window
+     *
+     * @return Global work size of the given execution window
+     */
+    static cl::NDRange gws_from_window(const Window &window);
 
 private:
     /** Add the passed array's parameters to the object's kernel's arguments starting from the index idx.
diff --git a/src/core/CL/ICLKernel.cpp b/src/core/CL/ICLKernel.cpp
index 17b58b7..13037a7 100644
--- a/src/core/CL/ICLKernel.cpp
+++ b/src/core/CL/ICLKernel.cpp
@@ -43,15 +43,14 @@
         return;
     }
 
-    if((window.x().end() - window.x().start()) == 0 || (window.y().end() - window.y().start()) == 0)
+    cl::NDRange gws = ICLKernel::gws_from_window(window);
+
+    // Check for empty NDRange
+    if(gws.dimensions() == 0)
     {
         return;
     }
 
-    cl::NDRange gws((window.x().end() - window.x().start()) / window.x().step(),
-                    (window.y().end() - window.y().start()) / window.y().step(),
-                    (window.z().end() - window.z().start()) / window.z().step());
-
     cl::NDRange valid_lws;
     if(lws_hint[0] * lws_hint[1] * lws_hint[2] > kernel.get_max_workgroup_size())
     {
@@ -182,3 +181,17 @@
     }
     return _max_workgroup_size;
 }
+
+cl::NDRange ICLKernel::gws_from_window(const Window &window)
+{
+    if((window.x().end() - window.x().start()) == 0 || (window.y().end() - window.y().start()) == 0)
+    {
+        return cl::NullRange;
+    }
+
+    cl::NDRange gws((window.x().end() - window.x().start()) / window.x().step(),
+                    (window.y().end() - window.y().start()) / window.y().step(),
+                    (window.z().end() - window.z().start()) / window.z().step());
+
+    return gws;
+}
\ No newline at end of file