[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