/** * ufo_gpu_node_get_info: * @node: A #UfoGpuNodeInfo * @info: Information to be queried * * Return information about the associated OpenCL device. * * Returns: (transfer full): Information about @info. */ GValue * ufo_gpu_node_get_info (UfoGpuNode *node, UfoGpuNodeInfo info) { UfoGpuNodePrivate *priv; GValue *value; cl_ulong ulong_value; priv = UFO_GPU_NODE_GET_PRIVATE (node); value = g_new0 (GValue, 1); memset (value, 0, sizeof (GValue)); g_value_init (value, G_TYPE_ULONG); switch (info) { case UFO_GPU_NODE_INFO_GLOBAL_MEM_SIZE: UFO_RESOURCES_CHECK_CLERR (clGetDeviceInfo (priv->device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof (cl_ulong), &ulong_value, NULL)); break; case UFO_GPU_NODE_INFO_LOCAL_MEM_SIZE: UFO_RESOURCES_CHECK_CLERR (clGetDeviceInfo (priv->device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof (cl_ulong), &ulong_value, NULL)); break; } g_value_set_ulong (value, ulong_value); return value; }
static void ufo_gpu_node_init (UfoGpuNode *self) { UfoGpuNodePrivate *priv; self->priv = priv = UFO_GPU_NODE_GET_PRIVATE (self); priv->cmd_queue = NULL; }
static void ufo_gpu_node_dispose (GObject *object) { UfoGpuNodePrivate *priv; priv = UFO_GPU_NODE_GET_PRIVATE (object); if (priv->cmd_queue != NULL) { g_debug ("Release cmd_queue=%p", priv->cmd_queue); clReleaseCommandQueue (priv->cmd_queue); priv->cmd_queue = NULL; } G_OBJECT_CLASS (ufo_gpu_node_parent_class)->dispose (object); }
static void ufo_gpu_node_finalize (GObject *object) { UfoGpuNodePrivate *priv; priv = UFO_GPU_NODE_GET_PRIVATE (object); if (priv->cmd_queue != NULL) { g_debug ("Release cmd_queue=%p", (gpointer) priv->cmd_queue); UFO_RESOURCES_CHECK_CLERR (clReleaseCommandQueue (priv->cmd_queue)); priv->cmd_queue = NULL; UFO_RESOURCES_CHECK_CLERR (clReleaseContext (priv->context)); } G_OBJECT_CLASS (ufo_gpu_node_parent_class)->finalize (object); }