[Mesa-dev] [PATCH 1/2] clover: Factor input validation of clCompileProgram into a new function

Tom Stellard thomas.stellard at amd.com
Tue Oct 21 08:20:21 PDT 2014


This factors out the validation that is common with clBuildProgram().
---
 src/gallium/state_trackers/clover/api/program.cpp | 36 ++++++++++++++++-------
 1 file changed, 26 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..bf32543 100644
--- a/src/gallium/state_trackers/clover/api/program.cpp
+++ b/src/gallium/state_trackers/clover/api/program.cpp
@@ -25,6 +25,27 @@
 
 using namespace clover;
 
+namespace {
+
+   void validate_build_program_common(cl_uint num_devs,
+                                      const cl_device_id *d_devs,
+                                      void *pfn_notify, void *user_data,
+                                      const program &prog,
+                                      ref_vector<device> devs) {
+      if (bool(num_devs) != bool(d_devs) ||
+          (!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 +194,13 @@ 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(num_devs, d_devs, (void*)pfn_notify,
+                                 user_data, prog, devs);
 
-   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);
 
 
-- 
1.8.5.5



More information about the mesa-dev mailing list