summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/clover
diff options
context:
space:
mode:
authorTom Stellard <[email protected]>2014-07-25 17:12:28 -0400
committerTom Stellard <[email protected]>2014-07-28 10:10:30 -0400
commit3d636b47859ba084799a4caa34d22e622487f89e (patch)
treeb3d404f9a4f2c790154246a26753b586ebe56de1 /src/gallium/state_trackers/clover
parent7f96bea5bcb99c7eafac2bb17dfd5c5c26e6ae33 (diff)
clover: Add checks for image support to the image functions v2
Most image functions are required to return a CL_INVALID_OPERATION error when used on devices without image support. v2: - Simplified the code Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/clover')
-rw-r--r--src/gallium/state_trackers/clover/api/memory.cpp6
-rw-r--r--src/gallium/state_trackers/clover/api/sampler.cpp3
-rw-r--r--src/gallium/state_trackers/clover/api/transfer.cpp3
3 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
index d26b1c613cb..a094e74dc67 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -106,6 +106,9 @@ clCreateImage2D(cl_context d_ctx, cl_mem_flags flags,
void *host_ptr, cl_int *r_errcode) try {
auto &ctx = obj(d_ctx);
+ if (!any_of(std::mem_fn(&device::image_support), ctx.devices()))
+ throw error(CL_INVALID_OPERATION);
+
if (flags & ~(CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY |
CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR |
CL_MEM_COPY_HOST_PTR))
@@ -141,6 +144,9 @@ clCreateImage3D(cl_context d_ctx, cl_mem_flags flags,
void *host_ptr, cl_int *r_errcode) try {
auto &ctx = obj(d_ctx);
+ if (!any_of(std::mem_fn(&device::image_support), ctx.devices()))
+ throw error(CL_INVALID_OPERATION);
+
if (flags & ~(CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY |
CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR |
CL_MEM_COPY_HOST_PTR))
diff --git a/src/gallium/state_trackers/clover/api/sampler.cpp b/src/gallium/state_trackers/clover/api/sampler.cpp
index 403892b2e60..482e55a9ce9 100644
--- a/src/gallium/state_trackers/clover/api/sampler.cpp
+++ b/src/gallium/state_trackers/clover/api/sampler.cpp
@@ -31,6 +31,9 @@ clCreateSampler(cl_context d_ctx, cl_bool norm_mode,
cl_int *r_errcode) try {
auto &ctx = obj(d_ctx);
+ if (!any_of(std::mem_fn(&device::image_support), ctx.devices()))
+ throw error(CL_INVALID_OPERATION);
+
ret_error(r_errcode, CL_SUCCESS);
return new sampler(ctx, norm_mode, addr_mode, filter_mode);
diff --git a/src/gallium/state_trackers/clover/api/transfer.cpp b/src/gallium/state_trackers/clover/api/transfer.cpp
index 404ceb028b4..07d8a7307f2 100644
--- a/src/gallium/state_trackers/clover/api/transfer.cpp
+++ b/src/gallium/state_trackers/clover/api/transfer.cpp
@@ -101,6 +101,9 @@ namespace {
const vector_t &orig, const vector_t &region) {
vector_t size = { img.width(), img.height(), img.depth() };
+ if (!q.device().image_support())
+ throw error(CL_INVALID_OPERATION);
+
if (img.context() != q.context())
throw error(CL_INVALID_CONTEXT);