• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * cl_intel_context.cpp - CL intel context
3  *
4  *  Copyright (c) 2015 Intel Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * Author: Wind Yuan <feng.yuan@intel.com>
19  */
20 
21 #include "cl_intel_context.h"
22 #include "cl_device.h"
23 #include "cl_va_memory.h"
24 
25 #define OCL_EXT_NAME_CREATE_BUFFER_FROM_LIBVA_INTEL "clCreateBufferFromLibvaIntel"
26 #define OCL_EXT_NAME_CREATE_BUFFER_FROM_FD_INTEL    "clCreateBufferFromFdINTEL"
27 #define OCL_EXT_NAME_CREATE_IMAGE_FROM_LIBVA_INTEL  "clCreateImageFromLibvaIntel"
28 #define OCL_EXT_NAME_CREATE_IMAGE_FROM_FD_INTEL     "clCreateImageFromFdINTEL"
29 #define OCL_EXT_NAME_GET_MEM_OBJECT_FD_INTEL        "clGetMemObjectFdIntel"
30 
31 namespace XCam {
32 
CLIntelContext(SmartPtr<CLDevice> & device)33 CLIntelContext::CLIntelContext (SmartPtr<CLDevice> &device)
34     : CLContext (device)
35 {
36 }
37 
38 cl_mem
create_va_buffer(uint32_t bo_name)39 CLIntelContext::create_va_buffer (uint32_t bo_name)
40 {
41     cl_mem mem_id = NULL;
42     cl_int errcode = CL_SUCCESS;
43     if (!is_valid())
44         return NULL;
45 
46     clCreateBufferFromLibvaIntel_fn oclCreateBufferFromLibvaIntel =
47         (clCreateBufferFromLibvaIntel_fn) _device->get_extension_function (OCL_EXT_NAME_CREATE_BUFFER_FROM_LIBVA_INTEL);
48     XCAM_FAIL_RETURN(ERROR, oclCreateBufferFromLibvaIntel, NULL, "create buffer failed since extension was not found");
49 
50     mem_id = oclCreateBufferFromLibvaIntel (_context_id, bo_name, &errcode);
51     XCAM_FAIL_RETURN(
52         WARNING,
53         errcode == CL_SUCCESS,
54         NULL,
55         "create cl memory from va image failed");
56     return mem_id;
57 }
58 
59 cl_mem
import_dma_buffer(const cl_import_buffer_info_intel & import_info)60 CLIntelContext::import_dma_buffer (const cl_import_buffer_info_intel &import_info)
61 {
62     cl_mem mem_id = NULL;
63     cl_int errcode = CL_SUCCESS;
64     if (!is_valid())
65         return NULL;
66 
67     clCreateBufferFromFdINTEL_fn oclCreateBufferFromFdINTEL =
68         (clCreateBufferFromFdINTEL_fn) _device->get_extension_function (OCL_EXT_NAME_CREATE_BUFFER_FROM_FD_INTEL);
69     XCAM_FAIL_RETURN(ERROR, oclCreateBufferFromFdINTEL, NULL, "import buffer failed since extension was not found");
70 
71     mem_id = oclCreateBufferFromFdINTEL (_context_id, &import_info, &errcode);
72     XCAM_FAIL_RETURN(
73         WARNING,
74         errcode == CL_SUCCESS,
75         NULL,
76         "import cl memory from dma buffer failed");
77 
78     return mem_id;
79 }
80 
81 cl_mem
create_va_image(const cl_libva_image & image_info)82 CLIntelContext::create_va_image (const cl_libva_image &image_info)
83 {
84     cl_mem mem_id = NULL;
85     cl_int errcode = CL_SUCCESS;
86     if (!is_valid())
87         return NULL;
88 
89     clCreateImageFromLibvaIntel_fn oclCreateImageFromLibvaIntel =
90         (clCreateImageFromLibvaIntel_fn) _device->get_extension_function (OCL_EXT_NAME_CREATE_IMAGE_FROM_LIBVA_INTEL);
91     XCAM_FAIL_RETURN(ERROR, oclCreateImageFromLibvaIntel, NULL, "create image failed since extension was not found");
92 
93     mem_id = oclCreateImageFromLibvaIntel (_context_id, &image_info, &errcode);
94     XCAM_FAIL_RETURN(
95         WARNING,
96         errcode == CL_SUCCESS,
97         NULL,
98         "create cl memory from va image failed");
99     return mem_id;
100 }
101 
102 cl_mem
import_dma_image(const cl_import_image_info_intel & import_info)103 CLIntelContext::import_dma_image (const cl_import_image_info_intel &import_info)
104 {
105     cl_mem mem_id = NULL;
106     cl_int errcode = CL_SUCCESS;
107     if (!is_valid())
108         return NULL;
109 
110     clCreateImageFromFdINTEL_fn oclCreateImageFromFdINTEL =
111         (clCreateImageFromFdINTEL_fn) _device->get_extension_function (OCL_EXT_NAME_CREATE_IMAGE_FROM_FD_INTEL);
112     XCAM_FAIL_RETURN(ERROR, oclCreateImageFromFdINTEL, NULL, "create image failed since extension was not found");
113 
114     mem_id = oclCreateImageFromFdINTEL (_context_id, &import_info, &errcode);
115     XCAM_FAIL_RETURN(
116         WARNING,
117         errcode == CL_SUCCESS,
118         NULL,
119         "import cl memory from dma image failed, errcode:%d", errcode);
120 
121     return mem_id;
122 }
123 
124 int32_t
export_mem_fd(cl_mem mem_id)125 CLIntelContext::export_mem_fd (cl_mem mem_id)
126 {
127     cl_int errcode = CL_SUCCESS;
128     int32_t fd = -1;
129 
130     clGetMemObjectFdIntel_fn oclGetMemObjectFdIntel =
131         (clGetMemObjectFdIntel_fn) _device->get_extension_function (OCL_EXT_NAME_GET_MEM_OBJECT_FD_INTEL);
132     XCAM_FAIL_RETURN(ERROR, oclGetMemObjectFdIntel, -1, "export fd failed since extension was not found");
133 
134     XCAM_ASSERT (mem_id);
135     errcode = oclGetMemObjectFdIntel (_context_id, mem_id, &fd);
136     XCAM_FAIL_RETURN (
137         WARNING,
138         errcode == CL_SUCCESS,
139         -1,
140         "export cl mem fd failed");
141     return fd;
142 }
143 
144 };
145