1/*******************************************************************************
2 * Copyright (c) 2008-2020 The Khronos Group Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *    http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16
17#ifndef __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H
18#define __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H
19
20#include <CL/cl.h>
21#include <CL/cl_platform.h>
22#include <va/va.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/***************************************************************
29* cl_intel_sharing_format_query_va_api
30***************************************************************/
31#define cl_intel_sharing_format_query_va_api 1
32
33/* when cl_intel_va_api_media_sharing is supported */
34
35extern CL_API_ENTRY cl_int CL_API_CALL
36clGetSupportedVA_APIMediaSurfaceFormatsINTEL(
37    cl_context context,
38    cl_mem_flags flags,
39    cl_mem_object_type image_type,
40    cl_uint plane,
41    cl_uint num_entries,
42    VAImageFormat* va_api_formats,
43    cl_uint* num_surface_formats) ;
44
45typedef cl_int (CL_API_CALL *
46clGetSupportedVA_APIMediaSurfaceFormatsINTEL_fn)(
47    cl_context context,
48    cl_mem_flags flags,
49    cl_mem_object_type image_type,
50    cl_uint plane,
51    cl_uint num_entries,
52    VAImageFormat* va_api_formats,
53    cl_uint* num_surface_formats) ;
54
55/******************************************
56* cl_intel_va_api_media_sharing extension *
57*******************************************/
58
59#define cl_intel_va_api_media_sharing 1
60
61/* error codes */
62#define CL_INVALID_VA_API_MEDIA_ADAPTER_INTEL               -1098
63#define CL_INVALID_VA_API_MEDIA_SURFACE_INTEL               -1099
64#define CL_VA_API_MEDIA_SURFACE_ALREADY_ACQUIRED_INTEL      -1100
65#define CL_VA_API_MEDIA_SURFACE_NOT_ACQUIRED_INTEL          -1101
66
67/* cl_va_api_device_source_intel */
68#define CL_VA_API_DISPLAY_INTEL                             0x4094
69
70/* cl_va_api_device_set_intel */
71#define CL_PREFERRED_DEVICES_FOR_VA_API_INTEL               0x4095
72#define CL_ALL_DEVICES_FOR_VA_API_INTEL                     0x4096
73
74/* cl_context_info */
75#define CL_CONTEXT_VA_API_DISPLAY_INTEL                     0x4097
76
77/* cl_mem_info */
78#define CL_MEM_VA_API_MEDIA_SURFACE_INTEL                   0x4098
79
80/* cl_image_info */
81#define CL_IMAGE_VA_API_PLANE_INTEL                         0x4099
82
83/* cl_command_type */
84#define CL_COMMAND_ACQUIRE_VA_API_MEDIA_SURFACES_INTEL      0x409A
85#define CL_COMMAND_RELEASE_VA_API_MEDIA_SURFACES_INTEL      0x409B
86
87typedef cl_uint cl_va_api_device_source_intel;
88typedef cl_uint cl_va_api_device_set_intel;
89
90extern CL_API_ENTRY cl_int CL_API_CALL
91clGetDeviceIDsFromVA_APIMediaAdapterINTEL(
92    cl_platform_id                platform,
93    cl_va_api_device_source_intel media_adapter_type,
94    void*                         media_adapter,
95    cl_va_api_device_set_intel    media_adapter_set,
96    cl_uint                       num_entries,
97    cl_device_id*                 devices,
98    cl_uint*                      num_devices) CL_API_SUFFIX__VERSION_1_2;
99
100typedef cl_int (CL_API_CALL * clGetDeviceIDsFromVA_APIMediaAdapterINTEL_fn)(
101    cl_platform_id                platform,
102    cl_va_api_device_source_intel media_adapter_type,
103    void*                         media_adapter,
104    cl_va_api_device_set_intel    media_adapter_set,
105    cl_uint                       num_entries,
106    cl_device_id*                 devices,
107    cl_uint*                      num_devices) CL_API_SUFFIX__VERSION_1_2;
108
109extern CL_API_ENTRY cl_mem CL_API_CALL
110clCreateFromVA_APIMediaSurfaceINTEL(
111    cl_context                    context,
112    cl_mem_flags                  flags,
113    VASurfaceID*                  surface,
114    cl_uint                       plane,
115    cl_int*                       errcode_ret) CL_API_SUFFIX__VERSION_1_2;
116
117typedef cl_mem (CL_API_CALL * clCreateFromVA_APIMediaSurfaceINTEL_fn)(
118    cl_context                    context,
119    cl_mem_flags                  flags,
120    VASurfaceID*                  surface,
121    cl_uint                       plane,
122    cl_int*                       errcode_ret) CL_API_SUFFIX__VERSION_1_2;
123
124extern CL_API_ENTRY cl_int CL_API_CALL
125clEnqueueAcquireVA_APIMediaSurfacesINTEL(
126    cl_command_queue              command_queue,
127    cl_uint                       num_objects,
128    const cl_mem*                 mem_objects,
129    cl_uint                       num_events_in_wait_list,
130    const cl_event*               event_wait_list,
131    cl_event*                     event) CL_API_SUFFIX__VERSION_1_2;
132
133typedef cl_int (CL_API_CALL *clEnqueueAcquireVA_APIMediaSurfacesINTEL_fn)(
134    cl_command_queue              command_queue,
135    cl_uint                       num_objects,
136    const cl_mem*                 mem_objects,
137    cl_uint                       num_events_in_wait_list,
138    const cl_event*               event_wait_list,
139    cl_event*                     event) CL_API_SUFFIX__VERSION_1_2;
140
141extern CL_API_ENTRY cl_int CL_API_CALL
142clEnqueueReleaseVA_APIMediaSurfacesINTEL(
143    cl_command_queue              command_queue,
144    cl_uint                       num_objects,
145    const cl_mem*                 mem_objects,
146    cl_uint                       num_events_in_wait_list,
147    const cl_event*               event_wait_list,
148    cl_event*                     event) CL_API_SUFFIX__VERSION_1_2;
149
150typedef cl_int (CL_API_CALL *clEnqueueReleaseVA_APIMediaSurfacesINTEL_fn)(
151    cl_command_queue              command_queue,
152    cl_uint                       num_objects,
153    const cl_mem*                 mem_objects,
154    cl_uint                       num_events_in_wait_list,
155    const cl_event*               event_wait_list,
156    cl_event*                     event) CL_API_SUFFIX__VERSION_1_2;
157
158#ifdef __cplusplus
159}
160#endif
161
162#endif  /* __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H */
163
164