summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Rusin <zack@tungstengraphics.com>2008-12-14 14:08:58 -0500
committerZack Rusin <zack@tungstengraphics.com>2008-12-14 14:08:58 -0500
commit02989ed1213af9b924e202b017fb6671682e8fe1 (patch)
tree760ec36de4ac41d98f84f5dbd0f6363eff760432
parent6fecadca5e91deb187c4efc11e2c0a4b0e1782a8 (diff)
moving more things to the device
-rw-r--r--src/api_device.cpp148
-rw-r--r--src/device.cpp160
-rw-r--r--src/device.h13
3 files changed, 201 insertions, 120 deletions
diff --git a/src/api_device.cpp b/src/api_device.cpp
index 9f5f031..775cdfe 100644
--- a/src/api_device.cpp
+++ b/src/api_device.cpp
@@ -1,19 +1,42 @@
-#include <OpenCL/cl.h>
-#include <OpenCL/cl_platform.h>
+#include "OpenCL/cl.h"
+#include "OpenCL/cl_platform.h"
#include "device.h"
-#include "cpuwinsys/cpuwinsys.h"
-
#include "pipe/p_screen.h"
#include "pipe/p_format.h"
#include "pipe/p_winsys.h"
#include "util/u_memory.h"
-#include "softpipe/sp_winsys.h"
+#include <string>
// Device APIs
+struct CLConstValue {
+ CLConstValue(int _id)
+ : id(_id)
+ {}
+
+ virtual void param(size_t param_value_size,
+ void * param_value,
+ size_t *param_value_size_ret)
+ {}
+
+ int id;
+};
+template <class T>
+struct CLConstValueTemplate : public CLConstValue {
+ CLConstValueTemplate(int _id, T _value)
+ : CLConstValue(id), value(_value)
+ {}
+ T value;
+};
+
+const CLConstValue values[] = {
+ CLConstValueTemplate<std::string>(CL_DEVICE_NAME, std::string("hello")),
+ CLConstValueTemplate<int>(CL_DEVICE_TYPE, (int)3)
+};
+
static void
create_gpu_device(cl_device_id * devices,
cl_uint * num_devices,
@@ -26,8 +49,6 @@ create_cpu_device(cl_device_id * devices,
cl_uint * num_devices,
cl_uint num_entries)
{
- struct pipe_winsys *pws = cpu_winsys();
- struct pipe_screen *screen = softpipe_create_screen(pws);
Device *device = new Device(CL_DEVICE_TYPE_CPU);
devices[0] = (cl_device_id)device;
@@ -39,14 +60,6 @@ create_accel_device(cl_device_id * devices,
cl_uint * num_devices,
cl_uint num_entries)
{
-#ifdef GALLIUM_CELL
- if (!getenv("GALLIUM_NOCELL")) {
- struct cell_winsys *cws = cell_get_winsys(pixelformat);
- struct pipe_screen *screen = cell_create_screen(pws);
-
- pipe = cell_create_context(screen, cws);
- }
-#endif
}
@@ -115,107 +128,6 @@ clGetDeviceInfo(cl_device_id device,
if (!device)
return CL_INVALID_DEVICE;
- switch(opcode) {
- case CL_DEVICE_TYPE: {
- ((cl_int*)param_value)[0] = device->type();
- }
- break;
- case CL_DEVICE_VENDOR_ID:
- break;
- case CL_DEVICE_MAX_COMPUTE_UNITS:
- break;
- case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:
- break;
- case CL_DEVICE_MAX_WORK_GROUP_SIZE:
- break;
- case CL_DEVICE_MAX_WORK_ITEM_SIZES:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT:
- break;
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
- break;
- case CL_DEVICE_MAX_CLOCK_FREQUENCY:
- break;
- case CL_DEVICE_ADDRESS_BITS:
- break;
- case CL_DEVICE_MAX_READ_IMAGE_ARGS:
- break;
- case CL_DEVICE_MAX_WRITE_IMAGE_ARGS:
- break;
- case CL_DEVICE_MAX_MEM_ALLOC_SIZE:
- break;
- case CL_DEVICE_IMAGE2D_MAX_WIDTH:
- break;
- case CL_DEVICE_IMAGE2D_MAX_HEIGHT:
- break;
- case CL_DEVICE_IMAGE3D_MAX_WIDTH:
- break;
- case CL_DEVICE_IMAGE3D_MAX_HEIGHT:
- break;
- case CL_DEVICE_IMAGE3D_MAX_DEPTH:
- break;
- case CL_DEVICE_IMAGE_SUPPORT:
- break;
- case CL_DEVICE_MAX_PARAMETER_SIZE:
- break;
- case CL_DEVICE_MAX_SAMPLERS:
- break;
- case CL_DEVICE_MEM_BASE_ADDR_ALIGN:
- break;
- case CL_DEVICE_SINGLE_FP_CONFIG:
- break;
- case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:
- break;
- case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE:
- break;
- case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE:
- break;
- case CL_DEVICE_GLOBAL_MEM_SIZE:
- break;
- case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:
- break;
- case CL_DEVICE_MAX_CONSTANT_ARGS:
- break;
- case CL_DEVICE_LOCAL_MEM_TYPE:
- break;
- case CL_DEVICE_LOCAL_MEM_SIZE:
- break;
- case CL_DEVICE_ERROR_CORRECTION_SUPPORT:
- break;
- case CL_DEVICE_PROFILING_TIMER_RESOLUTION:
- break;
- case CL_DEVICE_ENDIAN_LITTLE:
- break;
- case CL_DEVICE_AVAILABLE:
- break;
- case CL_DEVICE_COMPILER_AVAILABLE:
- break;
- case CL_DEVICE_EXECUTION_CAPABILITIES:
- break;
- case CL_DEVICE_QUEUE_PROPERTIES:
- break;
- case CL_DEVICE_NAME:
- break;
- case CL_DEVICE_VENDOR:
- break;
- case CL_DRIVER_VERSION:
- break;
- case CL_DEVICE_PROFILE:
- break;
- case CL_DEVICE_VERSION:
- break;
- case CL_DEVICE_EXTENSIONS:
- break;
- default:
- return CL_INVALID_VALUE;
- }
- return CL_SUCCESS;
+ return device->info(opcode, param_value_size, param_value,
+ param_value_size_ret);
}
diff --git a/src/device.cpp b/src/device.cpp
index c8d4eae..94ec7e8 100644
--- a/src/device.cpp
+++ b/src/device.cpp
@@ -1,6 +1,166 @@
#include "device.h"
+#include "OpenCL/cl.h"
+#include "OpenCL/cl_platform.h"
+
+#include "pipe/p_screen.h"
+#include "pipe/p_format.h"
+#include "pipe/p_winsys.h"
+#include "util/u_memory.h"
+
+#include "cpuwinsys/cpuwinsys.h"
+#include "softpipe/sp_winsys.h"
+
+
+
Device::Device(cl_uint type)
: m_type(type)
{
+ switch(m_type) {
+ case CL_DEVICE_TYPE_CPU:
+ createCpuDevice();
+ break;
+ case CL_DEVICE_TYPE_GPU:
+ createGpuDevice();
+ break;
+ case CL_DEVICE_TYPE_ACCELERATOR:
+ createAcceleratorDevice();
+ break;
+ }
+}
+
+void Device::createCpuDevice()
+{
+ m_winsys = cpu_winsys();
+ m_screen = softpipe_create_screen(m_winsys);
+}
+
+void Device::createGpuDevice()
+{
+}
+
+void Device::createAcceleratorDevice()
+{
+#ifdef GALLIUM_CELL
+ if (!getenv("GALLIUM_NOCELL")) {
+ struct cell_winsys *cws = cell_get_winsys(pixelformat);
+ struct pipe_screen *screen = cell_create_screen(pws);
+
+ pipe = cell_create_context(screen, cws);
+ }
+#endif
+}
+
+cl_int Device::info(cl_device_info opcode,
+ size_t paramValueSize,
+ void * paramValue,
+ size_t * paramValueSizeRet) const
+{
+ switch (opcode) {
+ case CL_DEVICE_TYPE:
+ ((cl_int*)paramValue)[0] = type();
+ break;
+ case CL_DEVICE_VENDOR_ID:
+ break;
+ case CL_DEVICE_MAX_COMPUTE_UNITS:
+ break;
+ case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:
+ break;
+ case CL_DEVICE_MAX_WORK_GROUP_SIZE:
+ break;
+ case CL_DEVICE_MAX_WORK_ITEM_SIZES:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT:
+ break;
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
+ break;
+ case CL_DEVICE_MAX_CLOCK_FREQUENCY:
+ break;
+ case CL_DEVICE_ADDRESS_BITS:
+ break;
+ case CL_DEVICE_MAX_READ_IMAGE_ARGS:
+ break;
+ case CL_DEVICE_MAX_WRITE_IMAGE_ARGS:
+ break;
+ case CL_DEVICE_MAX_MEM_ALLOC_SIZE:
+ break;
+ case CL_DEVICE_IMAGE2D_MAX_WIDTH:
+ break;
+ case CL_DEVICE_IMAGE2D_MAX_HEIGHT:
+ break;
+ case CL_DEVICE_IMAGE3D_MAX_WIDTH:
+ break;
+ case CL_DEVICE_IMAGE3D_MAX_HEIGHT:
+ break;
+ case CL_DEVICE_IMAGE3D_MAX_DEPTH:
+ break;
+ case CL_DEVICE_IMAGE_SUPPORT:
+ break;
+ case CL_DEVICE_MAX_PARAMETER_SIZE:
+ break;
+ case CL_DEVICE_MAX_SAMPLERS:
+ break;
+ case CL_DEVICE_MEM_BASE_ADDR_ALIGN:
+ break;
+ case CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE:
+ break;
+ case CL_DEVICE_SINGLE_FP_CONFIG:
+ break;
+ case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:
+ break;
+ case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE:
+ break;
+ case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE:
+ break;
+ case CL_DEVICE_GLOBAL_MEM_SIZE:
+ break;
+ case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:
+ break;
+ case CL_DEVICE_MAX_CONSTANT_ARGS:
+ break;
+ case CL_DEVICE_LOCAL_MEM_TYPE:
+ break;
+ case CL_DEVICE_LOCAL_MEM_SIZE:
+ break;
+ case CL_DEVICE_ERROR_CORRECTION_SUPPORT:
+ break;
+ case CL_DEVICE_PROFILING_TIMER_RESOLUTION:
+ break;
+ case CL_DEVICE_ENDIAN_LITTLE:
+ break;
+ case CL_DEVICE_AVAILABLE:
+ break;
+ case CL_DEVICE_COMPILER_AVAILABLE:
+ break;
+ case CL_DEVICE_EXECUTION_CAPABILITIES:
+ break;
+ case CL_DEVICE_QUEUE_PROPERTIES:
+ break;
+ case CL_DEVICE_NAME:
+ break;
+ case CL_DEVICE_VENDOR:
+ break;
+ case CL_DRIVER_VERSION:
+ break;
+ case CL_DEVICE_PROFILE:
+ break;
+ case CL_DEVICE_VERSION:
+ break;
+ case CL_DEVICE_EXTENSIONS:
+ break;
+
+ default:
+ return CL_INVALID_VALUE;
+ break;
+ }
+
+ return CL_SUCCESS;
}
diff --git a/src/device.h b/src/device.h
index 76c6505..3fe4e85 100644
--- a/src/device.h
+++ b/src/device.h
@@ -16,11 +16,20 @@ public:
inline struct pipe_screen *screen() const;
inline struct pipe_winsys *winsys() const;
+ cl_int info(cl_device_info opcode,
+ size_t paramValueSize,
+ void * paramValue,
+ size_t * paramValueSizeRet) const;
+
+private:
+ void createCpuDevice();
+ void createGpuDevice();
+ void createAcceleratorDevice();
private:
+ const cl_uint m_type;
+
struct pipe_screen *m_screen;
struct pipe_winsys *m_winsys;
-
- cl_uint m_type;
};
inline cl_uint Device::type() const