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