Mesa (master): clover: Factor input validation of clCompileProgram into a new function v2

Tom Stellard tstellar at kemper.freedesktop.org
Fri Oct 31 20:40:28 UTC 2014


Module: Mesa
Branch: master
Commit: e5468dfa523be2a7a0d04bb9efcf8ae780957563
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e5468dfa523be2a7a0d04bb9efcf8ae780957563

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Tue Oct 21 10:31:56 2014 -0400

clover: Factor input validation of clCompileProgram into a new function v2

This factors out the validation that is common with clBuildProgram().

v2:
  - Code cleanups.

Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 src/gallium/state_trackers/clover/api/program.cpp |   33 ++++++++++++++-------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp
index a8a6291..e32312e 100644
--- a/src/gallium/state_trackers/clover/api/program.cpp
+++ b/src/gallium/state_trackers/clover/api/program.cpp
@@ -25,6 +25,25 @@
 
 using namespace clover;
 
+namespace {
+   void validate_build_program_common(const program &prog, cl_uint num_devs,
+                                      const ref_vector<device> &devs,
+                                      void (*pfn_notify)(cl_program, void *),
+                                      void *user_data) {
+
+      if ((!pfn_notify && user_data))
+         throw error(CL_INVALID_VALUE);
+
+      if (prog.kernel_ref_count())
+         throw error(CL_INVALID_OPERATION);
+
+      if (any_of([&](const device &dev) {
+               return !count(dev, prog.context().devices());
+            }, devs))
+         throw error(CL_INVALID_DEVICE);
+   }
+}
+
 CLOVER_API cl_program
 clCreateProgramWithSource(cl_context d_ctx, cl_uint count,
                           const char **strings, const size_t *lengths,
@@ -173,18 +192,12 @@ clCompileProgram(cl_program d_prog, cl_uint num_devs,
    auto opts = (p_opts ? p_opts : "");
    header_map headers;
 
-   if (bool(num_devs) != bool(d_devs) ||
-       (!pfn_notify && user_data) ||
-       bool(num_headers) != bool(header_names))
-      throw error(CL_INVALID_VALUE);
+   validate_build_program_common(prog, num_devs, devs, pfn_notify, user_data);
 
-   if (any_of([&](const device &dev) {
-            return !count(dev, prog.context().devices());
-         }, devs))
-      throw error(CL_INVALID_DEVICE);
+   if (bool(num_headers) != bool(header_names))
+      throw error(CL_INVALID_VALUE);
 
-   if (prog.kernel_ref_count() ||
-       !prog.has_source)
+   if (!prog.has_source)
       throw error(CL_INVALID_OPERATION);
 
 




More information about the mesa-commit mailing list