summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorPierre Moreau <[email protected]>2016-12-30 00:29:20 +0100
committerFrancisco Jerez <[email protected]>2017-01-11 16:50:56 -0800
commit4e0d171d7eb6accbf8f381530eedbc9ff86b54fb (patch)
tree1fe1b0f84252a025284c886d3626fb4f7e2a9135 /src/gallium/state_trackers
parentc17b2f572449e66a035ffb7be9dc833f6d80aac5 (diff)
clover: Check for executables before enqueueing a kernel
Without this check, the kernel::bind() method would fail with a std::out_of_range exception, letting an exception escape from the library into the client, rather than returning the corresponding error code CL_INVALID_PROGRAM_EXECUTABLE. Signed-off-by: Pierre Moreau <[email protected]> Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r--src/gallium/state_trackers/clover/api/kernel.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/clover/api/kernel.cpp b/src/gallium/state_trackers/clover/api/kernel.cpp
index 73ba34abe8e..b665773d9ec 100644
--- a/src/gallium/state_trackers/clover/api/kernel.cpp
+++ b/src/gallium/state_trackers/clover/api/kernel.cpp
@@ -215,7 +215,10 @@ namespace {
}, kern.args()))
throw error(CL_INVALID_KERNEL_ARGS);
- if (!count(q.device(), kern.program().devices()))
+ // If the command queue's device is not associated to the program, we get
+ // a module, with no sections, which will also fail the following test.
+ auto &m = kern.program().build(q.device()).binary;
+ if (!any_of(type_equals(module::section::text_executable), m.secs))
throw error(CL_INVALID_PROGRAM_EXECUTABLE);
}