diff options
author | Zack Rusin <zack@tungstengraphics.com> | 2008-12-14 14:08:58 -0500 |
---|---|---|
committer | Zack Rusin <zack@tungstengraphics.com> | 2008-12-14 14:08:58 -0500 |
commit | 02989ed1213af9b924e202b017fb6671682e8fe1 (patch) | |
tree | 760ec36de4ac41d98f84f5dbd0f6363eff760432 | |
parent | 6fecadca5e91deb187c4efc11e2c0a4b0e1782a8 (diff) |
moving more things to the device
-rw-r--r-- | src/api_device.cpp | 148 | ||||
-rw-r--r-- | src/device.cpp | 160 | ||||
-rw-r--r-- | src/device.h | 13 |
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 |