Commit 47a09ceab80da34fe50e90208ab64d395b1614a6

Philip Kaufmann 2012-02-09T15:15:03

added OpenCL >= 1.1 detection code, in preparation of OpenCL 1.1 global offset parameter support

diff --git a/ocl.c b/ocl.c
index 5311557..e0aafb1 100644
--- a/ocl.c
+++ b/ocl.c
@@ -302,6 +302,19 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
 	find = strstr(extensions, camo);
 	if (find)
 		clState->hasBitAlign = true;
+		
+	/* Check for OpenCL >= 1.0 support, needed for global offset parameter usage. */
+	char * devoclver = malloc(1024);
+	const char * ocl10 = "OpenCL 1.0";
+
+	status = clGetDeviceInfo(devices[gpu], CL_DEVICE_VERSION, 1024, (void *)devoclver, NULL);
+	if (status != CL_SUCCESS) {
+		applog(LOG_ERR, "Error: Failed to clGetDeviceInfo when trying to get CL_DEVICE_VERSION");
+		return NULL;
+	}
+	find = strstr(devoclver, ocl10);
+	if !(find)
+		clState->hasOpenCL11plus = true;
 
 	status = clGetDeviceInfo(devices[gpu], CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), (void *)&clState->preferred_vwidth, NULL);
 	if (status != CL_SUCCESS) {
diff --git a/ocl.h b/ocl.h
index d52bfce..ccab8b8 100644
--- a/ocl.h
+++ b/ocl.h
@@ -18,6 +18,7 @@ typedef struct {
 	cl_program program;
 	cl_mem outputBuffer;
 	bool hasBitAlign;
+	bool hasOpenCL11plus;
 	cl_uint preferred_vwidth;
 	size_t max_work_size;
 	size_t work_size;