CLCREATECONTEXTFROMT(3clc)
π CLCREATECONTEXTFROMT π
okay so bestie, welcome to the clCreateContextFromType(3clc) page β it lives in the OpenCL Manual and it's literally your girl for spinning up a context from a device type instead of hand-picking the devices yourself. π¦
β¨ NAME β¨
clCreateContextFromType β create an OpenCL context from a device type that identifies the specific device(s) to use. π
like, you say "gimme all the GPUs" and it goes and finds them for you. no cap.
cl_context
clCreateContextFromType(const cl_context_properties *properties,
cl_device_type device_type,
void (CL_CALLBACK *pfn_notify) (const char *errinfo,
const void *private_info, size_t cb,
void *user_data), void *user_data,
cl_int *errcode_ret);
π PARAMETERS π
propertiesβ this one's a whole list of context property names plus their matching values. the way it works: every property name gets immediately followed by the value you want for it. π The list of supported properties is described in the table below. π
heads up bestie βpropertiescan also beNULL, and in that case the platform that gets selected is implementation-defined. so like, you're not choosing. the implementation is. β¨ iykyk.
and that's just part one, don't go anywhere β more of this page is coming. π«Ά
If the cl_khr_gl_sharing(3clc) extension is supported, properties points to an attribute list whose format and valid contents are identical to the properties argument of clCreateContext(3clc) β and that argument is literally this: properties specifies a list of context property names and their corresponding values. Each property name is immediately followed by the corresponding desired value. The list is terminated with 0. The list of supported properties is described in the table below. properties can be NULL, in which case the platform that is selected is implementation-defined. β¨
Okay bestie, the table has three columns: the cl_context_properties enum, the property value, and the description. Weβre serving it as a list because terminal tables are not the vibe. Same exact info, no cap. π
CL_CONTEXT_PLATFORMβ property value:cl_platform_id. Description: Specifies the platform to use. πCL_CONTEXT_INTEROP_USER_SYNCβ property value:cl_bool. Description: Specifies whether the user is responsible for synchronization between OpenCL and other APIs. Please refer to the specific sections in the OpenCL 1.2 extension specification that describe sharing with other APIs for restrictions on using this flag. IfCL_CONTEXT_INTEROP_USER_SYNCis not specified, a default ofCL_FALSEis assumed. π«ΆCL_CONTEXT_D3D10_DEVICE_KHRβ property value:ID3D10Device *. Description: Specifies theID3D10Device *to use for Direct3D 10 interoperability. The default value isNULL(applies if the extensioncl_khr_d3d10_sharing(3clc)is supported). πCL_CONTEXT_ADAPTER_D3D9_KHRβ property value:IDirect3DDevice9 *. Description: Specifies anIDirect3DDevice9to use for D3D9 intero (applies if thecl_khr_dx9_media_sharing(3clc)extension is supported). πCL_CONTEXT_ADAPTER_D3D9EX_KHRβ property value:IDirect3DDeviceEx*. Description: Specifies anIDirect3DDevice9Exto use for D3D9 interop (applies if thecl_khr_dx9_media_sharing(3clc)extension is supported). β¨CL_CONTEXT_ADAPTER_DXVA_KHRβ property value:IDXVAHD_Device *. Description: Specifies anIDXVAHD_Deviceto use for DXVA interop (applies if thecl_khr_dx9_media_sharing(3clc)extension is supported). πΈCL_GL_CONTEXT_KHRβ property value:0, OpenGL context handle. Description: OpenGL context to associated the OpenCL context with (available if thecl_khr_gl_sharing(3clc)extension is enabled). π¦CL_CGL_SHAREGROUP_KHRβ property value:0, CGL share group handle. Description: CGL share group to associate the OpenCL context with (available if thecl_khr_gl_sharing(3clc)extension is enabled). πCL_EGL_DISPLAY_KHRβ property value:EGL_NO_DISPLAY, EGLDisplay handle. Description: CGL share group to associate the OpenCL context with (available if thecl_khr_gl_sharing(3clc)extension is enabled). πCL_GLX_DISPLAY_KHRβ property value:None, X handle. Description: X Display an OpenGL context was created with respect to (available if thecl_khr_gl_sharing(3clc)extension is enabled). πCL_WGL_HDC_KHRβ property value:0, HDC handle. Description: HDC an OpenGL context was created with respect to (available if thecl_khr_gl_sharing(3clc)extension is enabled). π§CL_CONTEXT_D3D11_DEVICE_KHRβ property value:ID3D11Device *. Description: Specifies theID3D11Device *to use for Direct3D 11
okay bestie we're mid-table, mid-glow-up, so let's just keep going π
the tail end of that properties table is gossiping about interoperability. The default value is NULL* (applies if the cl_khr_d3d11_sharing(3clc) extension is supported). β¨
π device_type π
A bit-field that identifies the type of device and is described in the table below. (and yes, we're doing the table as a list because tables are not the vibe here, but every single row is intact, no cap π)
CL_DEVICE_TYPE_CPUβ An OpenCL device that is the host processor. The host processor runs the OpenCL implementations and is a single or multi-core CPU.CL_DEVICE_TYPE_GPUβ An OpenCL device that is a GPU. By this we mean that the device can also be used to accelerate a 3D API such as OpenGL or DirectX.CL_DEVICE_TYPE_ACCELERATORβ Dedicated OpenCL accelerators (for example the IBM CELL Blade). These devices communicate with the host processor using a peripheral interconnect such as PCIe.CL_DEVICE_TYPE_CUSTOMβ Dedicated accelerators that do not support programs written in OpenCL C.CL_DEVICE_TYPE_DEFAULTβ The default OpenCL device in the system. The default device cannot be aCL_DEVICE_TYPE_CUSTOMdevice.CL_DEVICE_TYPE_ALLβ All OpenCL devices available in the system exceptCL_DEVICE_TYPE_CUSTOMdevices.
π¦ pfn_notify π¦
A callback function that can be registered by the application. This callback function will be used by the OpenCL implementation to report information on errors that occur in this context. This callback function may be called asynchronously by the OpenCL implementation. It is the application's responsibility to ensure that the callback function is thread-safe. If pfn_notify is NULL, no callback function is registered. The parameters to this callback function are:
errinfois a pointer to an error string.private_infoandcbrepresent a pointer to binary data that is returned by the OpenCL implementation that can be used to log additional information helpful in debugging the error.user_datais a pointer to user supplied data.
There are a number of cases where error notifications need to be delivered due to an error that occurs outside a context. Such notifications may not be delivered through the pfn_notify callback. Where these notifications go is implementation-defined. π
πΈ user_data πΈ
Passed as the user_data argument when pfn_notify is called. user_data can be NULL.
π errcode_ret π
Return an appropriate error code. If errcode_ret is NULL, no error code is returned.
β¨ DESCRIPTION β¨
Only devices that are returned by clGetDeviceIDs(3clc) for device_type are used to create the context. The context does not reference any sub-devices that may have been created from these devices. periodt.
π NOTES π
clCreateContextFromType may return all or a subset of the actual physical devices present in the platform and that match device_type. (yes bestie, subset, it's giving mysterious π)
clCreateContextFromType and clCreateContext(3clc) perform an implicit retain. This is very helpful for 3rd party libraries, which typically get a context passed to them by the application. However, it is possible that the application may delete the context without informing the library. Allowing functions to attach to (i.e. retain) and release a context solves the problem of a context being used by a library no longer being valid. π«Ά
and we're still going, don't touch that dial π
π ERRORS π
Okay bestie, here's the tea on what goes wrong. If the context gets created all good, clCreateContextFromType hands you back a valid non-zero context and pops CL_SUCCESS into errcode_ret. But if it doesn't slay? You get a NULL back and one of these little heartbreaks sitting in errcode_ret:
CL_INVALID_PLATFORMβ happens whenpropertiesisNULLand no platform could be selected, or when the platform value you put inpropertiesisn't a valid platform. Plot twist: if thecl_khr_gl_sharing(3clc)extension is supported, this error is replaced (or not) byCL_INVALID_GL_SHAREGROUP_REFERENCE_KHRand possiblyCL_INVALID_OPERATIONβ see below, and section 9.6.4 of the spec for the full clarification. πCL_INVALID_PROPERTYβ if a context property name inpropertiesisn't a supported property name, or the value you gave for a supported property name isn't valid, or you specified the same property name more than once. Not you being extra twice. πCL_INVALID_VALUEβ ifpfn_notifyisNULLbutuser_datais notNULL. They're a package deal, bestie.CL_INVALID_DEVICE_TYPEβ ifdevice_typeis not a valid value.CL_DEVICE_NOT_AVAILABLEβ if no devices matchingdevice_typeand the property values inpropertiesare currently available. Like, they exist, but not right now. π«CL_DEVICE_NOT_FOUNDβ if no devices matchingdevice_typeand the property values inpropertieswere found at all.CL_OUT_OF_RESOURCESβ if there's a failure to allocate resources required by the OpenCL implementation on the device.CL_OUT_OF_HOST_MEMORYβ if there's a failure to allocate resources required by the OpenCL implementation on the host.CL_INVALID_D3D10_DEVICE_KHRβ if the Direct3D 10 device specified for interoperability isn't compatible with the devices against which the context is to be created (only when thecl_khr_d3d10_sharing(3clc)extension is enabled).CL_INVALID_GL_SHAREGROUP_REFERENCE_KHRβ when an invalid OpenGL context or share group object handle is specified inproperties, if thecl_khr_gl_sharing(3clc)extension is enabled.CL_INVALID_GL_SHAREGROUP_REFERENCE_KHRβ if no OpenGL or OpenGL ES context or share group is specified in the attribute list, then memory objects may not be shared, and calling any of the commands in section 9.7 will result in this error (if thecl_khr_gl_sharing(3clc)extension is enabled). No sharing, no vibes.CL_INVALID_GL_SHAREGROUP_REFERENCE_KHRβ if thecl_khr_gl_sharing(3clc)extension is enabled and a context was specified by any of the following means:- context specified for an EGL-based OpenGL ES or OpenGL implementation by setting the attributes
CL_GL_CONTEXT_KHRandCL_EGL_DISPLAY_KHR. - context was specified for a GLX-based OpenGL implementation by setting the attributes
CL_GL_CONTEXT_KHRandCL_GLX_DISPLAY_KHR. - context was specified for a WGL-based OpenGL implementation by setting the attributes
CL_GL_CONTEXT_KHRandCL_WGL_HDC_KHR.
- context specified for an EGL-based OpenGL ES or OpenGL implementation by setting the attributes
and any of the following conditions hold:
- the specified display and context attributes do not identify a valid OpenGL or OpenGL ES context.
- the specified context does not support buffer and renderbuffer objects.
- the specified context is not compatible with the OpenCL context being created β for example, it exists in a physically distinct address space, such as another hardware device, or it doesn't support sharing data with OpenCL due to implementation restrictions.
Like, they're in different universes. It's giving long-distance and it's not working out. π
CL_INVALID_GL_SHAREGROUP_REFERENCE_KHRβ if a share group was specified for a CGL-based OpenGL implementation by setting the attributeCL_CGL_SHAREGROUP_KHR, and the specified share group doesn't identify a valid CGL share group object (only if thecl_khr_gl_sharing(3clc)extension is enabled).CL_INVALID_DX9_MEDIA_ADAPTER_KHRβ if the media adapter specified for interoperability isn't compatible with the devices against which the context is to be created (only if thecl_khr_dx9_media_sharing(3clc)extension is supported).CL_INVALID_ADAPTER_KHRβ if any of the values of the propertiesCL_CONTEXT_ADAPTER_D3D9_KHR,CL_CONTEXT_ADAPTER_D3D9EX_KHRorCL_CONTEXT_ADAPTER_DXVA_KHRis non-NULLand doesn't specify a valid media adapter with which thecl_device_idsagainst which this context is to be created may interoperate. (Only if thecl_khr_dx9_media_sharing(3clc)extension is supported.)CL_INVALID_OPERATIONβ if interoperability is specified by settingCL_CONTEXT_ADAPTER_D3D9_KHR,CL_CONTEXT_ADAPTER_D3D9EX_KHRorCL_CONTEXT_ADAPTER_DXVA_KHRto a non-NULLvalue, and interoperability with another graphics API is also specified. (Only if thecl_khr_dx9_media_sharing(3clc)extension is supported.) Two graphics APIs at once? Pick a lane. π«CL_INVALID_D3D11_DEVICE_KHRβ if the Direct3D 11 device specified for interoperability isn't compatible with the devices against which the context is to be created (only if thecl_khr_d3d11_sharing(3clc)extension is supported).CL_INVALID_OPERATIONβ if Direct3D 11 interoperability is specified by settingCL_INVALID_D3D11_DEVICE_KHRto a non-NULLvalue, and interoperability with another graphics API is also specified. (Only if thecl_khr_d3d11_sharing(3clc)extension is supported.)CL_INVALID_D3D11_DEVICE_KHRβ if the value of the propertyCL_CONTEXT_D3D11_DEVICE_KHRis non-NULLand doesn't specify a valid Direct3D 11 device with which thecl_device_idsagainst which this context is to be created may interoperate. (Only if thecl_khr_d3d11_sharing(3clc)extension is supported.)
π SPECIFICATION π
OpenCL Specification[1]
1. OpenCL Specification β page 56, section 4.4 - Contexts β¨
π SEE ALSO π
clCreateContext(3clc)clGetContextInfo(3clc)clReleaseContext(3clc)clRetainContext(3clc)clGetContextInfo(3clc)classDiagram(3clc)
(Yes, clGetContextInfo(3clc) is in there twice. It said it twice because it meant it twice. Iconic behaviour, no notes. π)
π«Ά AUTHORS π«Ά
The Khronos Group
βοΈ COPYRIGHT βοΈ
Copyright Β© 2007-2011 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the condition that this copyright notice and permission notice shall be included in all copies or substantial portions of the Materials.
And that's the whole page, bestie!! πβ¨ This little masterpiece was served up by The Khronos Group, dated 01/14/2021, and it lives in your man pages as CLCREATECONTEXTFROMT(3clc). Go forth and create contexts responsibly. π
π¦π
π¦ where this page comes from
- ubuntu jammy: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- ubuntu noble: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms