Merge branch 'origin/pghafari/hip-vdi' into lmoriche/amd-master-next
Change-Id: I22c145d39f430ca571a981687bcb034ea6e3b8a2
[ROCm/hip commit: a8b81e96b4]
This commit is contained in:
+81
-16
@@ -1,5 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.4.3)
|
cmake_minimum_required(VERSION 3.4.3)
|
||||||
project(hip)
|
project(hip)
|
||||||
|
# sample command for hip-vdi, you'll need to have vdi installed
|
||||||
|
# cmake -DHIP_COMPILER=clang -DHIP_PLATFORM=vdi ..
|
||||||
|
# cmake -DHIP_COMPILER=clang -DHIP_PLATFORM=vdi -DVDI_DIR=/extra/lmoriche/hip-vdi/vdi -DOPENCL_DIR=/extra/lmoriche/clients/lmoriche_opencl_dev2/drivers/opencl/api/opencl -DLIBVDI_STATIC_DIR=/extra/lmoriche/hip-vdi/build/vdi ..
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
# Options
|
# Options
|
||||||
@@ -104,12 +109,17 @@ add_to_config(_buildInfo HIP_COMPILER)
|
|||||||
# Determine HIP_RUNTIME
|
# Determine HIP_RUNTIME
|
||||||
# Either HCC or VDI; default is HCC
|
# Either HCC or VDI; default is HCC
|
||||||
if(NOT DEFINED ENV{HIP_RUNTIME})
|
if(NOT DEFINED ENV{HIP_RUNTIME})
|
||||||
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
set(HIP_RUNTIME "HCC" CACHE STRING "HIP Runtime")
|
set(HIP_RUNTIME "HCC" CACHE STRING "HIP Runtime")
|
||||||
else()
|
elseif (HIP_PLATFORM STREQUAL "vdi")
|
||||||
set(HIP_RUNTIME $ENV{HIP_RUNTIME} CACHE STRING "HIP Runtime")
|
set(HIP_RUNTIME "VDI" CACHE STRING "HIP Runtime")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
add_to_config(_buildInfo HIP_RUNTIME)
|
add_to_config(_buildInfo HIP_RUNTIME)
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "vdi")
|
||||||
|
set(USE_PROF_API "1")
|
||||||
|
endif()
|
||||||
|
|
||||||
# If HIP_PLATFORM is hcc, we need HCC_HOME and HSA_PATH to be defined
|
# If HIP_PLATFORM is hcc, we need HCC_HOME and HSA_PATH to be defined
|
||||||
if(HIP_PLATFORM STREQUAL "hcc")
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
@@ -213,6 +223,8 @@ add_to_config(_buildInfo COMPILE_HIP_ATP_MARKER)
|
|||||||
# Profiling API support
|
# Profiling API support
|
||||||
#############################
|
#############################
|
||||||
# Generate profiling API macros/structures header
|
# Generate profiling API macros/structures header
|
||||||
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
|
if(USE_PROF_API EQUAL 1)
|
||||||
set(PROF_API_STR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_prof_str.h")
|
set(PROF_API_STR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_prof_str.h")
|
||||||
set(PROF_API_HDR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_runtime_api.h")
|
set(PROF_API_HDR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_runtime_api.h")
|
||||||
set(PROF_API_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
set(PROF_API_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
||||||
@@ -224,7 +236,6 @@ execute_process(COMMAND sh -c "rm -f ${PROF_API_STR}; ${PROF_API_CMD}")
|
|||||||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROF_API_GEN} ${PROF_API_HDR} ${PROF_API_STR})
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROF_API_GEN} ${PROF_API_HDR} ${PROF_API_STR})
|
||||||
|
|
||||||
# Enable profiling API
|
# Enable profiling API
|
||||||
if(USE_PROF_API EQUAL 1)
|
|
||||||
find_path(PROF_API_HEADER_DIR prof_protocol.h
|
find_path(PROF_API_HEADER_DIR prof_protocol.h
|
||||||
HINTS
|
HINTS
|
||||||
${PROF_API_HEADER_PATH}
|
${PROF_API_HEADER_PATH}
|
||||||
@@ -241,6 +252,7 @@ if(USE_PROF_API EQUAL 1)
|
|||||||
MESSAGE(STATUS "Profiling API: ${PROF_API_HEADER_DIR}")
|
MESSAGE(STATUS "Profiling API: ${PROF_API_HEADER_DIR}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
# Build steps
|
# Build steps
|
||||||
@@ -258,10 +270,40 @@ endif()
|
|||||||
# Build LPL an CA (fat binary generation / fat binary decomposition tools) if
|
# Build LPL an CA (fat binary generation / fat binary decomposition tools) if
|
||||||
# platform is hcc; do this before the ugly hijacking of the compiler, since no
|
# platform is hcc; do this before the ugly hijacking of the compiler, since no
|
||||||
# HC code is involved.
|
# HC code is involved.
|
||||||
if (HIP_PLATFORM STREQUAL "hcc")
|
#if (HIP_PLATFORM STREQUAL "hcc")
|
||||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lpl_ca)
|
# add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lpl_ca)
|
||||||
endif ()
|
#endif ()
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "vdi")
|
||||||
|
# Determine HSA_PATH
|
||||||
|
if(NOT DEFINED HSA_PATH)
|
||||||
|
if(NOT DEFINED ENV{HSA_PATH})
|
||||||
|
set(HSA_PATH "/opt/rocm/hsa" CACHE PATH "Path to which HSA runtime has been installed")
|
||||||
|
else()
|
||||||
|
set(HSA_PATH $ENV{HSA_PATH} CACHE PATH "Path to which HSA runtime has been installed")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(IS_ABSOLUTE ${HSA_PATH} AND EXISTS ${HSA_PATH} AND IS_DIRECTORY ${HSA_PATH})
|
||||||
|
message(STATUS "Looking for HSA runtime in: " ${HSA_PATH})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Don't know where to find HSA runtime. Please specify absolute path using -DHSA_PATH")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(${PROJECT_SOURCE_DIR}/include)
|
||||||
|
add_subdirectory(vdi)
|
||||||
|
file(WRITE "${PROJECT_BINARY_DIR}/.hipInfo" ${_buildInfo})
|
||||||
|
|
||||||
|
|
||||||
|
# set(VDI_CXX_FLAGS "-hc -fno-gpu-rdc --amdgpu-target=gfx803 --amdgpu-target=gfx900 --amdgpu-target=gfx906 --amdgpu-target=gfx908 ")
|
||||||
|
set(HIP_VDI_BUILD_FLAGS "${HIP_VDI_BUILD_FLAGS} -fPIC ${VDI_CXX_FLAGS} -I${HSA_PATH}/include")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${HIP_VDI_BUILD_FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${HIP_VDI_BUILD_FLAGS}")
|
||||||
|
set(HCC_CXX_FLAGS "-hc -fno-gpu-rdc --amdgpu-target=gfx803 --amdgpu-target=gfx900 --amdgpu-target=gfx906 --amdgpu-target=gfx908 ")
|
||||||
|
set(HIP_HCC_BUILD_FLAGS "${HIP_HCC_BUILD_FLAGS} -fPIC ${HCC_CXX_FLAGS} -I${HSA_PATH}/include")
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "\nHSA runtime in: " ${HSA_PATH})
|
||||||
# Build hip_hcc if platform is hcc
|
# Build hip_hcc if platform is hcc
|
||||||
if(HIP_PLATFORM STREQUAL "hcc")
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/include)
|
include_directories(${PROJECT_SOURCE_DIR}/include)
|
||||||
@@ -341,7 +383,7 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
|||||||
target_include_directories(
|
target_include_directories(
|
||||||
hiprtc SYSTEM
|
hiprtc SYSTEM
|
||||||
PRIVATE ${PROJECT_SOURCE_DIR}/include ${HSA_PATH}/include)
|
PRIVATE ${PROJECT_SOURCE_DIR}/include ${HSA_PATH}/include)
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(hip_hcc PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
set_target_properties(hip_hcc PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
||||||
set_target_properties(hip_hcc PROPERTIES VISIBILITY_INLINES_HIDDEN 1)
|
set_target_properties(hip_hcc PROPERTIES VISIBILITY_INLINES_HIDDEN 1)
|
||||||
|
|
||||||
@@ -376,6 +418,7 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
|||||||
file(WRITE "${PROJECT_BINARY_DIR}/.hipInfo" ${_buildInfo})
|
file(WRITE "${PROJECT_BINARY_DIR}/.hipInfo" ${_buildInfo})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lpl_ca)
|
||||||
# Generate .hipVersion
|
# Generate .hipVersion
|
||||||
file(WRITE "${PROJECT_BINARY_DIR}/.hipVersion" ${_versionInfo})
|
file(WRITE "${PROJECT_BINARY_DIR}/.hipVersion" ${_versionInfo})
|
||||||
|
|
||||||
@@ -410,10 +453,11 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
|||||||
install(TARGETS hip_hcc_static hip_hcc DESTINATION lib)
|
install(TARGETS hip_hcc_static hip_hcc DESTINATION lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Install .hipInfo
|
|
||||||
install(FILES ${PROJECT_BINARY_DIR}/.hipInfo DESTINATION lib)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Install .hipInfo
|
||||||
|
install(FILES ${PROJECT_BINARY_DIR}/.hipInfo DESTINATION lib)
|
||||||
|
|
||||||
# Install .hipVersion
|
# Install .hipVersion
|
||||||
install(FILES ${PROJECT_BINARY_DIR}/.hipVersion DESTINATION bin)
|
install(FILES ${PROJECT_BINARY_DIR}/.hipVersion DESTINATION bin)
|
||||||
|
|
||||||
@@ -433,6 +477,9 @@ endif()
|
|||||||
if(HIP_PLATFORM STREQUAL "hcc")
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
install(TARGETS hip_hcc_static hip_hcc host device EXPORT hip-targets DESTINATION ${LIB_INSTALL_DIR})
|
install(TARGETS hip_hcc_static hip_hcc host device EXPORT hip-targets DESTINATION ${LIB_INSTALL_DIR})
|
||||||
install(EXPORT hip-targets DESTINATION ${CONFIG_PACKAGE_INSTALL_DIR} NAMESPACE hip::)
|
install(EXPORT hip-targets DESTINATION ${CONFIG_PACKAGE_INSTALL_DIR} NAMESPACE hip::)
|
||||||
|
elseif( HIP_PLATFORM STREQUAL "vdi")
|
||||||
|
# install(TARGETS hip_on_vdi host device EXPORT hip-targets DESTINATION ${LIB_INSTALL_DIR})
|
||||||
|
endif()
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
if(HIP_COMPILER STREQUAL "hcc")
|
if(HIP_COMPILER STREQUAL "hcc")
|
||||||
@@ -463,13 +510,12 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
|||||||
DESTINATION
|
DESTINATION
|
||||||
${CONFIG_PACKAGE_INSTALL_DIR}
|
${CONFIG_PACKAGE_INSTALL_DIR}
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
# Packaging steps
|
# Packaging steps
|
||||||
#############################
|
#############################
|
||||||
# Package: hip_base
|
# Package: hip_base
|
||||||
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip_base)
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip-base)
|
||||||
configure_file(packaging/hip-base.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
configure_file(packaging/hip-base.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
||||||
configure_file(packaging/hip-base.postinst ${BUILD_DIR}/postinst @ONLY)
|
configure_file(packaging/hip-base.postinst ${BUILD_DIR}/postinst @ONLY)
|
||||||
configure_file(packaging/hip-base.prerm ${BUILD_DIR}/prerm @ONLY)
|
configure_file(packaging/hip-base.prerm ${BUILD_DIR}/prerm @ONLY)
|
||||||
@@ -488,6 +534,8 @@ if (BUILD_HIPIFY_CLANG)
|
|||||||
add_dependencies(pkg_hip_base hipify-clang)
|
add_dependencies(pkg_hip_base hipify-clang)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
|
message("HCC Package\n")
|
||||||
# Package: hip_hcc
|
# Package: hip_hcc
|
||||||
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip_hcc)
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip_hcc)
|
||||||
configure_file(packaging/hip-hcc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
configure_file(packaging/hip-hcc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
||||||
@@ -501,12 +549,11 @@ add_custom_target(pkg_hip_hcc COMMAND ${CMAKE_COMMAND} .
|
|||||||
COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR}
|
COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR}
|
||||||
WORKING_DIRECTORY ${BUILD_DIR}
|
WORKING_DIRECTORY ${BUILD_DIR}
|
||||||
DEPENDS hip_hcc hip_hcc_static hiprtc)
|
DEPENDS hip_hcc hip_hcc_static hiprtc)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Package: hip_nvcc
|
# Package: hip_nvcc
|
||||||
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip_nvcc)
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip-nvcc)
|
||||||
configure_file(packaging/hip-nvcc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
configure_file(packaging/hip-nvcc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
||||||
configure_file(packaging/hip-nvcc.postinst ${BUILD_DIR}/postinst @ONLY)
|
|
||||||
configure_file(packaging/hip-nvcc.prerm ${BUILD_DIR}/prerm @ONLY)
|
|
||||||
add_custom_target(pkg_hip_nvcc COMMAND ${CMAKE_COMMAND} .
|
add_custom_target(pkg_hip_nvcc COMMAND ${CMAKE_COMMAND} .
|
||||||
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
||||||
COMMAND make package
|
COMMAND make package
|
||||||
@@ -516,7 +563,7 @@ add_custom_target(pkg_hip_nvcc COMMAND ${CMAKE_COMMAND} .
|
|||||||
WORKING_DIRECTORY ${BUILD_DIR})
|
WORKING_DIRECTORY ${BUILD_DIR})
|
||||||
|
|
||||||
# Package: hip_doc
|
# Package: hip_doc
|
||||||
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip_doc)
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/hip-doc)
|
||||||
configure_file(packaging/hip-doc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
configure_file(packaging/hip-doc.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
||||||
add_custom_target(pkg_hip_doc COMMAND ${CMAKE_COMMAND} .
|
add_custom_target(pkg_hip_doc COMMAND ${CMAKE_COMMAND} .
|
||||||
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
||||||
@@ -537,6 +584,16 @@ add_custom_target(pkg_hip_samples COMMAND ${CMAKE_COMMAND} .
|
|||||||
COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR}
|
COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR}
|
||||||
WORKING_DIRECTORY ${BUILD_DIR})
|
WORKING_DIRECTORY ${BUILD_DIR})
|
||||||
|
|
||||||
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/vdi)
|
||||||
|
configure_file(packaging/hip-vdi.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
||||||
|
add_custom_target(hip_on_vdi COMMAND ${CMAKE_COMMAND} .
|
||||||
|
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
||||||
|
COMMAND make package
|
||||||
|
COMMAND cp *.deb ${PROJECT_BINARY_DIR}
|
||||||
|
COMMAND cp *.rpm ${PROJECT_BINARY_DIR}
|
||||||
|
COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR}
|
||||||
|
WORKING_DIRECTORY ${BUILD_DIR} )
|
||||||
|
|
||||||
# Package: all
|
# Package: all
|
||||||
if(POLICY CMP0037)
|
if(POLICY CMP0037)
|
||||||
cmake_policy(PUSH)
|
cmake_policy(PUSH)
|
||||||
@@ -546,10 +603,18 @@ file(GENERATE OUTPUT ${PROJECT_BINARY_DIR}/fixnames
|
|||||||
CONTENT "pwd; for i in *.deb; do mv \"\$i\" \"\${i/.deb/-amd64.deb}\" ; done
|
CONTENT "pwd; for i in *.deb; do mv \"\$i\" \"\${i/.deb/-amd64.deb}\" ; done
|
||||||
for i in *.rpm ; do mv \$i \${i/.rpm/.x86_64.rpm} ; done
|
for i in *.rpm ; do mv \$i \${i/.rpm/.x86_64.rpm} ; done
|
||||||
")
|
")
|
||||||
add_custom_target(package
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
|
add_custom_target(package
|
||||||
COMMAND bash ${PROJECT_BINARY_DIR}/fixnames
|
COMMAND bash ${PROJECT_BINARY_DIR}/fixnames
|
||||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||||
DEPENDS pkg_hip_base pkg_hip_hcc pkg_hip_nvcc pkg_hip_doc pkg_hip_samples)
|
DEPENDS pkg_hip_base pkg_hip_hcc pkg_hip_nvcc pkg_hip_doc pkg_hip_samples)
|
||||||
|
elseif(HIP_PLATFORM STREQUAL "vdi")
|
||||||
|
add_custom_target(package
|
||||||
|
COMMAND bash ${PROJECT_BINARY_DIR}/fixnames
|
||||||
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||||
|
DEPENDS pkg_hip_base hip_on_vdi pkg_hip_nvcc pkg_hip_doc pkg_hip_samples)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(POLICY CMP0037)
|
if(POLICY CMP0037)
|
||||||
cmake_policy(POP)
|
cmake_policy(POP)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,136 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008-2015 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
||||||
|
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
|
||||||
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
|
||||||
|
* https://www.khronos.org/registry/
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OPENCL_CL_EGL_H
|
||||||
|
#define __OPENCL_CL_EGL_H
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Command type for events created with clEnqueueAcquireEGLObjectsKHR */
|
||||||
|
#define CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR 0x202F
|
||||||
|
#define CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR 0x202D
|
||||||
|
#define CL_COMMAND_RELEASE_EGL_OBJECTS_KHR 0x202E
|
||||||
|
|
||||||
|
/* Error type for clCreateFromEGLImageKHR */
|
||||||
|
#define CL_INVALID_EGL_OBJECT_KHR -1093
|
||||||
|
#define CL_EGL_RESOURCE_NOT_ACQUIRED_KHR -1092
|
||||||
|
|
||||||
|
/* CLeglImageKHR is an opaque handle to an EGLImage */
|
||||||
|
typedef void* CLeglImageKHR;
|
||||||
|
|
||||||
|
/* CLeglDisplayKHR is an opaque handle to an EGLDisplay */
|
||||||
|
typedef void* CLeglDisplayKHR;
|
||||||
|
|
||||||
|
/* CLeglSyncKHR is an opaque handle to an EGLSync object */
|
||||||
|
typedef void* CLeglSyncKHR;
|
||||||
|
|
||||||
|
/* properties passed to clCreateFromEGLImageKHR */
|
||||||
|
typedef intptr_t cl_egl_image_properties_khr;
|
||||||
|
|
||||||
|
|
||||||
|
#define cl_khr_egl_image 1
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clCreateFromEGLImageKHR(cl_context /* context */,
|
||||||
|
CLeglDisplayKHR /* egldisplay */,
|
||||||
|
CLeglImageKHR /* eglimage */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
const cl_egl_image_properties_khr * /* properties */,
|
||||||
|
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromEGLImageKHR_fn)(
|
||||||
|
cl_context context,
|
||||||
|
CLeglDisplayKHR egldisplay,
|
||||||
|
CLeglImageKHR eglimage,
|
||||||
|
cl_mem_flags flags,
|
||||||
|
const cl_egl_image_properties_khr * properties,
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueAcquireEGLObjectsKHR(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireEGLObjectsKHR_fn)(
|
||||||
|
cl_command_queue command_queue,
|
||||||
|
cl_uint num_objects,
|
||||||
|
const cl_mem * mem_objects,
|
||||||
|
cl_uint num_events_in_wait_list,
|
||||||
|
const cl_event * event_wait_list,
|
||||||
|
cl_event * event);
|
||||||
|
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueReleaseEGLObjectsKHR(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseEGLObjectsKHR_fn)(
|
||||||
|
cl_command_queue command_queue,
|
||||||
|
cl_uint num_objects,
|
||||||
|
const cl_mem * mem_objects,
|
||||||
|
cl_uint num_events_in_wait_list,
|
||||||
|
const cl_event * event_wait_list,
|
||||||
|
cl_event * event);
|
||||||
|
|
||||||
|
|
||||||
|
#define cl_khr_egl_event 1
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_event CL_API_CALL
|
||||||
|
clCreateEventFromEGLSyncKHR(cl_context /* context */,
|
||||||
|
CLeglSyncKHR /* sync */,
|
||||||
|
CLeglDisplayKHR /* display */,
|
||||||
|
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_event (CL_API_CALL *clCreateEventFromEGLSyncKHR_fn)(
|
||||||
|
cl_context context,
|
||||||
|
CLeglSyncKHR sync,
|
||||||
|
CLeglDisplayKHR display,
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __OPENCL_CL_EGL_H */
|
||||||
@@ -0,0 +1,853 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008-2015 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
||||||
|
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
|
||||||
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
|
||||||
|
* https://www.khronos.org/registry/
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* $Revision: 11928 $ on $Date: 2010-07-13 09:04:56 -0700 (Tue, 13 Jul 2010) $ */
|
||||||
|
|
||||||
|
/* cl_ext.h contains OpenCL extensions which don't have external */
|
||||||
|
/* (OpenGL, D3D) dependencies. */
|
||||||
|
|
||||||
|
#ifndef __CL_EXT_H
|
||||||
|
#define __CL_EXT_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <OpenCL/cl.h>
|
||||||
|
#include <AvailabilityMacros.h>
|
||||||
|
#else
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* cl_khr_fp16 extension - no extension #define since it has no functions */
|
||||||
|
#define CL_DEVICE_HALF_FP_CONFIG 0x1033
|
||||||
|
|
||||||
|
/* Memory object destruction
|
||||||
|
*
|
||||||
|
* Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR
|
||||||
|
*
|
||||||
|
* Registers a user callback function that will be called when the memory object is deleted and its resources
|
||||||
|
* freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback
|
||||||
|
* stack associated with memobj. The registered user callback functions are called in the reverse order in
|
||||||
|
* which they were registered. The user callback functions are called and then the memory object is deleted
|
||||||
|
* and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be
|
||||||
|
* notified when the memory referenced by host_ptr, specified when the memory object is created and used as
|
||||||
|
* the storage bits for the memory object, can be reused or freed.
|
||||||
|
*
|
||||||
|
* The application may not call CL api's with the cl_mem object passed to the pfn_notify.
|
||||||
|
*
|
||||||
|
* Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
|
||||||
|
* before using.
|
||||||
|
*/
|
||||||
|
#define cl_APPLE_SetMemObjectDestructor 1
|
||||||
|
cl_int CL_API_ENTRY clSetMemObjectDestructorAPPLE( cl_mem /* memobj */,
|
||||||
|
void (* /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/),
|
||||||
|
void * /*user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
|
||||||
|
/* Context Logging Functions
|
||||||
|
*
|
||||||
|
* The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext().
|
||||||
|
* Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
|
||||||
|
* before using.
|
||||||
|
*
|
||||||
|
* clLogMessagesToSystemLog fowards on all log messages to the Apple System Logger
|
||||||
|
*/
|
||||||
|
#define cl_APPLE_ContextLoggingFunctions 1
|
||||||
|
extern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE( const char * /* errstr */,
|
||||||
|
const void * /* private_info */,
|
||||||
|
size_t /* cb */,
|
||||||
|
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */
|
||||||
|
extern void CL_API_ENTRY clLogMessagesToStdoutAPPLE( const char * /* errstr */,
|
||||||
|
const void * /* private_info */,
|
||||||
|
size_t /* cb */,
|
||||||
|
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */
|
||||||
|
extern void CL_API_ENTRY clLogMessagesToStderrAPPLE( const char * /* errstr */,
|
||||||
|
const void * /* private_info */,
|
||||||
|
size_t /* cb */,
|
||||||
|
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* cl_khr_icd extension *
|
||||||
|
************************/
|
||||||
|
#define cl_khr_icd 1
|
||||||
|
|
||||||
|
/* cl_platform_info */
|
||||||
|
#define CL_PLATFORM_ICD_SUFFIX_KHR 0x0920
|
||||||
|
|
||||||
|
/* Additional Error Codes */
|
||||||
|
#define CL_PLATFORM_NOT_FOUND_KHR -1001
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clIcdGetPlatformIDsKHR(cl_uint /* num_entries */,
|
||||||
|
cl_platform_id * /* platforms */,
|
||||||
|
cl_uint * /* num_platforms */);
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(
|
||||||
|
cl_uint /* num_entries */,
|
||||||
|
cl_platform_id * /* platforms */,
|
||||||
|
cl_uint * /* num_platforms */);
|
||||||
|
|
||||||
|
|
||||||
|
/* Extension: cl_khr_image2D_buffer
|
||||||
|
*
|
||||||
|
* This extension allows a 2D image to be created from a cl_mem buffer without a copy.
|
||||||
|
* The type associated with a 2D image created from a buffer in an OpenCL program is image2d_t.
|
||||||
|
* Both the sampler and sampler-less read_image built-in functions are supported for 2D images
|
||||||
|
* and 2D images created from a buffer. Similarly, the write_image built-ins are also supported
|
||||||
|
* for 2D images created from a buffer.
|
||||||
|
*
|
||||||
|
* When the 2D image from buffer is created, the client must specify the width,
|
||||||
|
* height, image format (i.e. channel order and channel data type) and optionally the row pitch
|
||||||
|
*
|
||||||
|
* The pitch specified must be a multiple of CL_DEVICE_IMAGE_PITCH_ALIGNMENT pixels.
|
||||||
|
* The base address of the buffer must be aligned to CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT pixels.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
* cl_khr_initalize_memory extension *
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
#define CL_CONTEXT_MEMORY_INITIALIZE_KHR 0x2030
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************
|
||||||
|
* cl_khr_terminate_context extension *
|
||||||
|
**************************************/
|
||||||
|
|
||||||
|
#define CL_DEVICE_TERMINATE_CAPABILITY_KHR 0x2031
|
||||||
|
#define CL_CONTEXT_TERMINATE_KHR 0x2032
|
||||||
|
|
||||||
|
#define cl_khr_terminate_context 1
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL *clTerminateContextKHR_fn)(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extension: cl_khr_spir
|
||||||
|
*
|
||||||
|
* This extension adds support to create an OpenCL program object from a
|
||||||
|
* Standard Portable Intermediate Representation (SPIR) instance
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CL_DEVICE_SPIR_VERSIONS 0x40E0
|
||||||
|
#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE 0x40E1
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* cl_nv_device_attribute_query extension *
|
||||||
|
******************************************/
|
||||||
|
/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */
|
||||||
|
#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000
|
||||||
|
#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001
|
||||||
|
#define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002
|
||||||
|
#define CL_DEVICE_WARP_SIZE_NV 0x4003
|
||||||
|
#define CL_DEVICE_GPU_OVERLAP_NV 0x4004
|
||||||
|
#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005
|
||||||
|
#define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* cl_amd_device_memory_flags *
|
||||||
|
*********************************/
|
||||||
|
#define cl_amd_device_memory_flags 1
|
||||||
|
#define CL_MEM_USE_PERSISTENT_MEM_AMD (1 << 6) // Alloc from GPU's CPU visible heap
|
||||||
|
|
||||||
|
/* cl_device_info */
|
||||||
|
#define CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT 0x4032
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* cl_amd_device_attribute_query *
|
||||||
|
*********************************/
|
||||||
|
#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036
|
||||||
|
#define CL_DEVICE_TOPOLOGY_AMD 0x4037
|
||||||
|
#define CL_DEVICE_BOARD_NAME_AMD 0x4038
|
||||||
|
#define CL_DEVICE_GLOBAL_FREE_MEMORY_AMD 0x4039
|
||||||
|
#define CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD 0x4040
|
||||||
|
#define CL_DEVICE_SIMD_WIDTH_AMD 0x4041
|
||||||
|
#define CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD 0x4042
|
||||||
|
#define CL_DEVICE_WAVEFRONT_WIDTH_AMD 0x4043
|
||||||
|
#define CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD 0x4044
|
||||||
|
#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD 0x4045
|
||||||
|
#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD 0x4046
|
||||||
|
#define CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD 0x4047
|
||||||
|
#define CL_DEVICE_LOCAL_MEM_BANKS_AMD 0x4048
|
||||||
|
#define CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD 0x4049
|
||||||
|
#define CL_DEVICE_GFXIP_MAJOR_AMD 0x404A
|
||||||
|
#define CL_DEVICE_GFXIP_MINOR_AMD 0x404B
|
||||||
|
#define CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD 0x404C
|
||||||
|
#define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_AMD 0x4030
|
||||||
|
#define CL_DEVICE_MAX_WORK_GROUP_SIZE_AMD 0x4031
|
||||||
|
#define CL_DEVICE_PREFERRED_CONSTANT_BUFFER_SIZE_AMD 0x4033
|
||||||
|
#define CL_DEVICE_PCIE_ID_AMD 0x4034
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct { cl_uint type; cl_uint data[5]; } raw;
|
||||||
|
struct { cl_uint type; cl_uchar unused[17]; cl_uchar bus; cl_uchar device; cl_uchar function; } pcie;
|
||||||
|
} cl_device_topology_amd;
|
||||||
|
|
||||||
|
#define CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD 1
|
||||||
|
|
||||||
|
/**************************
|
||||||
|
* cl_amd_offline_devices *
|
||||||
|
**************************/
|
||||||
|
#define CL_CONTEXT_OFFLINE_DEVICES_AMD 0x403F
|
||||||
|
|
||||||
|
/********************************
|
||||||
|
* cl_amd_bus_addressable_memory *
|
||||||
|
********************************/
|
||||||
|
|
||||||
|
/* cl_mem flag - bitfield */
|
||||||
|
#define CL_MEM_BUS_ADDRESSABLE_AMD (1<<30)
|
||||||
|
#define CL_MEM_EXTERNAL_PHYSICAL_AMD (1<<31)
|
||||||
|
|
||||||
|
#define CL_COMMAND_WAIT_SIGNAL_AMD 0x4080
|
||||||
|
#define CL_COMMAND_WRITE_SIGNAL_AMD 0x4081
|
||||||
|
#define CL_COMMAND_MAKE_BUFFERS_RESIDENT_AMD 0x4082
|
||||||
|
|
||||||
|
typedef struct _cl_bus_address_amd
|
||||||
|
{
|
||||||
|
cl_ulong surface_bus_address;
|
||||||
|
cl_ulong marker_bus_address;
|
||||||
|
} cl_bus_address_amd;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueWaitSignalAMD_fn)( cl_command_queue /*command_queue*/,
|
||||||
|
cl_mem /*mem_object*/,
|
||||||
|
cl_uint /*value*/,
|
||||||
|
cl_uint /*num_events*/,
|
||||||
|
const cl_event * /*event_wait_list*/,
|
||||||
|
cl_event * /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueWriteSignalAMD_fn)( cl_command_queue /*command_queue*/,
|
||||||
|
cl_mem /*mem_object*/,
|
||||||
|
cl_uint /*value*/,
|
||||||
|
cl_ulong /*offset*/,
|
||||||
|
cl_uint /*num_events*/,
|
||||||
|
const cl_event * /*event_list*/,
|
||||||
|
cl_event * /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueMakeBuffersResidentAMD_fn)( cl_command_queue /*command_queue*/,
|
||||||
|
cl_uint /*num_mem_objs*/,
|
||||||
|
cl_mem * /*mem_objects*/,
|
||||||
|
cl_bool /*blocking_make_resident*/,
|
||||||
|
cl_bus_address_amd * /*bus_addresses*/,
|
||||||
|
cl_uint /*num_events*/,
|
||||||
|
const cl_event * /*event_list*/,
|
||||||
|
cl_event * /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
/**********************
|
||||||
|
* cl_amd_liquid_flash *
|
||||||
|
***********************/
|
||||||
|
#define cl_amd_liquid_flash 1
|
||||||
|
|
||||||
|
#define CL_COMMAND_READ_SSG_FILE_AMD 0x4083
|
||||||
|
#define CL_COMMAND_WRITE_SSG_FILE_AMD 0x4087
|
||||||
|
|
||||||
|
#define CL_INVALID_FILE_OBJECT_AMD 0x4084
|
||||||
|
|
||||||
|
typedef struct _cl_file_amd * cl_file_amd;
|
||||||
|
|
||||||
|
typedef cl_uint cl_file_flags_amd;
|
||||||
|
#define CL_FILE_READ_ONLY_AMD (1 << 0)
|
||||||
|
#define CL_FILE_WRITE_ONLY_AMD (1 << 1)
|
||||||
|
#define CL_FILE_READ_WRITE_AMD (1 << 2)
|
||||||
|
|
||||||
|
typedef cl_uint cl_file_info_amd;
|
||||||
|
#define CL_FILE_BLOCK_SIZE_AMD 0x4085
|
||||||
|
#define CL_FILE_SIZE_AMD 0x4086
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_file_amd
|
||||||
|
(CL_API_CALL * clCreateSsgFileObjectAMD_fn)(cl_context /*context*/,
|
||||||
|
cl_file_flags_amd /*flags*/,
|
||||||
|
const wchar_t * /*file_name*/,
|
||||||
|
cl_int * /*errcode_ret*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clGetSsgFileObjectInfoAMD_fn)(cl_file_amd /* file */,
|
||||||
|
cl_file_info_amd /* param_name */,
|
||||||
|
size_t /* param_value_size */,
|
||||||
|
void * /* param_value */,
|
||||||
|
size_t * /* param_value_size_ret */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clRetainSsgFileObjectAMD_fn)( cl_file_amd /*file*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clReleaseSsgFileObjectAMD_fn)( cl_file_amd /*file*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueReadSsgFileAMD_fn)(cl_command_queue /*command_queue*/,
|
||||||
|
cl_mem /*buffer*/,
|
||||||
|
cl_bool /*blocking_write*/,
|
||||||
|
size_t /*buffer_offset*/,
|
||||||
|
size_t /*cb*/,
|
||||||
|
cl_file_amd /*file*/,
|
||||||
|
size_t /*file_offset*/,
|
||||||
|
cl_uint /*num_events_in_wait_list*/,
|
||||||
|
const cl_event * /*event_wait_list*/,
|
||||||
|
cl_event * /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueWriteSsgFileAMD_fn)(cl_command_queue /*command_queue*/,
|
||||||
|
cl_mem /*buffer*/,
|
||||||
|
cl_bool /*blocking_read*/,
|
||||||
|
size_t /*buffer_offset*/,
|
||||||
|
size_t /*cb*/,
|
||||||
|
cl_file_amd /*file*/,
|
||||||
|
size_t /*file_offset*/,
|
||||||
|
cl_uint /*num_events_in_wait_list*/,
|
||||||
|
const cl_event * /*event_wait_list*/,
|
||||||
|
cl_event * /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
/*************************
|
||||||
|
* cl_amd_copy_buffer_p2p *
|
||||||
|
**************************/
|
||||||
|
#define CL_DEVICE_NUM_P2P_DEVICES_AMD 0x4088
|
||||||
|
#define CL_DEVICE_P2P_DEVICES_AMD 0x4089
|
||||||
|
|
||||||
|
#define cl_amd_copy_buffer_p2p 1
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL * clEnqueueCopyBufferP2PAMD_fn)(cl_command_queue /*command_queue*/,
|
||||||
|
cl_mem /*src_buffer*/,
|
||||||
|
cl_mem /*dst_buffer*/,
|
||||||
|
size_t /*src_offset*/,
|
||||||
|
size_t /*dst_offset*/,
|
||||||
|
size_t /*cb*/,
|
||||||
|
cl_uint /*num_events_in_wait_list*/,
|
||||||
|
const cl_event* /*event_wait_list*/,
|
||||||
|
cl_event* /*event*/) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
/***********************************
|
||||||
|
* cl_amd_assembly_program extension *
|
||||||
|
***********************************/
|
||||||
|
#define cl_amd_assembly_program 1
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_program (CL_API_CALL * clCreateProgramWithAssemblyAMD_fn) (
|
||||||
|
cl_context /* context */,
|
||||||
|
cl_uint /* count */,
|
||||||
|
const char** /* strings */,
|
||||||
|
const size_t* /* lengths */,
|
||||||
|
cl_int* /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_2_0
|
||||||
|
/********************************
|
||||||
|
* cl_amd_planar_yuv *
|
||||||
|
********************************/
|
||||||
|
|
||||||
|
/* cl_mem flag - bitfield */
|
||||||
|
#define CL_YUV_IMAGE_Y_PLANE_AMD 0x0
|
||||||
|
#define CL_YUV_IMAGE_UV_PLANE_AMD 0x1
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_mem
|
||||||
|
(CL_API_CALL * clGetPlaneFromImageAMD_fn)(cl_context /*context*/,
|
||||||
|
cl_mem /*mem*/,
|
||||||
|
cl_uint /*plane*/,
|
||||||
|
cl_int * /*errcode_ret*/) CL_EXT_SUFFIX__VERSION_2_0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// <amd_internal>
|
||||||
|
/***************************
|
||||||
|
* cl_amd_command_intercept *
|
||||||
|
***************************/
|
||||||
|
#define CL_CONTEXT_COMMAND_INTERCEPT_CALLBACK_AMD 0x403D
|
||||||
|
#define CL_QUEUE_COMMAND_INTERCEPT_ENABLE_AMD (1ull << 63)
|
||||||
|
|
||||||
|
typedef cl_int (CL_CALLBACK * intercept_callback_fn)(cl_event, cl_int *);
|
||||||
|
|
||||||
|
/**************************
|
||||||
|
* cl_amd_command_queue_info *
|
||||||
|
**************************/
|
||||||
|
#define CL_QUEUE_THREAD_HANDLE_AMD 0x403E
|
||||||
|
|
||||||
|
/* cl_kernel_exec_info for DVR DOPP texture support */
|
||||||
|
#define CL_KERNEL_EXEC_INFO_NEW_VCOP_AMD 0x4120
|
||||||
|
#define CL_KERNEL_EXEC_INFO_PFPA_VCOP_AMD 0x4121
|
||||||
|
|
||||||
|
/*************************
|
||||||
|
* cl_amd_object_metadata *
|
||||||
|
**************************/
|
||||||
|
#define cl_amd_object_metadata 1
|
||||||
|
|
||||||
|
typedef size_t cl_key_amd;
|
||||||
|
|
||||||
|
#define CL_INVALID_OBJECT_AMD 0x403A
|
||||||
|
#define CL_INVALID_KEY_AMD 0x403B
|
||||||
|
#define CL_PLATFORM_MAX_KEYS_AMD 0x403C
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_key_amd (CL_API_CALL * clCreateKeyAMD_fn)(
|
||||||
|
cl_platform_id /* platform */,
|
||||||
|
void (CL_CALLBACK * /* destructor */)( void* /* old_value */),
|
||||||
|
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL * clObjectGetValueForKeyAMD_fn)(
|
||||||
|
void * /* object */,
|
||||||
|
cl_key_amd /* key */,
|
||||||
|
void ** /* ret_val */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL * clObjectSetValueForKeyAMD_fn)(
|
||||||
|
void * /* object */,
|
||||||
|
cl_key_amd /* key */,
|
||||||
|
void * /* value */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
// </amd_internal>
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* cl_arm_printf extension
|
||||||
|
*********************************/
|
||||||
|
#define CL_PRINTF_CALLBACK_ARM 0x40B0
|
||||||
|
#define CL_PRINTF_BUFFERSIZE_ARM 0x40B1
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_1_1
|
||||||
|
/***********************************
|
||||||
|
* cl_ext_device_fission extension *
|
||||||
|
***********************************/
|
||||||
|
#define cl_ext_device_fission 1
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
(CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_ulong cl_device_partition_property_ext;
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clCreateSubDevicesEXT( cl_device_id /*in_device*/,
|
||||||
|
const cl_device_partition_property_ext * /* properties */,
|
||||||
|
cl_uint /*num_entries*/,
|
||||||
|
cl_device_id * /*out_devices*/,
|
||||||
|
cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
( CL_API_CALL * clCreateSubDevicesEXT_fn)( cl_device_id /*in_device*/,
|
||||||
|
const cl_device_partition_property_ext * /* properties */,
|
||||||
|
cl_uint /*num_entries*/,
|
||||||
|
cl_device_id * /*out_devices*/,
|
||||||
|
cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
/* cl_device_partition_property_ext */
|
||||||
|
#define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050
|
||||||
|
#define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051
|
||||||
|
#define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052
|
||||||
|
#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053
|
||||||
|
|
||||||
|
/* clDeviceGetInfo selectors */
|
||||||
|
#define CL_DEVICE_PARENT_DEVICE_EXT 0x4054
|
||||||
|
#define CL_DEVICE_PARTITION_TYPES_EXT 0x4055
|
||||||
|
#define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056
|
||||||
|
#define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057
|
||||||
|
#define CL_DEVICE_PARTITION_STYLE_EXT 0x4058
|
||||||
|
|
||||||
|
/* clGetImageInfo enum */
|
||||||
|
#define CL_IMAGE_BYTE_PITCH_AMD 0x4059
|
||||||
|
|
||||||
|
/* error codes */
|
||||||
|
#define CL_DEVICE_PARTITION_FAILED_EXT -1057
|
||||||
|
#define CL_INVALID_PARTITION_COUNT_EXT -1058
|
||||||
|
#define CL_INVALID_PARTITION_NAME_EXT -1059
|
||||||
|
|
||||||
|
/* CL_AFFINITY_DOMAINs */
|
||||||
|
#define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1
|
||||||
|
#define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2
|
||||||
|
#define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3
|
||||||
|
#define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4
|
||||||
|
#define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10
|
||||||
|
#define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100
|
||||||
|
|
||||||
|
/* cl_device_partition_property_ext list terminators */
|
||||||
|
#define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0)
|
||||||
|
#define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0)
|
||||||
|
#define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1)
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* cl_qcom_ext_host_ptr extension
|
||||||
|
*********************************/
|
||||||
|
|
||||||
|
#define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29)
|
||||||
|
|
||||||
|
#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0
|
||||||
|
#define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1
|
||||||
|
#define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2
|
||||||
|
#define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3
|
||||||
|
#define CL_MEM_HOST_UNCACHED_QCOM 0x40A4
|
||||||
|
#define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5
|
||||||
|
#define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6
|
||||||
|
#define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7
|
||||||
|
|
||||||
|
typedef cl_uint cl_image_pitch_info_qcom;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clGetDeviceImageInfoQCOM(cl_device_id device,
|
||||||
|
size_t image_width,
|
||||||
|
size_t image_height,
|
||||||
|
const cl_image_format *image_format,
|
||||||
|
cl_image_pitch_info_qcom param_name,
|
||||||
|
size_t param_value_size,
|
||||||
|
void *param_value,
|
||||||
|
size_t *param_value_size_ret);
|
||||||
|
|
||||||
|
typedef struct _cl_mem_ext_host_ptr
|
||||||
|
{
|
||||||
|
/* Type of external memory allocation. */
|
||||||
|
/* Legal values will be defined in layered extensions. */
|
||||||
|
cl_uint allocation_type;
|
||||||
|
|
||||||
|
/* Host cache policy for this external memory allocation. */
|
||||||
|
cl_uint host_cache_policy;
|
||||||
|
|
||||||
|
} cl_mem_ext_host_ptr;
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* cl_qcom_ion_host_ptr extension
|
||||||
|
*********************************/
|
||||||
|
|
||||||
|
#define CL_MEM_ION_HOST_PTR_QCOM 0x40A8
|
||||||
|
|
||||||
|
typedef struct _cl_mem_ion_host_ptr
|
||||||
|
{
|
||||||
|
/* Type of external memory allocation. */
|
||||||
|
/* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */
|
||||||
|
cl_mem_ext_host_ptr ext_host_ptr;
|
||||||
|
|
||||||
|
/* ION file descriptor */
|
||||||
|
int ion_filedesc;
|
||||||
|
|
||||||
|
/* Host pointer to the ION allocated memory */
|
||||||
|
void* ion_hostptr;
|
||||||
|
|
||||||
|
} cl_mem_ion_host_ptr;
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_1_1 */
|
||||||
|
|
||||||
|
#if defined(CL_VERSION_1_2)
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* cl_img_yuv_image extension *
|
||||||
|
******************************************/
|
||||||
|
|
||||||
|
/* Image formats used in clCreateImage */
|
||||||
|
#define CL_NV21_IMG 0x40D0
|
||||||
|
#define CL_YV12_IMG 0x40D1
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* cl_img_cached_allocations extension *
|
||||||
|
******************************************/
|
||||||
|
|
||||||
|
/* Flag values used by clCreteBuffer */
|
||||||
|
#define CL_MEM_USE_UNCACHED_CPU_MEMORY_IMG (1 << 26)
|
||||||
|
#define CL_MEM_USE_CACHED_CPU_MEMORY_IMG (1 << 27)
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* cl_img_use_gralloc_ptr extension *
|
||||||
|
******************************************/
|
||||||
|
|
||||||
|
/* Flag values used by clCreteBuffer */
|
||||||
|
#define CL_MEM_USE_GRALLOC_PTR_IMG (1 << 28)
|
||||||
|
|
||||||
|
/* To be used by clGetEventInfo: */
|
||||||
|
#define CL_COMMAND_ACQUIRE_GRALLOC_OBJECTS_IMG 0x40D2
|
||||||
|
#define CL_COMMAND_RELEASE_GRALLOC_OBJECTS_IMG 0x40D3
|
||||||
|
|
||||||
|
/* Error code from clEnqueueReleaseGrallocObjectsIMG */
|
||||||
|
#define CL_GRALLOC_RESOURCE_NOT_ACQUIRED_IMG 0x40D4
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueAcquireGrallocObjectsIMG(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueReleaseGrallocObjectsIMG(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_1_2 */
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_2_0
|
||||||
|
/*********************************
|
||||||
|
* cl_khr_subgroups extension
|
||||||
|
*********************************/
|
||||||
|
#define cl_khr_subgroups 1
|
||||||
|
|
||||||
|
/* cl_kernel_sub_group_info is declared in CL.h. */
|
||||||
|
|
||||||
|
/* cl_kernel_sub_group_info */
|
||||||
|
#define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR 0x2033
|
||||||
|
#define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR 0x2034
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clGetKernelSubGroupInfoKHR(cl_kernel /* in_kernel */,
|
||||||
|
cl_device_id /*in_device*/,
|
||||||
|
cl_kernel_sub_group_info /* param_name */,
|
||||||
|
size_t /*input_value_size*/,
|
||||||
|
const void * /*input_value*/,
|
||||||
|
size_t /*param_value_size*/,
|
||||||
|
void* /*param_value*/,
|
||||||
|
size_t* /*param_value_size_ret*/ ) CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int
|
||||||
|
( CL_API_CALL * clGetKernelSubGroupInfoKHR_fn)(cl_kernel /* in_kernel */,
|
||||||
|
cl_device_id /*in_device*/,
|
||||||
|
cl_kernel_sub_group_info /* param_name */,
|
||||||
|
size_t /*input_value_size*/,
|
||||||
|
const void * /*input_value*/,
|
||||||
|
size_t /*param_value_size*/,
|
||||||
|
void* /*param_value*/,
|
||||||
|
size_t* /*param_value_size_ret*/ ) CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED;
|
||||||
|
#endif /* CL_VERSION_2_0 */
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_2_1
|
||||||
|
/*********************************
|
||||||
|
* cl_khr_priority_hints extension
|
||||||
|
*********************************/
|
||||||
|
#define cl_khr_priority_hints 1
|
||||||
|
|
||||||
|
typedef cl_uint cl_queue_priority_khr;
|
||||||
|
|
||||||
|
/* cl_command_queue_properties */
|
||||||
|
#define CL_QUEUE_PRIORITY_KHR 0x1096
|
||||||
|
|
||||||
|
/* cl_queue_priority_khr */
|
||||||
|
#define CL_QUEUE_PRIORITY_HIGH_KHR (1<<0)
|
||||||
|
#define CL_QUEUE_PRIORITY_MED_KHR (1<<1)
|
||||||
|
#define CL_QUEUE_PRIORITY_LOW_KHR (1<<2)
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_2_1 */
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_2_1
|
||||||
|
/*********************************
|
||||||
|
* cl_khr_throttle_hints extension
|
||||||
|
*********************************/
|
||||||
|
#define cl_khr_throttle_hints 1
|
||||||
|
|
||||||
|
typedef cl_uint cl_queue_throttle_khr;
|
||||||
|
|
||||||
|
/* cl_command_queue_properties */
|
||||||
|
#define CL_QUEUE_THROTTLE_KHR 0x1097
|
||||||
|
|
||||||
|
/* cl_queue_throttle_khr */
|
||||||
|
#define CL_QUEUE_THROTTLE_HIGH_KHR (1<<0)
|
||||||
|
#define CL_QUEUE_THROTTLE_MED_KHR (1<<1)
|
||||||
|
#define CL_QUEUE_THROTTLE_LOW_KHR (1<<2)
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_2_1 */
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_2_2
|
||||||
|
/*********************************
|
||||||
|
* cl_khr_subgroup_named_barrier
|
||||||
|
*********************************/
|
||||||
|
#define cl_khr_subgroup_named_barrier 1
|
||||||
|
|
||||||
|
/* cl_device_info */
|
||||||
|
#define CL_DEVICE_MAX_NAMED_BARRIER_COUNT_KHR 0x2035
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_2_2 */
|
||||||
|
|
||||||
|
/**********************************
|
||||||
|
* cl_arm_import_memory extension *
|
||||||
|
**********************************/
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_1_0
|
||||||
|
|
||||||
|
typedef intptr_t cl_import_properties_arm;
|
||||||
|
|
||||||
|
/* Default and valid proporties name for cl_arm_import_memory */
|
||||||
|
#define CL_IMPORT_TYPE_ARM 0x40B2
|
||||||
|
|
||||||
|
/* Host process memory type default value for CL_IMPORT_TYPE_ARM property */
|
||||||
|
#define CL_IMPORT_TYPE_HOST_ARM 0x40B3
|
||||||
|
|
||||||
|
/* DMA BUF memory type value for CL_IMPORT_TYPE_ARM property */
|
||||||
|
#define CL_IMPORT_TYPE_DMA_BUF_ARM 0x40B4
|
||||||
|
|
||||||
|
/* Secure DMA BUF memory type value for CL_IMPORT_TYPE_ARM property */
|
||||||
|
#define CL_IMPORT_TYPE_SECURE_ARM 0x40B5
|
||||||
|
|
||||||
|
/* This extension adds a new function that allows for direct memory import into
|
||||||
|
* OpenCL via the clImportMemoryARM function.
|
||||||
|
*
|
||||||
|
* Memory imported through this interface will be mapped into the device's page
|
||||||
|
* tables directly, providing zero copy access. It will never fall back to copy
|
||||||
|
* operations and aliased buffers.
|
||||||
|
*
|
||||||
|
* Types of memory supported for import are specified as additional extension
|
||||||
|
* strings.
|
||||||
|
*
|
||||||
|
* This extension produces cl_mem allocations which are compatible with all other
|
||||||
|
* users of cl_mem in the standard API.
|
||||||
|
*
|
||||||
|
* This extension maps pages with the same properties as the normal buffer creation
|
||||||
|
* function clCreateBuffer.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clImportMemoryARM( cl_context context,
|
||||||
|
cl_mem_flags flags,
|
||||||
|
const cl_import_properties_arm *properties,
|
||||||
|
void *memory,
|
||||||
|
size_t size,
|
||||||
|
cl_int *errcode_ret) CL_EXT_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_1_0 */
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* cl_arm_shared_virtual_memory extension *
|
||||||
|
******************************************/
|
||||||
|
|
||||||
|
#ifdef CL_VERSION_1_2
|
||||||
|
|
||||||
|
/* Used by clGetDeviceInfo */
|
||||||
|
#define CL_DEVICE_SVM_CAPABILITIES_ARM 0x40B6
|
||||||
|
|
||||||
|
/* Used by clGetMemObjectInfo */
|
||||||
|
#define CL_MEM_USES_SVM_POINTER_ARM 0x40B7
|
||||||
|
|
||||||
|
/* Used by clSetKernelExecInfoARM: */
|
||||||
|
#define CL_KERNEL_EXEC_INFO_SVM_PTRS_ARM 0x40B8
|
||||||
|
#define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM_ARM 0x40B9
|
||||||
|
|
||||||
|
/* To be used by clGetEventInfo: */
|
||||||
|
#define CL_COMMAND_SVM_FREE_ARM 0x40BA
|
||||||
|
#define CL_COMMAND_SVM_MEMCPY_ARM 0x40BB
|
||||||
|
#define CL_COMMAND_SVM_MEMFILL_ARM 0x40BC
|
||||||
|
#define CL_COMMAND_SVM_MAP_ARM 0x40BD
|
||||||
|
#define CL_COMMAND_SVM_UNMAP_ARM 0x40BE
|
||||||
|
|
||||||
|
/* Flag values returned by clGetDeviceInfo with CL_DEVICE_SVM_CAPABILITIES_ARM as the param_name. */
|
||||||
|
#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_ARM (1 << 0)
|
||||||
|
#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER_ARM (1 << 1)
|
||||||
|
#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_ARM (1 << 2)
|
||||||
|
#define CL_DEVICE_SVM_ATOMICS_ARM (1 << 3)
|
||||||
|
|
||||||
|
/* Flag values used by clSVMAllocARM: */
|
||||||
|
#define CL_MEM_SVM_FINE_GRAIN_BUFFER_ARM (1 << 10)
|
||||||
|
#define CL_MEM_SVM_ATOMICS_ARM (1 << 11)
|
||||||
|
|
||||||
|
typedef cl_bitfield cl_svm_mem_flags_arm;
|
||||||
|
typedef cl_uint cl_kernel_exec_info_arm;
|
||||||
|
typedef cl_bitfield cl_device_svm_capabilities_arm;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY void * CL_API_CALL
|
||||||
|
clSVMAllocARM(cl_context /* context */,
|
||||||
|
cl_svm_mem_flags_arm /* flags */,
|
||||||
|
size_t /* size */,
|
||||||
|
cl_uint /* alignment */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY void CL_API_CALL
|
||||||
|
clSVMFreeARM(cl_context /* context */,
|
||||||
|
void * /* svm_pointer */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueSVMFreeARM(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_svm_pointers */,
|
||||||
|
void *[] /* svm_pointers[] */,
|
||||||
|
void (CL_CALLBACK * /*pfn_free_func*/)(cl_command_queue /* queue */,
|
||||||
|
cl_uint /* num_svm_pointers */,
|
||||||
|
void *[] /* svm_pointers[] */,
|
||||||
|
void * /* user_data */),
|
||||||
|
void * /* user_data */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueSVMMemcpyARM(cl_command_queue /* command_queue */,
|
||||||
|
cl_bool /* blocking_copy */,
|
||||||
|
void * /* dst_ptr */,
|
||||||
|
const void * /* src_ptr */,
|
||||||
|
size_t /* size */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueSVMMemFillARM(cl_command_queue /* command_queue */,
|
||||||
|
void * /* svm_ptr */,
|
||||||
|
const void * /* pattern */,
|
||||||
|
size_t /* pattern_size */,
|
||||||
|
size_t /* size */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueSVMMapARM(cl_command_queue /* command_queue */,
|
||||||
|
cl_bool /* blocking_map */,
|
||||||
|
cl_map_flags /* flags */,
|
||||||
|
void * /* svm_ptr */,
|
||||||
|
size_t /* size */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueSVMUnmapARM(cl_command_queue /* command_queue */,
|
||||||
|
void * /* svm_ptr */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clSetKernelArgSVMPointerARM(cl_kernel /* kernel */,
|
||||||
|
cl_uint /* arg_index */,
|
||||||
|
const void * /* arg_value */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clSetKernelExecInfoARM(cl_kernel /* kernel */,
|
||||||
|
cl_kernel_exec_info_arm /* param_name */,
|
||||||
|
size_t /* param_value_size */,
|
||||||
|
const void * /* param_value */) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
#endif /* CL_VERSION_1_2 */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __CL_EXT_H */
|
||||||
@@ -0,0 +1,167 @@
|
|||||||
|
/**********************************************************************************
|
||||||
|
* Copyright (c) 2008-2015 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
||||||
|
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
|
||||||
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
|
||||||
|
* https://www.khronos.org/registry/
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OPENCL_CL_GL_H
|
||||||
|
#define __OPENCL_CL_GL_H
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <OpenCL/cl.h>
|
||||||
|
#else
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef cl_uint cl_gl_object_type;
|
||||||
|
typedef cl_uint cl_gl_texture_info;
|
||||||
|
typedef cl_uint cl_gl_platform_info;
|
||||||
|
typedef struct __GLsync *cl_GLsync;
|
||||||
|
|
||||||
|
/* cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken */
|
||||||
|
#define CL_GL_OBJECT_BUFFER 0x2000
|
||||||
|
#define CL_GL_OBJECT_TEXTURE2D 0x2001
|
||||||
|
#define CL_GL_OBJECT_TEXTURE3D 0x2002
|
||||||
|
#define CL_GL_OBJECT_RENDERBUFFER 0x2003
|
||||||
|
#define CL_GL_OBJECT_TEXTURE2D_ARRAY 0x200E
|
||||||
|
#define CL_GL_OBJECT_TEXTURE1D 0x200F
|
||||||
|
#define CL_GL_OBJECT_TEXTURE1D_ARRAY 0x2010
|
||||||
|
#define CL_GL_OBJECT_TEXTURE_BUFFER 0x2011
|
||||||
|
|
||||||
|
/* cl_gl_texture_info */
|
||||||
|
#define CL_GL_TEXTURE_TARGET 0x2004
|
||||||
|
#define CL_GL_MIPMAP_LEVEL 0x2005
|
||||||
|
#define CL_GL_NUM_SAMPLES 0x2012
|
||||||
|
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clCreateFromGLBuffer(cl_context /* context */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
cl_GLuint /* bufobj */,
|
||||||
|
int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clCreateFromGLTexture(cl_context /* context */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
cl_GLenum /* target */,
|
||||||
|
cl_GLint /* miplevel */,
|
||||||
|
cl_GLuint /* texture */,
|
||||||
|
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clCreateFromGLRenderbuffer(cl_context /* context */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
cl_GLuint /* renderbuffer */,
|
||||||
|
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clGetGLObjectInfo(cl_mem /* memobj */,
|
||||||
|
cl_gl_object_type * /* gl_object_type */,
|
||||||
|
cl_GLuint * /* gl_object_name */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clGetGLTextureInfo(cl_mem /* memobj */,
|
||||||
|
cl_gl_texture_info /* param_name */,
|
||||||
|
size_t /* param_value_size */,
|
||||||
|
void * /* param_value */,
|
||||||
|
size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueAcquireGLObjects(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clEnqueueReleaseGLObjects(cl_command_queue /* command_queue */,
|
||||||
|
cl_uint /* num_objects */,
|
||||||
|
const cl_mem * /* mem_objects */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */,
|
||||||
|
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
|
||||||
|
/* Deprecated OpenCL 1.1 APIs */
|
||||||
|
extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
|
||||||
|
clCreateFromGLTexture2D(cl_context /* context */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
cl_GLenum /* target */,
|
||||||
|
cl_GLint /* miplevel */,
|
||||||
|
cl_GLuint /* texture */,
|
||||||
|
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
|
||||||
|
clCreateFromGLTexture3D(cl_context /* context */,
|
||||||
|
cl_mem_flags /* flags */,
|
||||||
|
cl_GLenum /* target */,
|
||||||
|
cl_GLint /* miplevel */,
|
||||||
|
cl_GLuint /* texture */,
|
||||||
|
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
|
||||||
|
|
||||||
|
/* cl_khr_gl_sharing extension */
|
||||||
|
|
||||||
|
#define cl_khr_gl_sharing 1
|
||||||
|
|
||||||
|
typedef cl_uint cl_gl_context_info;
|
||||||
|
|
||||||
|
/* Additional Error Codes */
|
||||||
|
#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000
|
||||||
|
|
||||||
|
/* cl_gl_context_info */
|
||||||
|
#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006
|
||||||
|
#define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007
|
||||||
|
|
||||||
|
/* Additional cl_context_properties */
|
||||||
|
#define CL_GL_CONTEXT_KHR 0x2008
|
||||||
|
#define CL_EGL_DISPLAY_KHR 0x2009
|
||||||
|
#define CL_GLX_DISPLAY_KHR 0x200A
|
||||||
|
#define CL_WGL_HDC_KHR 0x200B
|
||||||
|
#define CL_CGL_SHAREGROUP_KHR 0x200C
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clGetGLContextInfoKHR(const cl_context_properties * /* properties */,
|
||||||
|
cl_gl_context_info /* param_name */,
|
||||||
|
size_t /* param_value_size */,
|
||||||
|
void * /* param_value */,
|
||||||
|
size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR_fn)(
|
||||||
|
const cl_context_properties * properties,
|
||||||
|
cl_gl_context_info param_name,
|
||||||
|
size_t param_value_size,
|
||||||
|
void * param_value,
|
||||||
|
size_t * param_value_size_ret);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __OPENCL_CL_GL_H */
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/**********************************************************************************
|
||||||
|
* Copyright (c) 2008-2015 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
||||||
|
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
|
||||||
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
|
||||||
|
* https://www.khronos.org/registry/
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
|
||||||
|
|
||||||
|
/* cl_gl_ext.h contains vendor (non-KHR) OpenCL extensions which have */
|
||||||
|
/* OpenGL dependencies. */
|
||||||
|
|
||||||
|
#ifndef __OPENCL_CL_GL_EXT_H
|
||||||
|
#define __OPENCL_CL_GL_EXT_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <OpenCL/cl_gl.h>
|
||||||
|
#else
|
||||||
|
#include <CL/cl_gl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For each extension, follow this template
|
||||||
|
* cl_VEN_extname extension */
|
||||||
|
/* #define cl_VEN_extname 1
|
||||||
|
* ... define new types, if any
|
||||||
|
* ... define new tokens, if any
|
||||||
|
* ... define new APIs, if any
|
||||||
|
*
|
||||||
|
* If you need GLtypes here, mirror them with a cl_GLtype, rather than including a GL header
|
||||||
|
* This allows us to avoid having to decide whether to include GL headers or GLES here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cl_khr_gl_event extension
|
||||||
|
* See section 9.9 in the OpenCL 1.1 spec for more information
|
||||||
|
*/
|
||||||
|
#define CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR 0x200D
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_event CL_API_CALL
|
||||||
|
clCreateEventFromGLsyncKHR(cl_context /* context */,
|
||||||
|
cl_GLsync /* cl_GLsync */,
|
||||||
|
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __OPENCL_CL_GL_EXT_H */
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,59 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008-2015 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
||||||
|
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
|
||||||
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
|
||||||
|
* https://www.khronos.org/registry/
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
|
||||||
|
|
||||||
|
#ifndef __OPENCL_H
|
||||||
|
#define __OPENCL_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
|
||||||
|
#include <OpenCL/cl.h>
|
||||||
|
#include <OpenCL/cl_gl.h>
|
||||||
|
#include <OpenCL/cl_gl_ext.h>
|
||||||
|
#include <OpenCL/cl_ext.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#include <CL/cl_gl.h>
|
||||||
|
#include <CL/cl_gl_ext.h>
|
||||||
|
#include <CL/cl_ext.h>
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __OPENCL_H */
|
||||||
|
|
||||||
@@ -0,0 +1,329 @@
|
|||||||
|
/* -*- mode: c; tab-width: 8; -*- */
|
||||||
|
/* vi: set sw=4 ts=8: */
|
||||||
|
/* Reference version of egl.h for EGL 1.4.
|
||||||
|
* $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2007-2009 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 following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __egl_h_
|
||||||
|
#define __egl_h_
|
||||||
|
|
||||||
|
/* All platform-dependent types and macro boilerplate (such as EGLAPI
|
||||||
|
* and EGLAPIENTRY) should go in eglplatform.h.
|
||||||
|
*/
|
||||||
|
#include <EGL/eglplatform.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* EGL Types */
|
||||||
|
/* EGLint is defined in eglplatform.h */
|
||||||
|
typedef unsigned int EGLBoolean;
|
||||||
|
typedef unsigned int EGLenum;
|
||||||
|
typedef void *EGLConfig;
|
||||||
|
typedef void *EGLContext;
|
||||||
|
typedef void *EGLDisplay;
|
||||||
|
typedef void *EGLSurface;
|
||||||
|
typedef void *EGLClientBuffer;
|
||||||
|
|
||||||
|
/* EGL Versioning */
|
||||||
|
#define EGL_VERSION_1_0 1
|
||||||
|
#define EGL_VERSION_1_1 1
|
||||||
|
#define EGL_VERSION_1_2 1
|
||||||
|
#define EGL_VERSION_1_3 1
|
||||||
|
#define EGL_VERSION_1_4 1
|
||||||
|
|
||||||
|
/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
|
||||||
|
* enums are assigned unique values starting at 0x3000.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* EGL aliases */
|
||||||
|
#define EGL_FALSE 0
|
||||||
|
#define EGL_TRUE 1
|
||||||
|
|
||||||
|
/* Out-of-band handle values */
|
||||||
|
#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
|
||||||
|
#define EGL_NO_CONTEXT ((EGLContext)0)
|
||||||
|
#define EGL_NO_DISPLAY ((EGLDisplay)0)
|
||||||
|
#define EGL_NO_SURFACE ((EGLSurface)0)
|
||||||
|
|
||||||
|
/* Out-of-band attribute value */
|
||||||
|
#define EGL_DONT_CARE ((EGLint)-1)
|
||||||
|
|
||||||
|
/* Errors / GetError return values */
|
||||||
|
#define EGL_SUCCESS 0x3000
|
||||||
|
#define EGL_NOT_INITIALIZED 0x3001
|
||||||
|
#define EGL_BAD_ACCESS 0x3002
|
||||||
|
#define EGL_BAD_ALLOC 0x3003
|
||||||
|
#define EGL_BAD_ATTRIBUTE 0x3004
|
||||||
|
#define EGL_BAD_CONFIG 0x3005
|
||||||
|
#define EGL_BAD_CONTEXT 0x3006
|
||||||
|
#define EGL_BAD_CURRENT_SURFACE 0x3007
|
||||||
|
#define EGL_BAD_DISPLAY 0x3008
|
||||||
|
#define EGL_BAD_MATCH 0x3009
|
||||||
|
#define EGL_BAD_NATIVE_PIXMAP 0x300A
|
||||||
|
#define EGL_BAD_NATIVE_WINDOW 0x300B
|
||||||
|
#define EGL_BAD_PARAMETER 0x300C
|
||||||
|
#define EGL_BAD_SURFACE 0x300D
|
||||||
|
#define EGL_CONTEXT_LOST 0x300E /* EGL 1.1 - IMG_power_management */
|
||||||
|
|
||||||
|
/* Reserved 0x300F-0x301F for additional errors */
|
||||||
|
|
||||||
|
/* Config attributes */
|
||||||
|
#define EGL_BUFFER_SIZE 0x3020
|
||||||
|
#define EGL_ALPHA_SIZE 0x3021
|
||||||
|
#define EGL_BLUE_SIZE 0x3022
|
||||||
|
#define EGL_GREEN_SIZE 0x3023
|
||||||
|
#define EGL_RED_SIZE 0x3024
|
||||||
|
#define EGL_DEPTH_SIZE 0x3025
|
||||||
|
#define EGL_STENCIL_SIZE 0x3026
|
||||||
|
#define EGL_CONFIG_CAVEAT 0x3027
|
||||||
|
#define EGL_CONFIG_ID 0x3028
|
||||||
|
#define EGL_LEVEL 0x3029
|
||||||
|
#define EGL_MAX_PBUFFER_HEIGHT 0x302A
|
||||||
|
#define EGL_MAX_PBUFFER_PIXELS 0x302B
|
||||||
|
#define EGL_MAX_PBUFFER_WIDTH 0x302C
|
||||||
|
#define EGL_NATIVE_RENDERABLE 0x302D
|
||||||
|
#define EGL_NATIVE_VISUAL_ID 0x302E
|
||||||
|
#define EGL_NATIVE_VISUAL_TYPE 0x302F
|
||||||
|
#define EGL_SAMPLES 0x3031
|
||||||
|
#define EGL_SAMPLE_BUFFERS 0x3032
|
||||||
|
#define EGL_SURFACE_TYPE 0x3033
|
||||||
|
#define EGL_TRANSPARENT_TYPE 0x3034
|
||||||
|
#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
|
||||||
|
#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
|
||||||
|
#define EGL_TRANSPARENT_RED_VALUE 0x3037
|
||||||
|
#define EGL_NONE 0x3038 /* Attrib list terminator */
|
||||||
|
#define EGL_BIND_TO_TEXTURE_RGB 0x3039
|
||||||
|
#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
|
||||||
|
#define EGL_MIN_SWAP_INTERVAL 0x303B
|
||||||
|
#define EGL_MAX_SWAP_INTERVAL 0x303C
|
||||||
|
#define EGL_LUMINANCE_SIZE 0x303D
|
||||||
|
#define EGL_ALPHA_MASK_SIZE 0x303E
|
||||||
|
#define EGL_COLOR_BUFFER_TYPE 0x303F
|
||||||
|
#define EGL_RENDERABLE_TYPE 0x3040
|
||||||
|
#define EGL_MATCH_NATIVE_PIXMAP 0x3041 /* Pseudo-attribute (not queryable) */
|
||||||
|
#define EGL_CONFORMANT 0x3042
|
||||||
|
|
||||||
|
/* Reserved 0x3041-0x304F for additional config attributes */
|
||||||
|
|
||||||
|
/* Config attribute values */
|
||||||
|
#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */
|
||||||
|
#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */
|
||||||
|
#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */
|
||||||
|
#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */
|
||||||
|
#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */
|
||||||
|
|
||||||
|
/* More config attribute values, for EGL_TEXTURE_FORMAT */
|
||||||
|
#define EGL_NO_TEXTURE 0x305C
|
||||||
|
#define EGL_TEXTURE_RGB 0x305D
|
||||||
|
#define EGL_TEXTURE_RGBA 0x305E
|
||||||
|
#define EGL_TEXTURE_2D 0x305F
|
||||||
|
|
||||||
|
/* Config attribute mask bits */
|
||||||
|
#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */
|
||||||
|
|
||||||
|
#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */
|
||||||
|
#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */
|
||||||
|
#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */
|
||||||
|
#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */
|
||||||
|
|
||||||
|
/* QueryString targets */
|
||||||
|
#define EGL_VENDOR 0x3053
|
||||||
|
#define EGL_VERSION 0x3054
|
||||||
|
#define EGL_EXTENSIONS 0x3055
|
||||||
|
#define EGL_CLIENT_APIS 0x308D
|
||||||
|
|
||||||
|
/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
|
||||||
|
#define EGL_HEIGHT 0x3056
|
||||||
|
#define EGL_WIDTH 0x3057
|
||||||
|
#define EGL_LARGEST_PBUFFER 0x3058
|
||||||
|
#define EGL_TEXTURE_FORMAT 0x3080
|
||||||
|
#define EGL_TEXTURE_TARGET 0x3081
|
||||||
|
#define EGL_MIPMAP_TEXTURE 0x3082
|
||||||
|
#define EGL_MIPMAP_LEVEL 0x3083
|
||||||
|
#define EGL_RENDER_BUFFER 0x3086
|
||||||
|
#define EGL_VG_COLORSPACE 0x3087
|
||||||
|
#define EGL_VG_ALPHA_FORMAT 0x3088
|
||||||
|
#define EGL_HORIZONTAL_RESOLUTION 0x3090
|
||||||
|
#define EGL_VERTICAL_RESOLUTION 0x3091
|
||||||
|
#define EGL_PIXEL_ASPECT_RATIO 0x3092
|
||||||
|
#define EGL_SWAP_BEHAVIOR 0x3093
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE 0x3099
|
||||||
|
|
||||||
|
/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
|
||||||
|
#define EGL_BACK_BUFFER 0x3084
|
||||||
|
#define EGL_SINGLE_BUFFER 0x3085
|
||||||
|
|
||||||
|
/* OpenVG color spaces */
|
||||||
|
#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */
|
||||||
|
#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */
|
||||||
|
|
||||||
|
/* OpenVG alpha formats */
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */
|
||||||
|
|
||||||
|
/* Constant scale factor by which fractional display resolutions &
|
||||||
|
* aspect ratio are scaled when queried as integer values.
|
||||||
|
*/
|
||||||
|
#define EGL_DISPLAY_SCALING 10000
|
||||||
|
|
||||||
|
/* Unknown display resolution/aspect ratio */
|
||||||
|
#define EGL_UNKNOWN ((EGLint)-1)
|
||||||
|
|
||||||
|
/* Back buffer swap behaviors */
|
||||||
|
#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */
|
||||||
|
#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */
|
||||||
|
|
||||||
|
/* CreatePbufferFromClientBuffer buffer types */
|
||||||
|
#define EGL_OPENVG_IMAGE 0x3096
|
||||||
|
|
||||||
|
/* QueryContext targets */
|
||||||
|
#define EGL_CONTEXT_CLIENT_TYPE 0x3097
|
||||||
|
|
||||||
|
/* CreateContext attributes */
|
||||||
|
#define EGL_CONTEXT_CLIENT_VERSION 0x3098
|
||||||
|
|
||||||
|
/* Multisample resolution behaviors */
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */
|
||||||
|
|
||||||
|
/* BindAPI/QueryAPI targets */
|
||||||
|
#define EGL_OPENGL_ES_API 0x30A0
|
||||||
|
#define EGL_OPENVG_API 0x30A1
|
||||||
|
#define EGL_OPENGL_API 0x30A2
|
||||||
|
|
||||||
|
/* GetCurrentSurface targets */
|
||||||
|
#define EGL_DRAW 0x3059
|
||||||
|
#define EGL_READ 0x305A
|
||||||
|
|
||||||
|
/* WaitNative engines */
|
||||||
|
#define EGL_CORE_NATIVE_ENGINE 0x305B
|
||||||
|
|
||||||
|
/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
|
||||||
|
#define EGL_COLORSPACE EGL_VG_COLORSPACE
|
||||||
|
#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT
|
||||||
|
#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB
|
||||||
|
#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR
|
||||||
|
#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE
|
||||||
|
#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE
|
||||||
|
|
||||||
|
/* EGL extensions must request enum blocks from the Khronos
|
||||||
|
* API Registrar, who maintains the enumerant registry. Submit
|
||||||
|
* a bug in Khronos Bugzilla against task "Registry".
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* EGL Functions */
|
||||||
|
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglGetError(void);
|
||||||
|
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
|
||||||
|
|
||||||
|
EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
|
||||||
|
EGLint config_size, EGLint *num_config);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
|
||||||
|
EGLConfig *configs, EGLint config_size,
|
||||||
|
EGLint *num_config);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
|
||||||
|
EGLint attribute, EGLint *value);
|
||||||
|
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
|
||||||
|
EGLNativeWindowType win,
|
||||||
|
const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
|
||||||
|
const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
|
||||||
|
EGLNativePixmapType pixmap,
|
||||||
|
const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
|
||||||
|
EGLint attribute, EGLint *value);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
|
||||||
|
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
|
||||||
|
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
|
||||||
|
EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
|
||||||
|
EGLConfig config, const EGLint *attrib_list);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
|
||||||
|
EGLint attribute, EGLint value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
|
||||||
|
|
||||||
|
|
||||||
|
EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
|
||||||
|
EGLContext share_context,
|
||||||
|
const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
|
||||||
|
EGLSurface read, EGLContext ctx);
|
||||||
|
|
||||||
|
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
|
||||||
|
EGLint attribute, EGLint *value);
|
||||||
|
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
|
||||||
|
EGLNativePixmapType target);
|
||||||
|
|
||||||
|
/* This is a generic function pointer type, whose name indicates it must
|
||||||
|
* be cast to the proper type *and calling convention* before use.
|
||||||
|
*/
|
||||||
|
typedef void (*__eglMustCastToProperFunctionPointerType)(void);
|
||||||
|
|
||||||
|
/* Now, define eglGetProcAddress using the generic function ptr. type */
|
||||||
|
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
|
||||||
|
eglGetProcAddress(const char *procname);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __egl_h_ */
|
||||||
@@ -0,0 +1,645 @@
|
|||||||
|
#ifndef __eglext_h_
|
||||||
|
#define __eglext_h_ 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2013 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 following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos OpenGL / OpenGL ES XML
|
||||||
|
** API Registry. The current version of the Registry, generator scripts
|
||||||
|
** used to make the header, and the header can be found at
|
||||||
|
** http://www.opengl.org/registry/
|
||||||
|
**
|
||||||
|
** Khronos $Revision: 24350 $ on $Date: 2013-12-04 12:46:23 -0800 (Wed, 04 Dec 2013) $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <EGL/eglplatform.h>
|
||||||
|
|
||||||
|
#define EGL_EGLEXT_VERSION 20131204
|
||||||
|
|
||||||
|
/* Generated C header for:
|
||||||
|
* API: egl
|
||||||
|
* Versions considered: .*
|
||||||
|
* Versions emitted: _nomatch_^
|
||||||
|
* Default extensions included: egl
|
||||||
|
* Additional extensions included: _nomatch_^
|
||||||
|
* Extensions removed: _nomatch_^
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_cl_event
|
||||||
|
#define EGL_KHR_cl_event 1
|
||||||
|
#define EGL_CL_EVENT_HANDLE_KHR 0x309C
|
||||||
|
#define EGL_SYNC_CL_EVENT_KHR 0x30FE
|
||||||
|
#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
|
||||||
|
#endif /* EGL_KHR_cl_event */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_cl_event2
|
||||||
|
#define EGL_KHR_cl_event2 1
|
||||||
|
typedef void *EGLSyncKHR;
|
||||||
|
typedef intptr_t EGLAttribKHR;
|
||||||
|
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_cl_event2 */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_client_get_all_proc_addresses
|
||||||
|
#define EGL_KHR_client_get_all_proc_addresses 1
|
||||||
|
#endif /* EGL_KHR_client_get_all_proc_addresses */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_config_attribs
|
||||||
|
#define EGL_KHR_config_attribs 1
|
||||||
|
#define EGL_CONFORMANT_KHR 0x3042
|
||||||
|
#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040
|
||||||
|
#endif /* EGL_KHR_config_attribs */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_create_context
|
||||||
|
#define EGL_KHR_create_context 1
|
||||||
|
#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098
|
||||||
|
#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB
|
||||||
|
#define EGL_CONTEXT_FLAGS_KHR 0x30FC
|
||||||
|
#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD
|
||||||
|
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
|
||||||
|
#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE
|
||||||
|
#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF
|
||||||
|
#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001
|
||||||
|
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
|
||||||
|
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
|
||||||
|
#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
|
||||||
|
#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
|
||||||
|
#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
|
||||||
|
#endif /* EGL_KHR_create_context */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_fence_sync
|
||||||
|
#define EGL_KHR_fence_sync 1
|
||||||
|
#ifdef KHRONOS_SUPPORT_INT64
|
||||||
|
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
|
||||||
|
#define EGL_SYNC_CONDITION_KHR 0x30F8
|
||||||
|
#define EGL_SYNC_FENCE_KHR 0x30F9
|
||||||
|
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||||
|
#endif /* EGL_KHR_fence_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_get_all_proc_addresses
|
||||||
|
#define EGL_KHR_get_all_proc_addresses 1
|
||||||
|
#endif /* EGL_KHR_get_all_proc_addresses */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_gl_renderbuffer_image
|
||||||
|
#define EGL_KHR_gl_renderbuffer_image 1
|
||||||
|
#define EGL_GL_RENDERBUFFER_KHR 0x30B9
|
||||||
|
#endif /* EGL_KHR_gl_renderbuffer_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_gl_texture_2D_image
|
||||||
|
#define EGL_KHR_gl_texture_2D_image 1
|
||||||
|
#define EGL_GL_TEXTURE_2D_KHR 0x30B1
|
||||||
|
#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC
|
||||||
|
#endif /* EGL_KHR_gl_texture_2D_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_gl_texture_3D_image
|
||||||
|
#define EGL_KHR_gl_texture_3D_image 1
|
||||||
|
#define EGL_GL_TEXTURE_3D_KHR 0x30B2
|
||||||
|
#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD
|
||||||
|
#endif /* EGL_KHR_gl_texture_3D_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_gl_texture_cubemap_image
|
||||||
|
#define EGL_KHR_gl_texture_cubemap_image 1
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
|
||||||
|
#endif /* EGL_KHR_gl_texture_cubemap_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_image
|
||||||
|
#define EGL_KHR_image 1
|
||||||
|
typedef void *EGLImageKHR;
|
||||||
|
#define EGL_NATIVE_PIXMAP_KHR 0x30B0
|
||||||
|
#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0)
|
||||||
|
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_image_base
|
||||||
|
#define EGL_KHR_image_base 1
|
||||||
|
#define EGL_IMAGE_PRESERVED_KHR 0x30D2
|
||||||
|
#endif /* EGL_KHR_image_base */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_image_pixmap
|
||||||
|
#define EGL_KHR_image_pixmap 1
|
||||||
|
#endif /* EGL_KHR_image_pixmap */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_lock_surface
|
||||||
|
#define EGL_KHR_lock_surface 1
|
||||||
|
#define EGL_READ_SURFACE_BIT_KHR 0x0001
|
||||||
|
#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
|
||||||
|
#define EGL_LOCK_SURFACE_BIT_KHR 0x0080
|
||||||
|
#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100
|
||||||
|
#define EGL_MATCH_FORMAT_KHR 0x3043
|
||||||
|
#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0
|
||||||
|
#define EGL_FORMAT_RGB_565_KHR 0x30C1
|
||||||
|
#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2
|
||||||
|
#define EGL_FORMAT_RGBA_8888_KHR 0x30C3
|
||||||
|
#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4
|
||||||
|
#define EGL_LOCK_USAGE_HINT_KHR 0x30C5
|
||||||
|
#define EGL_BITMAP_POINTER_KHR 0x30C6
|
||||||
|
#define EGL_BITMAP_PITCH_KHR 0x30C7
|
||||||
|
#define EGL_BITMAP_ORIGIN_KHR 0x30C8
|
||||||
|
#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9
|
||||||
|
#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
|
||||||
|
#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB
|
||||||
|
#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
|
||||||
|
#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
|
||||||
|
#define EGL_LOWER_LEFT_KHR 0x30CE
|
||||||
|
#define EGL_UPPER_LEFT_KHR 0x30CF
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_lock_surface */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_lock_surface2
|
||||||
|
#define EGL_KHR_lock_surface2 1
|
||||||
|
#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110
|
||||||
|
#endif /* EGL_KHR_lock_surface2 */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_lock_surface3
|
||||||
|
#define EGL_KHR_lock_surface3 1
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_lock_surface3 */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_reusable_sync
|
||||||
|
#define EGL_KHR_reusable_sync 1
|
||||||
|
typedef khronos_utime_nanoseconds_t EGLTimeKHR;
|
||||||
|
#ifdef KHRONOS_SUPPORT_INT64
|
||||||
|
#define EGL_SYNC_STATUS_KHR 0x30F1
|
||||||
|
#define EGL_SIGNALED_KHR 0x30F2
|
||||||
|
#define EGL_UNSIGNALED_KHR 0x30F3
|
||||||
|
#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5
|
||||||
|
#define EGL_CONDITION_SATISFIED_KHR 0x30F6
|
||||||
|
#define EGL_SYNC_TYPE_KHR 0x30F7
|
||||||
|
#define EGL_SYNC_REUSABLE_KHR 0x30FA
|
||||||
|
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
|
||||||
|
#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
|
||||||
|
#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
|
||||||
|
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||||
|
#endif
|
||||||
|
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||||
|
#endif /* EGL_KHR_reusable_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream
|
||||||
|
#define EGL_KHR_stream 1
|
||||||
|
typedef void *EGLStreamKHR;
|
||||||
|
typedef khronos_uint64_t EGLuint64KHR;
|
||||||
|
#ifdef KHRONOS_SUPPORT_INT64
|
||||||
|
#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0)
|
||||||
|
#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210
|
||||||
|
#define EGL_PRODUCER_FRAME_KHR 0x3212
|
||||||
|
#define EGL_CONSUMER_FRAME_KHR 0x3213
|
||||||
|
#define EGL_STREAM_STATE_KHR 0x3214
|
||||||
|
#define EGL_STREAM_STATE_CREATED_KHR 0x3215
|
||||||
|
#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216
|
||||||
|
#define EGL_STREAM_STATE_EMPTY_KHR 0x3217
|
||||||
|
#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218
|
||||||
|
#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219
|
||||||
|
#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A
|
||||||
|
#define EGL_BAD_STREAM_KHR 0x321B
|
||||||
|
#define EGL_BAD_STATE_KHR 0x321C
|
||||||
|
typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
|
||||||
|
#endif
|
||||||
|
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream_consumer_gltexture
|
||||||
|
#define EGL_KHR_stream_consumer_gltexture 1
|
||||||
|
#ifdef EGL_KHR_stream
|
||||||
|
#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
#endif /* EGL_KHR_stream_consumer_gltexture */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream_cross_process_fd
|
||||||
|
#define EGL_KHR_stream_cross_process_fd 1
|
||||||
|
typedef int EGLNativeFileDescriptorKHR;
|
||||||
|
#ifdef EGL_KHR_stream
|
||||||
|
#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1))
|
||||||
|
typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream);
|
||||||
|
EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
#endif /* EGL_KHR_stream_cross_process_fd */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream_fifo
|
||||||
|
#define EGL_KHR_stream_fifo 1
|
||||||
|
#ifdef EGL_KHR_stream
|
||||||
|
#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC
|
||||||
|
#define EGL_STREAM_TIME_NOW_KHR 0x31FD
|
||||||
|
#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE
|
||||||
|
#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
#endif /* EGL_KHR_stream_fifo */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream_producer_aldatalocator
|
||||||
|
#define EGL_KHR_stream_producer_aldatalocator 1
|
||||||
|
#ifdef EGL_KHR_stream
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
#endif /* EGL_KHR_stream_producer_aldatalocator */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_stream_producer_eglsurface
|
||||||
|
#define EGL_KHR_stream_producer_eglsurface 1
|
||||||
|
#ifdef EGL_KHR_stream
|
||||||
|
#define EGL_STREAM_BIT_KHR 0x0800
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_stream */
|
||||||
|
#endif /* EGL_KHR_stream_producer_eglsurface */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_surfaceless_context
|
||||||
|
#define EGL_KHR_surfaceless_context 1
|
||||||
|
#endif /* EGL_KHR_surfaceless_context */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_vg_parent_image
|
||||||
|
#define EGL_KHR_vg_parent_image 1
|
||||||
|
#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
|
||||||
|
#endif /* EGL_KHR_vg_parent_image */
|
||||||
|
|
||||||
|
#ifndef EGL_KHR_wait_sync
|
||||||
|
#define EGL_KHR_wait_sync 1
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_KHR_wait_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_ANDROID_blob_cache
|
||||||
|
#define EGL_ANDROID_blob_cache 1
|
||||||
|
typedef khronos_ssize_t EGLsizeiANDROID;
|
||||||
|
typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);
|
||||||
|
typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);
|
||||||
|
typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_ANDROID_blob_cache */
|
||||||
|
|
||||||
|
#ifndef EGL_ANDROID_framebuffer_target
|
||||||
|
#define EGL_ANDROID_framebuffer_target 1
|
||||||
|
#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147
|
||||||
|
#endif /* EGL_ANDROID_framebuffer_target */
|
||||||
|
|
||||||
|
#ifndef EGL_ANDROID_image_native_buffer
|
||||||
|
#define EGL_ANDROID_image_native_buffer 1
|
||||||
|
#define EGL_NATIVE_BUFFER_ANDROID 0x3140
|
||||||
|
#endif /* EGL_ANDROID_image_native_buffer */
|
||||||
|
|
||||||
|
#ifndef EGL_ANDROID_native_fence_sync
|
||||||
|
#define EGL_ANDROID_native_fence_sync 1
|
||||||
|
#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144
|
||||||
|
#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145
|
||||||
|
#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146
|
||||||
|
#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_ANDROID_native_fence_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_ANDROID_recordable
|
||||||
|
#define EGL_ANDROID_recordable 1
|
||||||
|
#define EGL_RECORDABLE_ANDROID 0x3142
|
||||||
|
#endif /* EGL_ANDROID_recordable */
|
||||||
|
|
||||||
|
#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
|
||||||
|
#define EGL_ANGLE_d3d_share_handle_client_buffer 1
|
||||||
|
#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
|
||||||
|
#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
|
||||||
|
|
||||||
|
#ifndef EGL_ANGLE_query_surface_pointer
|
||||||
|
#define EGL_ANGLE_query_surface_pointer 1
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_ANGLE_query_surface_pointer */
|
||||||
|
|
||||||
|
#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
|
||||||
|
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
|
||||||
|
#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
|
||||||
|
|
||||||
|
#ifndef EGL_ARM_pixmap_multisample_discard
|
||||||
|
#define EGL_ARM_pixmap_multisample_discard 1
|
||||||
|
#define EGL_DISCARD_SAMPLES_ARM 0x3286
|
||||||
|
#endif /* EGL_ARM_pixmap_multisample_discard */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_buffer_age
|
||||||
|
#define EGL_EXT_buffer_age 1
|
||||||
|
#define EGL_BUFFER_AGE_EXT 0x313D
|
||||||
|
#endif /* EGL_EXT_buffer_age */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_client_extensions
|
||||||
|
#define EGL_EXT_client_extensions 1
|
||||||
|
#endif /* EGL_EXT_client_extensions */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_create_context_robustness
|
||||||
|
#define EGL_EXT_create_context_robustness 1
|
||||||
|
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
|
||||||
|
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
|
||||||
|
#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE
|
||||||
|
#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
|
||||||
|
#endif /* EGL_EXT_create_context_robustness */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_image_dma_buf_import
|
||||||
|
#define EGL_EXT_image_dma_buf_import 1
|
||||||
|
#define EGL_LINUX_DMA_BUF_EXT 0x3270
|
||||||
|
#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
|
||||||
|
#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
|
||||||
|
#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
|
||||||
|
#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
|
||||||
|
#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275
|
||||||
|
#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276
|
||||||
|
#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277
|
||||||
|
#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278
|
||||||
|
#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279
|
||||||
|
#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A
|
||||||
|
#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B
|
||||||
|
#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C
|
||||||
|
#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
|
||||||
|
#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
|
||||||
|
#define EGL_ITU_REC601_EXT 0x327F
|
||||||
|
#define EGL_ITU_REC709_EXT 0x3280
|
||||||
|
#define EGL_ITU_REC2020_EXT 0x3281
|
||||||
|
#define EGL_YUV_FULL_RANGE_EXT 0x3282
|
||||||
|
#define EGL_YUV_NARROW_RANGE_EXT 0x3283
|
||||||
|
#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284
|
||||||
|
#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
|
||||||
|
#endif /* EGL_EXT_image_dma_buf_import */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_multiview_window
|
||||||
|
#define EGL_EXT_multiview_window 1
|
||||||
|
#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
|
||||||
|
#endif /* EGL_EXT_multiview_window */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_platform_base
|
||||||
|
#define EGL_EXT_platform_base 1
|
||||||
|
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_EXT_platform_base */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_platform_wayland
|
||||||
|
#define EGL_EXT_platform_wayland 1
|
||||||
|
#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
|
||||||
|
#endif /* EGL_EXT_platform_wayland */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_platform_x11
|
||||||
|
#define EGL_EXT_platform_x11 1
|
||||||
|
#define EGL_PLATFORM_X11_EXT 0x31D5
|
||||||
|
#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
|
||||||
|
#endif /* EGL_EXT_platform_x11 */
|
||||||
|
|
||||||
|
#ifndef EGL_EXT_swap_buffers_with_damage
|
||||||
|
#define EGL_EXT_swap_buffers_with_damage 1
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_EXT_swap_buffers_with_damage */
|
||||||
|
|
||||||
|
#ifndef EGL_HI_clientpixmap
|
||||||
|
#define EGL_HI_clientpixmap 1
|
||||||
|
struct EGLClientPixmapHI {
|
||||||
|
void *pData;
|
||||||
|
EGLint iWidth;
|
||||||
|
EGLint iHeight;
|
||||||
|
EGLint iStride;
|
||||||
|
};
|
||||||
|
#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_HI_clientpixmap */
|
||||||
|
|
||||||
|
#ifndef EGL_HI_colorformats
|
||||||
|
#define EGL_HI_colorformats 1
|
||||||
|
#define EGL_COLOR_FORMAT_HI 0x8F70
|
||||||
|
#define EGL_COLOR_RGB_HI 0x8F71
|
||||||
|
#define EGL_COLOR_RGBA_HI 0x8F72
|
||||||
|
#define EGL_COLOR_ARGB_HI 0x8F73
|
||||||
|
#endif /* EGL_HI_colorformats */
|
||||||
|
|
||||||
|
#ifndef EGL_IMG_context_priority
|
||||||
|
#define EGL_IMG_context_priority 1
|
||||||
|
#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100
|
||||||
|
#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101
|
||||||
|
#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102
|
||||||
|
#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
|
||||||
|
#endif /* EGL_IMG_context_priority */
|
||||||
|
|
||||||
|
#ifndef EGL_MESA_drm_image
|
||||||
|
#define EGL_MESA_drm_image 1
|
||||||
|
#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
|
||||||
|
#define EGL_DRM_BUFFER_USE_MESA 0x31D1
|
||||||
|
#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
|
||||||
|
#define EGL_DRM_BUFFER_MESA 0x31D3
|
||||||
|
#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4
|
||||||
|
#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001
|
||||||
|
#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002
|
||||||
|
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_MESA_drm_image */
|
||||||
|
|
||||||
|
#ifndef EGL_MESA_platform_gbm
|
||||||
|
#define EGL_MESA_platform_gbm 1
|
||||||
|
#define EGL_PLATFORM_GBM_MESA 0x31D7
|
||||||
|
#endif /* EGL_MESA_platform_gbm */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_3dvision_surface
|
||||||
|
#define EGL_NV_3dvision_surface 1
|
||||||
|
#define EGL_AUTO_STEREO_NV 0x3136
|
||||||
|
#endif /* EGL_NV_3dvision_surface */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_coverage_sample
|
||||||
|
#define EGL_NV_coverage_sample 1
|
||||||
|
#define EGL_COVERAGE_BUFFERS_NV 0x30E0
|
||||||
|
#define EGL_COVERAGE_SAMPLES_NV 0x30E1
|
||||||
|
#endif /* EGL_NV_coverage_sample */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_coverage_sample_resolve
|
||||||
|
#define EGL_NV_coverage_sample_resolve 1
|
||||||
|
#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131
|
||||||
|
#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132
|
||||||
|
#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
|
||||||
|
#endif /* EGL_NV_coverage_sample_resolve */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_depth_nonlinear
|
||||||
|
#define EGL_NV_depth_nonlinear 1
|
||||||
|
#define EGL_DEPTH_ENCODING_NV 0x30E2
|
||||||
|
#define EGL_DEPTH_ENCODING_NONE_NV 0
|
||||||
|
#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
|
||||||
|
#endif /* EGL_NV_depth_nonlinear */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_native_query
|
||||||
|
#define EGL_NV_native_query 1
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_NV_native_query */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_post_convert_rounding
|
||||||
|
#define EGL_NV_post_convert_rounding 1
|
||||||
|
#endif /* EGL_NV_post_convert_rounding */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_post_sub_buffer
|
||||||
|
#define EGL_NV_post_sub_buffer 1
|
||||||
|
#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_NV_post_sub_buffer */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_stream_sync
|
||||||
|
#define EGL_NV_stream_sync 1
|
||||||
|
#define EGL_SYNC_NEW_FRAME_NV 0x321F
|
||||||
|
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_NV_stream_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_sync
|
||||||
|
#define EGL_NV_sync 1
|
||||||
|
typedef void *EGLSyncNV;
|
||||||
|
typedef khronos_utime_nanoseconds_t EGLTimeNV;
|
||||||
|
#ifdef KHRONOS_SUPPORT_INT64
|
||||||
|
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
|
||||||
|
#define EGL_SYNC_STATUS_NV 0x30E7
|
||||||
|
#define EGL_SIGNALED_NV 0x30E8
|
||||||
|
#define EGL_UNSIGNALED_NV 0x30E9
|
||||||
|
#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001
|
||||||
|
#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull
|
||||||
|
#define EGL_ALREADY_SIGNALED_NV 0x30EA
|
||||||
|
#define EGL_TIMEOUT_EXPIRED_NV 0x30EB
|
||||||
|
#define EGL_CONDITION_SATISFIED_NV 0x30EC
|
||||||
|
#define EGL_SYNC_TYPE_NV 0x30ED
|
||||||
|
#define EGL_SYNC_CONDITION_NV 0x30EE
|
||||||
|
#define EGL_SYNC_FENCE_NV 0x30EF
|
||||||
|
#define EGL_NO_SYNC_NV ((EGLSyncNV)0)
|
||||||
|
typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync);
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
||||||
|
#endif
|
||||||
|
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||||
|
#endif /* EGL_NV_sync */
|
||||||
|
|
||||||
|
#ifndef EGL_NV_system_time
|
||||||
|
#define EGL_NV_system_time 1
|
||||||
|
typedef khronos_utime_nanoseconds_t EGLuint64NV;
|
||||||
|
#ifdef KHRONOS_SUPPORT_INT64
|
||||||
|
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
|
||||||
|
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
|
||||||
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
|
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void);
|
||||||
|
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
|
||||||
|
#endif
|
||||||
|
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||||
|
#endif /* EGL_NV_system_time */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
#ifndef __eglplatform_h_
|
||||||
|
#define __eglplatform_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2007-2013 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 following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Platform-specific types and definitions for egl.h
|
||||||
|
* $Revision: 23432 $ on $Date: 2013-10-09 00:57:24 -0700 (Wed, 09 Oct 2013) $
|
||||||
|
*
|
||||||
|
* Adopters may modify khrplatform.h and this file to suit their platform.
|
||||||
|
* You are encouraged to submit all modifications to the Khronos group so that
|
||||||
|
* they can be included in future versions of this file. Please submit changes
|
||||||
|
* by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
|
||||||
|
* by filing a bug against product "EGL" component "Registry".
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <KHR/khrplatform.h>
|
||||||
|
|
||||||
|
/* Macros used in EGL function prototype declarations.
|
||||||
|
*
|
||||||
|
* EGL functions should be prototyped as:
|
||||||
|
*
|
||||||
|
* EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
|
||||||
|
* typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
|
||||||
|
*
|
||||||
|
* KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EGLAPI
|
||||||
|
#define EGLAPI KHRONOS_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EGLAPIENTRY
|
||||||
|
#define EGLAPIENTRY KHRONOS_APIENTRY
|
||||||
|
#endif
|
||||||
|
#define EGLAPIENTRYP EGLAPIENTRY*
|
||||||
|
|
||||||
|
/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
|
||||||
|
* are aliases of window-system-dependent types, such as X Display * or
|
||||||
|
* Windows Device Context. They must be defined in platform-specific
|
||||||
|
* code below. The EGL-prefixed versions of Native*Type are the same
|
||||||
|
* types, renamed in EGL 1.3 so all types in the API start with "EGL".
|
||||||
|
*
|
||||||
|
* Khronos STRONGLY RECOMMENDS that you use the default definitions
|
||||||
|
* provided below, since these changes affect both binary and source
|
||||||
|
* portability of applications using EGL running on different EGL
|
||||||
|
* implementations.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef HDC EGLNativeDisplayType;
|
||||||
|
typedef HBITMAP EGLNativePixmapType;
|
||||||
|
typedef HWND EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
||||||
|
|
||||||
|
typedef int EGLNativeDisplayType;
|
||||||
|
typedef void *EGLNativeWindowType;
|
||||||
|
typedef void *EGLNativePixmapType;
|
||||||
|
|
||||||
|
#elif defined(__ANDROID__) || defined(ANDROID)
|
||||||
|
|
||||||
|
#include <android/native_window.h>
|
||||||
|
|
||||||
|
struct egl_native_pixmap_t;
|
||||||
|
|
||||||
|
typedef struct ANativeWindow* EGLNativeWindowType;
|
||||||
|
typedef struct egl_native_pixmap_t* EGLNativePixmapType;
|
||||||
|
typedef void* EGLNativeDisplayType;
|
||||||
|
|
||||||
|
#elif defined(__unix__)
|
||||||
|
|
||||||
|
/* X11 (tentative) */
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
typedef Display *EGLNativeDisplayType;
|
||||||
|
typedef Pixmap EGLNativePixmapType;
|
||||||
|
typedef Window EGLNativeWindowType;
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Platform not recognized"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
|
||||||
|
typedef EGLNativeDisplayType NativeDisplayType;
|
||||||
|
typedef EGLNativePixmapType NativePixmapType;
|
||||||
|
typedef EGLNativeWindowType NativeWindowType;
|
||||||
|
|
||||||
|
|
||||||
|
/* Define EGLint. This must be a signed integral type large enough to contain
|
||||||
|
* all legal attribute names and values passed into and out of EGL, whether
|
||||||
|
* their type is boolean, bitmask, enumerant (symbolic constant), integer,
|
||||||
|
* handle, or other. While in general a 32-bit integer will suffice, if
|
||||||
|
* handles are 64 bit types, then EGLint should be defined as a signed 64-bit
|
||||||
|
* integer type.
|
||||||
|
*/
|
||||||
|
typedef khronos_int32_t EGLint;
|
||||||
|
|
||||||
|
#endif /* __eglplatform_h */
|
||||||
@@ -0,0 +1,282 @@
|
|||||||
|
#ifndef __khrplatform_h_
|
||||||
|
#define __khrplatform_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2008-2009 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 following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Khronos platform-specific types and definitions.
|
||||||
|
*
|
||||||
|
* $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
|
||||||
|
*
|
||||||
|
* Adopters may modify this file to suit their platform. Adopters are
|
||||||
|
* encouraged to submit platform specific modifications to the Khronos
|
||||||
|
* group so that they can be included in future versions of this file.
|
||||||
|
* Please submit changes by sending them to the public Khronos Bugzilla
|
||||||
|
* (http://khronos.org/bugzilla) by filing a bug against product
|
||||||
|
* "Khronos (general)" component "Registry".
|
||||||
|
*
|
||||||
|
* A predefined template which fills in some of the bug fields can be
|
||||||
|
* reached using http://tinyurl.com/khrplatform-h-bugreport, but you
|
||||||
|
* must create a Bugzilla login first.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* See the Implementer's Guidelines for information about where this file
|
||||||
|
* should be located on your system and for more details of its use:
|
||||||
|
* http://www.khronos.org/registry/implementers_guide.pdf
|
||||||
|
*
|
||||||
|
* This file should be included as
|
||||||
|
* #include <KHR/khrplatform.h>
|
||||||
|
* by Khronos client API header files that use its types and defines.
|
||||||
|
*
|
||||||
|
* The types in khrplatform.h should only be used to define API-specific types.
|
||||||
|
*
|
||||||
|
* Types defined in khrplatform.h:
|
||||||
|
* khronos_int8_t signed 8 bit
|
||||||
|
* khronos_uint8_t unsigned 8 bit
|
||||||
|
* khronos_int16_t signed 16 bit
|
||||||
|
* khronos_uint16_t unsigned 16 bit
|
||||||
|
* khronos_int32_t signed 32 bit
|
||||||
|
* khronos_uint32_t unsigned 32 bit
|
||||||
|
* khronos_int64_t signed 64 bit
|
||||||
|
* khronos_uint64_t unsigned 64 bit
|
||||||
|
* khronos_intptr_t signed same number of bits as a pointer
|
||||||
|
* khronos_uintptr_t unsigned same number of bits as a pointer
|
||||||
|
* khronos_ssize_t signed size
|
||||||
|
* khronos_usize_t unsigned size
|
||||||
|
* khronos_float_t signed 32 bit floating point
|
||||||
|
* khronos_time_ns_t unsigned 64 bit time in nanoseconds
|
||||||
|
* khronos_utime_nanoseconds_t unsigned time interval or absolute time in
|
||||||
|
* nanoseconds
|
||||||
|
* khronos_stime_nanoseconds_t signed time interval in nanoseconds
|
||||||
|
* khronos_boolean_enum_t enumerated boolean type. This should
|
||||||
|
* only be used as a base type when a client API's boolean type is
|
||||||
|
* an enum. Client APIs which use an integer or other type for
|
||||||
|
* booleans cannot use this as the base type for their boolean.
|
||||||
|
*
|
||||||
|
* Tokens defined in khrplatform.h:
|
||||||
|
*
|
||||||
|
* KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
|
||||||
|
*
|
||||||
|
* KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
|
||||||
|
* KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
|
||||||
|
*
|
||||||
|
* Calling convention macros defined in this file:
|
||||||
|
* KHRONOS_APICALL
|
||||||
|
* KHRONOS_APIENTRY
|
||||||
|
* KHRONOS_APIATTRIBUTES
|
||||||
|
*
|
||||||
|
* These may be used in function prototypes as:
|
||||||
|
*
|
||||||
|
* KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
|
||||||
|
* int arg1,
|
||||||
|
* int arg2) KHRONOS_APIATTRIBUTES;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APICALL
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This precedes the return type of the function in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||||
|
# define KHRONOS_APICALL __declspec(dllimport)
|
||||||
|
#elif defined (__SYMBIAN32__)
|
||||||
|
# define KHRONOS_APICALL IMPORT_C
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIENTRY
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the return type of the function and precedes the function
|
||||||
|
* name in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
|
||||||
|
/* Win32 but not WinCE */
|
||||||
|
# define KHRONOS_APIENTRY __stdcall
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIATTRIBUTES
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the closing parenthesis of the function prototype arguments.
|
||||||
|
*/
|
||||||
|
#if defined (__ARMCC_2__)
|
||||||
|
#define KHRONOS_APIATTRIBUTES __softfp
|
||||||
|
#else
|
||||||
|
#define KHRONOS_APIATTRIBUTES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* basic type definitions
|
||||||
|
*-----------------------------------------------------------------------*/
|
||||||
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <stdint.h>
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(__VMS ) || defined(__sgi)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <inttypes.h>
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Win32
|
||||||
|
*/
|
||||||
|
typedef __int32 khronos_int32_t;
|
||||||
|
typedef unsigned __int32 khronos_uint32_t;
|
||||||
|
typedef __int64 khronos_int64_t;
|
||||||
|
typedef unsigned __int64 khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(__sun__) || defined(__digital__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sun or Digital
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#if defined(__arch64__) || defined(_LP64)
|
||||||
|
typedef long int khronos_int64_t;
|
||||||
|
typedef unsigned long int khronos_uint64_t;
|
||||||
|
#else
|
||||||
|
typedef long long int khronos_int64_t;
|
||||||
|
typedef unsigned long long int khronos_uint64_t;
|
||||||
|
#endif /* __arch64__ */
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hypothetical platform with no float or int64 support
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 0
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 0
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic fallback
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that are (so far) the same on all platforms
|
||||||
|
*/
|
||||||
|
typedef signed char khronos_int8_t;
|
||||||
|
typedef unsigned char khronos_uint8_t;
|
||||||
|
typedef signed short int khronos_int16_t;
|
||||||
|
typedef unsigned short int khronos_uint16_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that differ between LLP64 and LP64 architectures - in LLP64,
|
||||||
|
* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
|
||||||
|
* to be the only LLP64 architecture in current use.
|
||||||
|
*/
|
||||||
|
#ifdef _WIN64
|
||||||
|
typedef signed long long int khronos_intptr_t;
|
||||||
|
typedef unsigned long long int khronos_uintptr_t;
|
||||||
|
typedef signed long long int khronos_ssize_t;
|
||||||
|
typedef unsigned long long int khronos_usize_t;
|
||||||
|
#else
|
||||||
|
typedef signed long int khronos_intptr_t;
|
||||||
|
typedef unsigned long int khronos_uintptr_t;
|
||||||
|
typedef signed long int khronos_ssize_t;
|
||||||
|
typedef unsigned long int khronos_usize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_FLOAT
|
||||||
|
/*
|
||||||
|
* Float type
|
||||||
|
*/
|
||||||
|
typedef float khronos_float_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_INT64
|
||||||
|
/* Time types
|
||||||
|
*
|
||||||
|
* These types can be used to represent a time interval in nanoseconds or
|
||||||
|
* an absolute Unadjusted System Time. Unadjusted System Time is the number
|
||||||
|
* of nanoseconds since some arbitrary system event (e.g. since the last
|
||||||
|
* time the system booted). The Unadjusted System Time is an unsigned
|
||||||
|
* 64 bit value that wraps back to 0 every 584 years. Time intervals
|
||||||
|
* may be either signed or unsigned.
|
||||||
|
*/
|
||||||
|
typedef khronos_uint64_t khronos_utime_nanoseconds_t;
|
||||||
|
typedef khronos_int64_t khronos_stime_nanoseconds_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dummy value used to pad enum types to 32 bits.
|
||||||
|
*/
|
||||||
|
#ifndef KHRONOS_MAX_ENUM
|
||||||
|
#define KHRONOS_MAX_ENUM 0x7FFFFFFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enumerated boolean type
|
||||||
|
*
|
||||||
|
* Values other than zero should be considered to be true. Therefore
|
||||||
|
* comparisons should not be made against KHRONOS_TRUE.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
KHRONOS_FALSE = 0,
|
||||||
|
KHRONOS_TRUE = 1,
|
||||||
|
KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
|
||||||
|
} khronos_boolean_enum_t;
|
||||||
|
|
||||||
|
#endif /* __khrplatform_h_ */
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2008 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CL_COMMON_HPP_
|
||||||
|
#define CL_COMMON_HPP_
|
||||||
|
|
||||||
|
#include "top.hpp"
|
||||||
|
#include "platform/runtime.hpp"
|
||||||
|
#include "platform/command.hpp"
|
||||||
|
#include "platform/memory.hpp"
|
||||||
|
#include "thread/thread.hpp"
|
||||||
|
#include "platform/commandqueue.hpp"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
//! \cond ignore
|
||||||
|
namespace amd {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class NotNullWrapper
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
T* const ptrOrNull_;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
explicit NotNullWrapper(T* ptrOrNull)
|
||||||
|
: ptrOrNull_(ptrOrNull)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public:
|
||||||
|
void operator = (T value) const
|
||||||
|
{
|
||||||
|
if (ptrOrNull_ != NULL) {
|
||||||
|
*ptrOrNull_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class NotNullReference : protected NotNullWrapper<T>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit NotNullReference(T* ptrOrNull)
|
||||||
|
: NotNullWrapper<T>(ptrOrNull)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
const NotNullWrapper<T>& operator * () const { return *this; }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace amd
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline amd::NotNullReference<T>
|
||||||
|
not_null(T* ptrOrNull)
|
||||||
|
{
|
||||||
|
return amd::NotNullReference<T>(ptrOrNull);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CL_CHECK_THREAD(thread) \
|
||||||
|
(thread != NULL || ((thread = new amd::HostThread()) != NULL \
|
||||||
|
&& thread == amd::Thread::current()))
|
||||||
|
|
||||||
|
#define RUNTIME_ENTRY_RET(ret, func, args) \
|
||||||
|
CL_API_ENTRY ret CL_API_CALL \
|
||||||
|
func args \
|
||||||
|
{ \
|
||||||
|
amd::Thread* thread = amd::Thread::current(); \
|
||||||
|
if (!CL_CHECK_THREAD(thread)) { \
|
||||||
|
*not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY; \
|
||||||
|
return (ret) 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RUNTIME_ENTRY_RET_NOERRCODE(ret, func, args) \
|
||||||
|
CL_API_ENTRY ret CL_API_CALL \
|
||||||
|
func args \
|
||||||
|
{ \
|
||||||
|
amd::Thread* thread = amd::Thread::current(); \
|
||||||
|
if (!CL_CHECK_THREAD(thread)) { \
|
||||||
|
return (ret) 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RUNTIME_ENTRY(ret, func, args) \
|
||||||
|
CL_API_ENTRY ret CL_API_CALL \
|
||||||
|
func args \
|
||||||
|
{ \
|
||||||
|
amd::Thread* thread = amd::Thread::current(); \
|
||||||
|
if (!CL_CHECK_THREAD(thread)) { \
|
||||||
|
return CL_OUT_OF_HOST_MEMORY; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RUNTIME_ENTRY_VOID(ret, func, args) \
|
||||||
|
CL_API_ENTRY ret CL_API_CALL \
|
||||||
|
func args \
|
||||||
|
{ \
|
||||||
|
amd::Thread* thread = amd::Thread::current(); \
|
||||||
|
if (!CL_CHECK_THREAD(thread)) { \
|
||||||
|
return; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RUNTIME_EXIT \
|
||||||
|
/* FIXME_lmoriche: we should check to thread->lastError here! */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Helper function to check "properties" parameter in various functions
|
||||||
|
int checkContextProperties(
|
||||||
|
const cl_context_properties *properties,
|
||||||
|
bool* offlineDevices);
|
||||||
|
|
||||||
|
namespace amd {
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct ParamInfo
|
||||||
|
{
|
||||||
|
static inline std::pair<const void*, size_t> get(const T& param) {
|
||||||
|
return std::pair<const void*, size_t>(¶m, sizeof(T));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ParamInfo<const char*>
|
||||||
|
{
|
||||||
|
static inline std::pair<const void*, size_t> get(const char* param) {
|
||||||
|
return std::pair<const void*, size_t>(param, strlen(param) + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
struct ParamInfo<char[N]>
|
||||||
|
{
|
||||||
|
static inline std::pair<const void*, size_t> get(const char* param) {
|
||||||
|
return std::pair<const void*, size_t>(param, strlen(param) + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static inline cl_int
|
||||||
|
clGetInfo(
|
||||||
|
T& field,
|
||||||
|
size_t param_value_size,
|
||||||
|
void* param_value,
|
||||||
|
size_t* param_value_size_ret)
|
||||||
|
{
|
||||||
|
const void *valuePtr;
|
||||||
|
size_t valueSize;
|
||||||
|
|
||||||
|
std::tie(valuePtr, valueSize)
|
||||||
|
= detail::ParamInfo<typename std::remove_const<T>::type>::get(field);
|
||||||
|
|
||||||
|
*not_null(param_value_size_ret) = valueSize;
|
||||||
|
|
||||||
|
cl_int ret = CL_SUCCESS;
|
||||||
|
if (param_value != NULL && param_value_size < valueSize) {
|
||||||
|
if (!std::is_pointer<T>() || !std::is_same<typename std::remove_const<
|
||||||
|
typename std::remove_pointer<T>::type>::type, char>()) {
|
||||||
|
return CL_INVALID_VALUE;
|
||||||
|
}
|
||||||
|
// For char* and char[] params, we will at least fill up to
|
||||||
|
// param_value_size, then return an error.
|
||||||
|
valueSize = param_value_size;
|
||||||
|
static_cast<char*>(param_value)[--valueSize] = '\0';
|
||||||
|
ret = CL_INVALID_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param_value != NULL) {
|
||||||
|
::memcpy(param_value, valuePtr, valueSize);
|
||||||
|
if (param_value_size > valueSize) {
|
||||||
|
::memset(static_cast<address>(param_value) + valueSize,
|
||||||
|
'\0', param_value_size - valueSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline cl_int
|
||||||
|
clSetEventWaitList(
|
||||||
|
Command::EventWaitList& eventWaitList,
|
||||||
|
const amd::HostQueue& hostQueue,
|
||||||
|
cl_uint num_events_in_wait_list,
|
||||||
|
const cl_event* event_wait_list)
|
||||||
|
{
|
||||||
|
if ((num_events_in_wait_list == 0 && event_wait_list != NULL)
|
||||||
|
|| (num_events_in_wait_list != 0 && event_wait_list == NULL)) {
|
||||||
|
return CL_INVALID_EVENT_WAIT_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (num_events_in_wait_list-- > 0) {
|
||||||
|
cl_event event = *event_wait_list++;
|
||||||
|
Event* amdEvent = as_amd(event);
|
||||||
|
if (!is_valid(event)) {
|
||||||
|
return CL_INVALID_EVENT_WAIT_LIST;
|
||||||
|
}
|
||||||
|
if (&hostQueue.context() != &amdEvent->context()) {
|
||||||
|
return CL_INVALID_CONTEXT;
|
||||||
|
}
|
||||||
|
if ((amdEvent->command().queue() != &hostQueue) && !amdEvent->notifyCmdQueue()) {
|
||||||
|
return CL_INVALID_EVENT_WAIT_LIST;
|
||||||
|
}
|
||||||
|
eventWaitList.push_back(amdEvent);
|
||||||
|
}
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Common function declarations for CL-external graphics API interop
|
||||||
|
cl_int clEnqueueAcquireExtObjectsAMD(cl_command_queue command_queue,
|
||||||
|
cl_uint num_objects, const cl_mem* mem_objects,
|
||||||
|
cl_uint num_events_in_wait_list, const cl_event* event_wait_list,
|
||||||
|
cl_event* event, cl_command_type cmd_type);
|
||||||
|
cl_int clEnqueueReleaseExtObjectsAMD(cl_command_queue command_queue,
|
||||||
|
cl_uint num_objects, const cl_mem* mem_objects,
|
||||||
|
cl_uint num_events_in_wait_list, const cl_event* event_wait_list,
|
||||||
|
cl_event* event, cl_command_type cmd_type);
|
||||||
|
|
||||||
|
// This may need moving somewhere tidier...
|
||||||
|
|
||||||
|
struct PlatformIDS { const struct KHRicdVendorDispatchRec* dispatch_; };
|
||||||
|
class PlatformID {
|
||||||
|
public:
|
||||||
|
static PlatformIDS Platform;
|
||||||
|
};
|
||||||
|
#define AMD_PLATFORM (reinterpret_cast<cl_platform_id>(&amd::PlatformID::Platform))
|
||||||
|
|
||||||
|
} // namespace amd
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_key_amd CL_API_CALL
|
||||||
|
clCreateKeyAMD(
|
||||||
|
cl_platform_id platform,
|
||||||
|
void (CL_CALLBACK * destructor)( void * ),
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clObjectGetValueForKeyAMD(
|
||||||
|
void * object,
|
||||||
|
cl_key_amd key,
|
||||||
|
void ** ret_val);
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clObjectSetValueForKeyAMD(
|
||||||
|
void * object,
|
||||||
|
cl_key_amd key,
|
||||||
|
void * value);
|
||||||
|
|
||||||
|
#if defined(CL_VERSION_1_1)
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||||
|
clSetCommandQueueProperty(
|
||||||
|
cl_command_queue command_queue,
|
||||||
|
cl_command_queue_properties properties,
|
||||||
|
cl_bool enable,
|
||||||
|
cl_command_queue_properties *old_properties) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
#endif // CL_VERSION_1_1
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clConvertImageAMD(
|
||||||
|
cl_context context,
|
||||||
|
cl_mem image,
|
||||||
|
const cl_image_format * image_format,
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_mem CL_API_CALL
|
||||||
|
clCreateBufferFromImageAMD(
|
||||||
|
cl_context context,
|
||||||
|
cl_mem image,
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_program CL_API_CALL
|
||||||
|
clCreateProgramWithAssemblyAMD(
|
||||||
|
cl_context context,
|
||||||
|
cl_uint count,
|
||||||
|
const char ** strings,
|
||||||
|
const size_t * lengths,
|
||||||
|
cl_int * errcode_ret);
|
||||||
|
|
||||||
|
} // extern "C"
|
||||||
|
|
||||||
|
//! \endcond
|
||||||
|
|
||||||
|
#endif /*CL_COMMON_HPP_*/
|
||||||
@@ -0,0 +1,678 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2014 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef __CL_DEBUGGER_AMD_H
|
||||||
|
#define __CL_DEBUGGER_AMD_H
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <OpenCL/cl_platform.h>
|
||||||
|
#else
|
||||||
|
#include <CL/cl_platform.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************
|
||||||
|
* Private AMD extension cl_dbg *
|
||||||
|
******************************************/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
#define CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD -80
|
||||||
|
#define CL_DEBUGGER_REGISTER_FAILURE_AMD -81
|
||||||
|
#define CL_TRAP_HANDLER_NOT_DEFINED_AMD -82
|
||||||
|
#define CL_EVENT_TIMEOUT_AMD -83
|
||||||
|
|
||||||
|
|
||||||
|
typedef uintptr_t cl_dbg_event_amd; //! debug event
|
||||||
|
|
||||||
|
/*! \brief Trap Handler Type
|
||||||
|
*
|
||||||
|
* The trap handler for each support type.
|
||||||
|
*/
|
||||||
|
enum cl_dbg_trap_type_amd {
|
||||||
|
CL_DBG_DEBUG_TRAP = 0, //! HW debug
|
||||||
|
CL_DBG_MAX_TRAP
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! \brief Wave actions used to control the wave execution on the hardware
|
||||||
|
*
|
||||||
|
* The wave action enumerations are used to specify the desired
|
||||||
|
* behavior when calling the wave control function. Overall, there are
|
||||||
|
* five types of operations that can be specified.
|
||||||
|
*/
|
||||||
|
enum cl_dbg_waves_action_amd {
|
||||||
|
CL_DBG_WAVES_DONT_USE_ZERO = 0, //! NOT USED
|
||||||
|
CL_DBG_WAVES_HALT = 1, //! halt wave
|
||||||
|
CL_DBG_WAVES_RESUME = 2, //! resume wave
|
||||||
|
CL_DBG_WAVES_KILL = 3, //! kill wave
|
||||||
|
CL_DBG_WAVES_DEBUG = 4, //! debug wave
|
||||||
|
CL_DBG_WAVES_TRAP = 5, //! trap
|
||||||
|
CL_DBG_WAVES_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! \brief Host actions when encountering an exception in the kernel.
|
||||||
|
*
|
||||||
|
* The host action enumeration is used to specify the desired host
|
||||||
|
* response in the event thatn a device kernel exception is encountered.
|
||||||
|
*/
|
||||||
|
enum cl_dbg_host_action_amd {
|
||||||
|
CL_DBG_HOST_IGNORE = 1, //! ignore the kernel exception
|
||||||
|
CL_DBG_HOST_EXIT = 2, //! exit the host application on a kernel exception
|
||||||
|
CL_DBG_HOST_NOTIFY = 4 //! report the kernel exception
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! \brief Mode of the wave action when calling the wave control function
|
||||||
|
*
|
||||||
|
* The wave mode enumerations are used to specify the desired
|
||||||
|
* broadcast level when calling the wave control function.
|
||||||
|
*/
|
||||||
|
enum cl_dbg_wave_mode_amd {
|
||||||
|
CL_DBG_WAVEMODE_SINGLE = 0, //! send command to single wave
|
||||||
|
CL_DBG_WAVEMODE_BROADCAST = 2, //! send command to wave with match VMID
|
||||||
|
CL_DBG_WAVEMODE_BROADCAST_CU = 3, //! send command to wave with match VMID with specific CU
|
||||||
|
CL_DBG_WAVEMODE_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! \brief Enumeration of address watch mode
|
||||||
|
*
|
||||||
|
* This enumeration indicates the different modes of address watch.
|
||||||
|
*/
|
||||||
|
enum cl_dbg_address_watch_mode_amd {
|
||||||
|
CL_DBG_ADDR_WATCH_MODE_READ = 0, //! Read operations only
|
||||||
|
CL_DBG_ADDR_WATCH_MODE_NONREAD = 1, //! Write or Atomic operations only
|
||||||
|
CL_DBG_ADDR_WATCH_MODE_ATOMIC = 2, //! Atomic Operations only
|
||||||
|
CL_DBG_ADDR_WATCH_MODE_ALL = 3, //! Read, Write or Atomic operations
|
||||||
|
CL_DBG_ADDR_WATCH_MODE_MAX //! Number of address watch modes
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! \brief Dispatch exception policy descriptor
|
||||||
|
*
|
||||||
|
* The dispatch exception policy descriptor is used to define the
|
||||||
|
* expected exception policy in the event an exception is encountered
|
||||||
|
* on the associated dispatch.
|
||||||
|
*/
|
||||||
|
typedef struct _cl_dbg_exception_policy_amd {
|
||||||
|
cl_uint exceptionMask; //! exception mask
|
||||||
|
cl_dbg_waves_action_amd waveAction; //! wave action
|
||||||
|
cl_dbg_host_action_amd hostAction; //! host action
|
||||||
|
cl_dbg_wave_mode_amd waveMode; //! wave mode
|
||||||
|
} cl_dbg_exception_policy_amd;
|
||||||
|
|
||||||
|
/*! \brief Kernel execution mode
|
||||||
|
*
|
||||||
|
* This structure is used to control the kernel execution mode. The
|
||||||
|
* following aspects are included in this structure:
|
||||||
|
* 1. Regular execution or debug mode (0: regular execution (default),
|
||||||
|
* 1: debug mode)
|
||||||
|
* 2. SQ debugger mode on/off
|
||||||
|
* 3. Disable L1 scalar cache (0: enable (default), 1: disable)
|
||||||
|
* 4. Disable L1 vector cache (0: enable (default), 1: disable)
|
||||||
|
* 5. Disable L2 cache (0: enable (default), 1: disable)
|
||||||
|
* 6. Num of CUs reserved for display (0 (default), 7: max)
|
||||||
|
*/
|
||||||
|
typedef struct _cl_dbg_kernel_exec_mode_amd {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
cl_uint monitorMode : 1;
|
||||||
|
cl_uint gpuSingleStepMode : 1;
|
||||||
|
cl_uint disableL1Scalar : 1;
|
||||||
|
cl_uint disableL1Vector : 1;
|
||||||
|
cl_uint disableL2Cache : 1;
|
||||||
|
cl_uint reservedCuNum : 3;
|
||||||
|
cl_uint reserved : 24;
|
||||||
|
};
|
||||||
|
cl_uint ui32All;
|
||||||
|
};
|
||||||
|
} cl_dbg_kernel_exec_mode_amd;
|
||||||
|
|
||||||
|
/*! \brief GPU cache mask
|
||||||
|
*
|
||||||
|
* This structure is used to specify the GPU cache to be flushed/invalidated
|
||||||
|
*/
|
||||||
|
typedef struct _cl_dbg_gpu_cache_mask_amd {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
cl_uint sqICache : 1; //! instruction cache
|
||||||
|
cl_uint sqKCache : 1; //! data cache
|
||||||
|
cl_uint tcL1 : 1; //! tcL1 cache
|
||||||
|
cl_uint tcL2 : 1; //! tcL2 cache
|
||||||
|
cl_uint reserved : 28;
|
||||||
|
};
|
||||||
|
cl_uint ui32All;
|
||||||
|
};
|
||||||
|
} cl_dbg_gpu_cache_mask_amd;
|
||||||
|
|
||||||
|
/*! \brief Dispatch Debug Info
|
||||||
|
*
|
||||||
|
* This structure is used to store the scratch and global memory descriptors
|
||||||
|
*/
|
||||||
|
typedef struct _cl_dispatch_debug_info_amd {
|
||||||
|
cl_uint scratchMemoryDescriptor[4]; //! Scratch memory descriptors
|
||||||
|
cl_uint globalMemoryDescriptor[4]; //! Global memory descriptors
|
||||||
|
} cl_dispatch_debug_info_amd;
|
||||||
|
|
||||||
|
/*! \brief AQL Packet Info
|
||||||
|
*
|
||||||
|
* This structure is used to store AQL packet informatin for kernel dispatch
|
||||||
|
*/
|
||||||
|
typedef struct _cl_aql_packet_info_amd {
|
||||||
|
cl_uint trapReservedVgprIndex; //! VGPR index reserved for trap
|
||||||
|
//! value is -1 when kernel was not compiled
|
||||||
|
//! in debug mode.
|
||||||
|
cl_uint scratchBufferWaveOffset; //! scratch buffer wave offset
|
||||||
|
//! value is -1 when kernel was not compiled
|
||||||
|
//! in debug mode or scratch buffer is not enabled
|
||||||
|
void* pointerToIsaBuffer; //! Pointer to buffer containing ISA
|
||||||
|
size_t sizeOfIsaBuffer; //! Size of the ISA buffer
|
||||||
|
|
||||||
|
cl_uint numberOfVgprs; //! Number of VGPRs used by the kernel
|
||||||
|
cl_uint numberOfSgprs; //! Number of SGPRs used by the kernel
|
||||||
|
size_t sizeOfStaticGroupMemory; //! Static local memory used by the kernel
|
||||||
|
} cl_aql_packet_info_amd;
|
||||||
|
|
||||||
|
/*! \brief Wave address
|
||||||
|
*
|
||||||
|
* This structure specifies the wave for the SQ control command
|
||||||
|
*/
|
||||||
|
typedef struct _cl_dbg_wave_addr_amd {
|
||||||
|
cl_uint shaderEngine : 2; //! Shader engine
|
||||||
|
cl_uint shaderArray : 1; //! Shader array
|
||||||
|
cl_uint computeUnit : 4; //! Compute unit
|
||||||
|
cl_uint simd : 2; //! SIMD id
|
||||||
|
cl_uint wave : 4; //! Wave id
|
||||||
|
cl_uint vmid : 4; //! VMID
|
||||||
|
cl_uint reserved : 15;
|
||||||
|
|
||||||
|
} cl_dbg_wave_addr_amd;
|
||||||
|
|
||||||
|
/*! \brief Pre-dispatch call back function signature
|
||||||
|
*
|
||||||
|
* This is the signature of the call back fuction before the kernel
|
||||||
|
* dispatch. The call back function is to indicate the start of the
|
||||||
|
* the kernel launch. It is used by the debugger.
|
||||||
|
*/
|
||||||
|
typedef void* (*cl_PreDispatchCallBackFunctionAMD)(cl_device_id device, void* ocl_event_handle,
|
||||||
|
const void* aql_packet, void* acl_binary,
|
||||||
|
void* user_args);
|
||||||
|
|
||||||
|
/*! \brief Post-dispatch call back function signature
|
||||||
|
*
|
||||||
|
* This is the signature of the call back fuction after the kernel
|
||||||
|
* dispatch. The call back function is to indicate the completion of
|
||||||
|
* the the kernel launch. It is used by the debugger.
|
||||||
|
*/
|
||||||
|
typedef void* (*cl_PostDispatchCallBackFunctionAMD)(cl_device_id device, cl_ulong event,
|
||||||
|
void* user_args);
|
||||||
|
|
||||||
|
/*! \brief Set up the dispatch call back function pointers
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param preDispatchFunction is the function to be called before dispatching the kernel
|
||||||
|
*
|
||||||
|
* \param postDispatchFunction is the function to be called after kernel execution
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetCallBackFunctionsAMD(
|
||||||
|
cl_device_id /* device */, cl_PreDispatchCallBackFunctionAMD /* preDispatchFunction */,
|
||||||
|
cl_PostDispatchCallBackFunctionAMD /* postDispatchFunction */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Set up the arguments of the dispatch call back function
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param preDispatchArgs is the arguments for the pre-dispatch callback function
|
||||||
|
*
|
||||||
|
* \param postDispatchArgs is the arguments for the post-dispatch callback function
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetCallBackArgumentsAMD(cl_device_id /* device */,
|
||||||
|
void* /* preDispatchArgs */,
|
||||||
|
void* /* postDispatchArgs */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Invalidate all cache on the device.
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param mask is the mask to specify which cache to be flush/invalidate
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgFlushCacheAMD(cl_device_id /* device */,
|
||||||
|
cl_dbg_gpu_cache_mask_amd /* mask */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Set up an exception policy in the trap handler object
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param policy specifies the exception policy, which includes the exception mask,
|
||||||
|
* wave action, host action, wave mode.
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the policy is not specified (NULL)
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetExceptionPolicyAMD(
|
||||||
|
cl_device_id /* device */, cl_dbg_exception_policy_amd* /* policy */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Get the exception policy in the trap handler object
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param policy is a pointer to the memory where the policy is returned
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the policy storage is not specified
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgGetExceptionPolicyAMD(
|
||||||
|
cl_device_id /* device */, cl_dbg_exception_policy_amd* /* policy */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Set up the kernel execution mode in the trap handler object
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param mode specifies the kernel execution mode, which indicate whether single
|
||||||
|
* step mode is used, how many CUs are reserved.
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the mode is not specified, ie, has a NULL value
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetKernelExecutionModeAMD(
|
||||||
|
cl_device_id /* device */, cl_dbg_kernel_exec_mode_amd* /* mode */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Get the kernel execution mode in the trap handler object
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param mode is a pointer to the memory where the exectuion mode is returned
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the mode storage is not specified, ie, has a NULL value
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgGetKernelExecutionModeAMD(
|
||||||
|
cl_device_id /* device */, cl_dbg_kernel_exec_mode_amd* /* mode */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Create a debug event
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param autoReset is the auto reset flag
|
||||||
|
*
|
||||||
|
* \param pDebugEvent returns the debug event to be used for exception notification
|
||||||
|
*
|
||||||
|
* \param pEventId is the event ID, which is not used at this moment
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the function is executed successfully
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the pDebugEvent value is NULL
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
* - CL_OUT_OF_RESOURCES if fails to create the event
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgCreateEventAMD(cl_device_id /* device */,
|
||||||
|
bool /* autoReset */,
|
||||||
|
cl_dbg_event_amd* /* pDebugEvent */,
|
||||||
|
cl_uint* /* pEventId */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Wait for a debug event to be signaled
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param pDebugEvent is the debug event to be waited for
|
||||||
|
*
|
||||||
|
* \param pEventId is the event ID, which is not used at this moment
|
||||||
|
*
|
||||||
|
* \param timeOut is the duration for waiting
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the pDebugEvent value is NULL
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
* - CL_EVENT_TIMEOUT_AMD if timeout occurs
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgWaitEventAMD(cl_device_id /* device */,
|
||||||
|
cl_dbg_event_amd /* pDebugEvent */,
|
||||||
|
cl_uint /* pEventId */,
|
||||||
|
cl_uint /* timeOut */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Destroy a debug event
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param pDebugEvent is the debug event to be waited for
|
||||||
|
*
|
||||||
|
* \param pEventId is the event ID, which is not used at this moment
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the pDebugEvent value is NULL
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgDestroyEventAMD(cl_device_id /* device */,
|
||||||
|
cl_dbg_event_amd* /* pDebugEvent */,
|
||||||
|
cl_uint* /* pEventId */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Register the debugger on a device
|
||||||
|
*
|
||||||
|
* \param context specifies the context for the debugger
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param pMessageStorge specifies the memory for trap message passing between KMD and OCL runtime
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_CONTEXT if the context is not valid
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the pMEssageStorge value is NULL
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
* - CL_OUT_OF_RESOURCES if a host queue cannot be created for the debugger
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgRegisterDebuggerAMD(
|
||||||
|
cl_context /* context */, cl_device_id /* device */, volatile void* /* pMessageStorage */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Unregister the debugger on a device
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgUnregisterDebuggerAMD(cl_device_id /* device */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Setup the pointer of the acl_binary to be used by the debugger
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param aclBinary specifies the ACL binary to be used
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the aclBinary is not provided
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetAclBinaryAMD(cl_device_id /* device */,
|
||||||
|
void* /* aclBinary */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Control the execution of wavefront on the GPU
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param action specifies the wave action - halt, resume, kill, debug
|
||||||
|
*
|
||||||
|
* \param mode specifies the wave mode
|
||||||
|
*
|
||||||
|
* \param trapID specifies the trap ID, which should be 0x7
|
||||||
|
*
|
||||||
|
* \param waveAddress specifies the wave address for the wave control
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the waveMsg is not provided, invalid action or mode value
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgWaveControlAMD(cl_device_id /* device */,
|
||||||
|
cl_dbg_waves_action_amd /* action */,
|
||||||
|
cl_dbg_wave_mode_amd /* mode */,
|
||||||
|
cl_uint /* trapId */,
|
||||||
|
cl_dbg_wave_addr_amd /* waveAddress */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Set watch points on memory address ranges to generate exception events
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param numWatchPoints specifies the number of watch points
|
||||||
|
*
|
||||||
|
* \param watchMode is the array of watch mode for the watch points
|
||||||
|
*
|
||||||
|
* \param watchAddress is the array of watch address for the watch points
|
||||||
|
*
|
||||||
|
* \param watchMask is the array of mask for the watch points
|
||||||
|
*
|
||||||
|
* \param watchEvent is the array of event for the watch points
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the number of points <= 0, or other parameters is not specified
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgAddressWatchAMD(
|
||||||
|
cl_device_id /* device */, cl_uint /* numWatchPoints */,
|
||||||
|
cl_dbg_address_watch_mode_amd* /* watchMode */, void** /* watchAddress */,
|
||||||
|
cl_ulong* /* watchMask */, cl_dbg_event_amd* /* watchEvent */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Get the packaet information for kernel execution
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param aqlCodeInfo specifies the kernel code and its size
|
||||||
|
*
|
||||||
|
* \param packetInfo points to the memory for the packet information to be returned
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgGetAqlPacketInfoAMD(
|
||||||
|
cl_device_id /* device */, const void* /* aqlCodeInfo */,
|
||||||
|
cl_aql_packet_info_amd* /* packetInfo */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Get the dispatch debug information
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param debugInfo points to the memory for the debug information to be returned
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgGetDispatchDebugInfoAMD(
|
||||||
|
cl_device_id /* device */, cl_dispatch_debug_info_amd* /* debugInfo */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Map the video memory for the kernel code to allow host access
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param aqlCodeAddress is the memory points to the returned host memory address for the kernel
|
||||||
|
* code
|
||||||
|
*
|
||||||
|
* \param aqlCodeSize returns the size of the kernel code
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgMapKernelCodeAMD(cl_device_id /* device */,
|
||||||
|
void* /* aqlCodeInfo */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Unmap the video memory for the kernel code
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used (no needed, just to be consistent)
|
||||||
|
*
|
||||||
|
* \param aqlCodeAddress is the memory points to the mapped memory address for the kernel code
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgUnmapKernelCodeAMD(cl_device_id /* device */,
|
||||||
|
cl_ulong* /* aqlCodeAddress */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Map the shader scratch ring's video memory to allow CPU access
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param scratchRingAddr is the memory points to the returned host memory address for scratch
|
||||||
|
* ring
|
||||||
|
*
|
||||||
|
* \param scratchRingSize returns the size of the scratch ring
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgMapScratchRingAMD(cl_device_id /* device */,
|
||||||
|
cl_ulong* /* scratchRingAddr */,
|
||||||
|
cl_uint* /* scratchRingSize */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Unmap the shader scratch ring's video memory
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used (no needed, just to be consistent)
|
||||||
|
*
|
||||||
|
* \param scratchRingAddr is the memory points to the mapped memory address for scratch ring
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgUnmapScratchRingAMD(cl_device_id /* device */,
|
||||||
|
cl_ulong* /* scratchRingAddr */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Get the memory object associated with the kernel parameter
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param paramIdx is the index of of the kernel argument
|
||||||
|
*
|
||||||
|
* \param paramMem is pointer of the memory associated with the kernel argument to be returned
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if the paramIdx is less than zero, or the paramMem has NULL value
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
* - CL_INVALID_KERNEL_ARGS if it fails to get the memory object for the kernel argument
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgGetKernelParamMemAMD(cl_device_id /* devicepointer */,
|
||||||
|
cl_uint /* paramIdx */,
|
||||||
|
cl_mem* /* paramMem */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
/*! \brief Set value of a global memory object
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param memObject is the memory object handle to be assigned the value specified in srcMem.
|
||||||
|
*
|
||||||
|
* \param offset is offset of the memory object
|
||||||
|
*
|
||||||
|
* \param srcMem points to the memory which contains the values to be assigned to the memory
|
||||||
|
*
|
||||||
|
* \param size size (in bytes) of the srcMem
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if memObj or srcPtr has NULL value, size <= 0 or offset < 0
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetGlobalMemoryAMD(cl_device_id /* device */,
|
||||||
|
cl_mem /* memObject */,
|
||||||
|
cl_uint /* offset */,
|
||||||
|
void* /* srcMem */,
|
||||||
|
cl_uint /* size */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Install the trap handler of a given type
|
||||||
|
*
|
||||||
|
* \param device specifies the device to be used
|
||||||
|
*
|
||||||
|
* \param trapType is the type of trap handler
|
||||||
|
*
|
||||||
|
* \param trapHandler is the pointer of trap handler (TBA)
|
||||||
|
*
|
||||||
|
* \param trapBuffer is the pointer of trap handler buffer (TMA)
|
||||||
|
*
|
||||||
|
* \param trapHandlerSize size (in bytes) of the trap handler
|
||||||
|
*
|
||||||
|
* \param trapBufferSize size (in bytes) of the trap handler buffer
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* - CL_SUCCESS if the event occurs before the timeout
|
||||||
|
* - CL_INVALID_DEVICE if the device is not valid
|
||||||
|
* - CL_INVALID_VALUE if trapHandler is NULL or trapHandlerSize <= 0
|
||||||
|
* - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgInstallTrapAMD(cl_device_id /* device */,
|
||||||
|
cl_dbg_trap_type_amd /* trapType */,
|
||||||
|
cl_mem /* trapHandler */,
|
||||||
|
cl_mem /* trapBuffer */
|
||||||
|
) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /*extern "C"*/
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
#endif /*__CL_DEBUGGER_AMD_H*/
|
||||||
@@ -0,0 +1,739 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008-2010 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 following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Materials.
|
||||||
|
*
|
||||||
|
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OPENCL_CL_ICD_H
|
||||||
|
#define __OPENCL_CL_ICD_H
|
||||||
|
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#include <CL/cl_gl.h>
|
||||||
|
|
||||||
|
#define cl_khr_icd 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetPlatformIDs_fn)(
|
||||||
|
cl_uint /* num_entries */, cl_platform_id* /* platforms */,
|
||||||
|
cl_uint* /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetPlatformInfo_fn)(
|
||||||
|
cl_platform_id /* platform */, cl_platform_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetDeviceIDs_fn)(
|
||||||
|
cl_platform_id /* platform */, cl_device_type /* device_type */, cl_uint /* num_entries */,
|
||||||
|
cl_device_id* /* devices */, cl_uint* /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetDeviceInfo_fn)(
|
||||||
|
cl_device_id /* device */, cl_device_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_context(CL_API_CALL* clCreateContext_fn)(
|
||||||
|
const cl_context_properties* /* properties */, cl_uint /* num_devices */,
|
||||||
|
const cl_device_id* /* devices */,
|
||||||
|
void(CL_CALLBACK* /* pfn_notify */)(const char*, const void*, size_t, void*),
|
||||||
|
void* /* user_data */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_context(CL_API_CALL* clCreateContextFromType_fn)(
|
||||||
|
const cl_context_properties* /* properties */, cl_device_type /* device_type */,
|
||||||
|
void(CL_CALLBACK* /* pfn_notify*/)(const char*, const void*, size_t, void*),
|
||||||
|
void* /* user_data */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainContext_fn)(cl_context /* context */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseContext_fn)(cl_context /* context */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetContextInfo_fn)(
|
||||||
|
cl_context /* context */, cl_context_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_command_queue(CL_API_CALL* clCreateCommandQueue_fn)(
|
||||||
|
cl_context /* context */, cl_device_id /* device */,
|
||||||
|
cl_command_queue_properties /* properties */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainCommandQueue_fn)(cl_command_queue /* command_queue */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseCommandQueue_fn)(cl_command_queue /* command_queue */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetCommandQueueInfo_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_command_queue_info /* param_name */,
|
||||||
|
size_t /* param_value_size */, void* /* param_value */,
|
||||||
|
size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetCommandQueueProperty_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_command_queue_properties /* properties */,
|
||||||
|
cl_bool /* enable */,
|
||||||
|
cl_command_queue_properties* /* old_properties */) /*CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED*/;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateBuffer_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, size_t /* size */, void* /* host_ptr */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateSubBuffer_fn)(
|
||||||
|
cl_mem /* buffer */, cl_mem_flags /* flags */, cl_buffer_create_type /* buffer_create_type */,
|
||||||
|
const void* /* buffer_create_info */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateImage2D_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, const cl_image_format* /* image_format */,
|
||||||
|
size_t /* image_width */, size_t /* image_height */, size_t /* image_row_pitch */,
|
||||||
|
void* /* host_ptr */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateImage3D_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, const cl_image_format* /* image_format */,
|
||||||
|
size_t /* image_width */, size_t /* image_height */, size_t /* image_depth */,
|
||||||
|
size_t /* image_row_pitch */, size_t /* image_slice_pitch */, void* /* host_ptr */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainMemObject_fn)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseMemObject_fn)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetSupportedImageFormats_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_mem_object_type /* image_type */,
|
||||||
|
cl_uint /* num_entries */, cl_image_format* /* image_formats */,
|
||||||
|
cl_uint* /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetMemObjectInfo_fn)(
|
||||||
|
cl_mem /* memobj */, cl_mem_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetImageInfo_fn)(
|
||||||
|
cl_mem /* image */, cl_image_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetMemObjectDestructorCallback_fn)(
|
||||||
|
cl_mem /* memobj */,
|
||||||
|
void(CL_CALLBACK* /*pfn_notify*/)(cl_mem /* memobj */, void* /*user_data*/),
|
||||||
|
void* /*user_data */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
/* Sampler APIs */
|
||||||
|
typedef cl_sampler(CL_API_CALL* clCreateSampler_fn)(
|
||||||
|
cl_context /* context */, cl_bool /* normalized_coords */,
|
||||||
|
cl_addressing_mode /* addressing_mode */, cl_filter_mode /* filter_mode */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainSampler_fn)(cl_sampler /* sampler */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseSampler_fn)(cl_sampler /* sampler */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetSamplerInfo_fn)(
|
||||||
|
cl_sampler /* sampler */, cl_sampler_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* Program Object APIs */
|
||||||
|
typedef cl_program(CL_API_CALL* clCreateProgramWithSource_fn)(
|
||||||
|
cl_context /* context */, cl_uint /* count */, const char** /* strings */,
|
||||||
|
const size_t* /* lengths */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_program CL_API_CALL
|
||||||
|
clCreateProgramWithIL(cl_context /* context */,
|
||||||
|
const void * /* strings */, size_t /* lengths */,
|
||||||
|
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_program(CL_API_CALL* clCreateProgramWithILKHR_fn)(
|
||||||
|
cl_context /* context */, const void* /* il */, size_t /* length */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_program(CL_API_CALL* clCreateProgramWithBinary_fn)(
|
||||||
|
cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
|
||||||
|
const size_t* /* lengths */, const unsigned char** /* binaries */, cl_int* /* binary_status */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainProgram_fn)(cl_program /* program */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseProgram_fn)(cl_program /* program */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clBuildProgram_fn)(
|
||||||
|
cl_program /* program */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
|
||||||
|
const char* /* options */,
|
||||||
|
void(CL_CALLBACK* /* pfn_notify */)(cl_program /* program */, void* /* user_data */),
|
||||||
|
void* /* user_data */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clUnloadCompiler_fn)(void) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetProgramInfo_fn)(
|
||||||
|
cl_program /* program */, cl_program_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetProgramBuildInfo_fn)(
|
||||||
|
cl_program /* program */, cl_device_id /* device */, cl_program_build_info /* param_name */,
|
||||||
|
size_t /* param_value_size */, void* /* param_value */,
|
||||||
|
size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* Kernel Object APIs */
|
||||||
|
typedef cl_kernel(CL_API_CALL* clCreateKernel_fn)(
|
||||||
|
cl_program /* program */, const char* /* kernel_name */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clCreateKernelsInProgram_fn)(
|
||||||
|
cl_program /* program */, cl_uint /* num_kernels */, cl_kernel* /* kernels */,
|
||||||
|
cl_uint* /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainKernel_fn)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseKernel_fn)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetKernelArg_fn)(cl_kernel /* kernel */, cl_uint /* arg_index */,
|
||||||
|
size_t /* arg_size */, const void* /* arg_value */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetKernelInfo_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_kernel_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetKernelWorkGroupInfo_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_device_id /* device */, cl_kernel_work_group_info /* param_name */,
|
||||||
|
size_t /* param_value_size */, void* /* param_value */,
|
||||||
|
size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* Event Object APIs */
|
||||||
|
typedef cl_int(CL_API_CALL* clWaitForEvents_fn)(
|
||||||
|
cl_uint /* num_events */, const cl_event* /* event_list */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetEventInfo_fn)(
|
||||||
|
cl_event /* event */, cl_event_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_event(CL_API_CALL* clCreateUserEvent_fn)(
|
||||||
|
cl_context /* context */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainEvent_fn)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseEvent_fn)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetUserEventStatus_fn)(
|
||||||
|
cl_event /* event */, cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetEventCallback_fn)(
|
||||||
|
cl_event /* event */, cl_int /* command_exec_callback_type */,
|
||||||
|
void(CL_CALLBACK* /* pfn_notify */)(cl_event, cl_int, void*),
|
||||||
|
void* /* user_data */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
/* Profiling APIs */
|
||||||
|
typedef cl_int(CL_API_CALL* clGetEventProfilingInfo_fn)(
|
||||||
|
cl_event /* event */, cl_profiling_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* Flush and Finish APIs */
|
||||||
|
typedef cl_int(CL_API_CALL* clFlush_fn)(cl_command_queue /* command_queue */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clFinish_fn)(cl_command_queue /* command_queue */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* Enqueued Commands APIs */
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueReadBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
|
||||||
|
size_t /* offset */, size_t /* cb */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueReadBufferRect_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
|
||||||
|
const size_t* /* buffer_offset */, const size_t* /* host_offset */, const size_t* /* region */,
|
||||||
|
size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, size_t /* host_row_pitch */,
|
||||||
|
size_t /* host_slice_pitch */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueWriteBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_write */,
|
||||||
|
size_t /* offset */, size_t /* cb */, const void* /* ptr */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueWriteBufferRect_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
|
||||||
|
const size_t* /* buffer_offset */, const size_t* /* host_offset */, const size_t* /* region */,
|
||||||
|
size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, size_t /* host_row_pitch */,
|
||||||
|
size_t /* host_slice_pitch */, const void* /* ptr */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueCopyBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_buffer */,
|
||||||
|
size_t /* src_offset */, size_t /* dst_offset */, size_t /* cb */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueCopyBufferRect_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_buffer */,
|
||||||
|
const size_t* /* src_origin */, const size_t* /* dst_origin */, const size_t* /* region */,
|
||||||
|
size_t /* src_row_pitch */, size_t /* src_slice_pitch */, size_t /* dst_row_pitch */,
|
||||||
|
size_t /* dst_slice_pitch */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueReadImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_read */,
|
||||||
|
const size_t* /* origin[3] */, const size_t* /* region[3] */, size_t /* row_pitch */,
|
||||||
|
size_t /* slice_pitch */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueWriteImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_write */,
|
||||||
|
const size_t* /* origin[3] */, const size_t* /* region[3] */, size_t /* input_row_pitch */,
|
||||||
|
size_t /* input_slice_pitch */, const void* /* ptr */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueCopyImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* src_image */, cl_mem /* dst_image */,
|
||||||
|
const size_t* /* src_origin[3] */, const size_t* /* dst_origin[3] */,
|
||||||
|
const size_t* /* region[3] */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueCopyImageToBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* src_image */, cl_mem /* dst_buffer */,
|
||||||
|
const size_t* /* src_origin[3] */, const size_t* /* region[3] */, size_t /* dst_offset */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueCopyBufferToImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_image */,
|
||||||
|
size_t /* src_offset */, const size_t* /* dst_origin[3] */, const size_t* /* region[3] */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef void*(CL_API_CALL* clEnqueueMapBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_map */,
|
||||||
|
cl_map_flags /* map_flags */, size_t /* offset */, size_t /* cb */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */, cl_int* /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef void*(CL_API_CALL* clEnqueueMapImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_map */,
|
||||||
|
cl_map_flags /* map_flags */, const size_t* /* origin[3] */, const size_t* /* region[3] */,
|
||||||
|
size_t* /* image_row_pitch */, size_t* /* image_slice_pitch */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */, cl_int* /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueUnmapMemObject_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* memobj */, void* /* mapped_ptr */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueNDRangeKernel_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_kernel /* kernel */, cl_uint /* work_dim */,
|
||||||
|
const size_t* /* global_work_offset */, const size_t* /* global_work_size */,
|
||||||
|
const size_t* /* local_work_size */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueTask_fn)(cl_command_queue /* command_queue */,
|
||||||
|
cl_kernel /* kernel */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueNativeKernel_fn)(
|
||||||
|
cl_command_queue /* command_queue */, void(CL_CALLBACK* user_func)(void*), void* /* args */,
|
||||||
|
size_t /* cb_args */, cl_uint /* num_mem_objects */, const cl_mem* /* mem_list */,
|
||||||
|
const void** /* args_mem_loc */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueMarker_fn)(cl_command_queue /* command_queue */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueWaitForEvents_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_events */,
|
||||||
|
const cl_event* /* event_list */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueBarrier_fn)(cl_command_queue /* command_queue */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef void*(CL_API_CALL* clGetExtensionFunctionAddress_fn)(const char* /* func_name */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateFromGLBuffer_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_GLuint /* bufobj */,
|
||||||
|
int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateFromGLTexture2D_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* target */,
|
||||||
|
cl_GLint /* miplevel */, cl_GLuint /* texture */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateFromGLTexture3D_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* target */,
|
||||||
|
cl_GLint /* miplevel */, cl_GLuint /* texture */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateFromGLRenderbuffer_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_GLuint /* renderbuffer */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetGLObjectInfo_fn)(
|
||||||
|
cl_mem /* memobj */, cl_gl_object_type* /* gl_object_type */,
|
||||||
|
cl_GLuint* /* gl_object_name */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetGLTextureInfo_fn)(
|
||||||
|
cl_mem /* memobj */, cl_gl_texture_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_event(CL_API_CALL* clCreateEventFromGLsyncKHR_fn)(
|
||||||
|
cl_context /* context */, cl_GLsync /* cl_GLsync */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueAcquireGLObjects_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_objects */,
|
||||||
|
const cl_mem* /* mem_objects */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueReleaseGLObjects_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_objects */,
|
||||||
|
const cl_mem* /* mem_objects */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clCreateSubDevices_fn)(
|
||||||
|
cl_device_id /* in_device */, const cl_device_partition_property* /* properties */,
|
||||||
|
cl_uint /* num_entries */, cl_device_id* /* out_devices */,
|
||||||
|
cl_uint* /* num_devices */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clRetainDevice_fn)(cl_device_id /* device */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clReleaseDevice_fn)(cl_device_id /* device */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateImage_fn)(cl_context /* context */, cl_mem_flags /* flags */,
|
||||||
|
const cl_image_format* /* image_format*/,
|
||||||
|
const cl_image_desc* /* image_desc*/,
|
||||||
|
void* /* host_ptr */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_program(CL_API_CALL* clCreateProgramWithBuiltInKernels_fn)(
|
||||||
|
cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
|
||||||
|
const char* /* kernel_names */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clCompileProgram_fn)(
|
||||||
|
cl_program /* program */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
|
||||||
|
const char* /* options */, cl_uint /* num_input_headers */,
|
||||||
|
const cl_program* /* input_headers */, const char** /* header_include_names */,
|
||||||
|
void(CL_CALLBACK* pfn_notify)(cl_program program, void* user_data),
|
||||||
|
void* /* user_data */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_program(CL_API_CALL* clLinkProgram_fn)(
|
||||||
|
cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
|
||||||
|
const char* /* options */, cl_uint /* num_input_programs */,
|
||||||
|
const cl_program* /* input_programs */,
|
||||||
|
void(CL_CALLBACK* pfn_notify)(cl_program program, void* user_data), void* /* user_data */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clUnloadPlatformCompiler_fn)(cl_platform_id /* platform */)
|
||||||
|
CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetKernelArgInfo_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_uint /* arg_indx */, cl_kernel_arg_info /* param_name */,
|
||||||
|
size_t /* param_value_size */, void* /* param_value */,
|
||||||
|
size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueFillBuffer_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* buffer */, const void* /* pattern */,
|
||||||
|
size_t /* pattern_size */, size_t /* offset */, size_t /* size */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueFillImage_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_mem /* image */, const void* /* fill_color */,
|
||||||
|
const size_t* /* origin */, const size_t* /* region */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueMigrateMemObjects_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_mem_objects */,
|
||||||
|
const cl_mem* /* mem_objects */, cl_mem_migration_flags /* flags */,
|
||||||
|
cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueMarkerWithWaitList_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueBarrierWithWaitList_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef void*(CL_API_CALL* clGetExtensionFunctionAddressForPlatform_fn)(
|
||||||
|
cl_platform_id /* platform */, const char* /* funcname */)CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreateFromGLTexture_fn)(
|
||||||
|
cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* texture_target */,
|
||||||
|
cl_GLint /* miplevel */, cl_GLuint /* texture */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
typedef cl_command_queue(CL_API_CALL* clCreateCommandQueueWithProperties_fn)(
|
||||||
|
cl_context /* context */, cl_device_id /* device */,
|
||||||
|
const cl_queue_properties* /* properties */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_sampler(CL_API_CALL* clCreateSamplerWithProperties_fn)(
|
||||||
|
cl_context /* context */, const cl_sampler_properties* /* properties */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef void*(CL_API_CALL* clSVMAlloc_fn)(cl_context /* context */, cl_svm_mem_flags /* flags */,
|
||||||
|
size_t /* size */,
|
||||||
|
cl_uint /* alignment */)CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef void(CL_API_CALL* clSVMFree_fn)(cl_context /* context */,
|
||||||
|
void* /* svm_pointer */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetKernelArgSVMPointer_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_uint /* arg_index */,
|
||||||
|
const void* /* arg_value */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetKernelExecInfo_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_kernel_exec_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
const void* /* param_value */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueSVMFree_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */,
|
||||||
|
void* [] /* svm_pointers */,
|
||||||
|
void(CL_CALLBACK* /* pfn_free_func */)(cl_command_queue /* queue */,
|
||||||
|
cl_uint /* num_svm_pointers */,
|
||||||
|
void* [] /* svm_pointers */, void* /* user_data */),
|
||||||
|
void* /* user_data */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueSVMMemcpy_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_bool /* blocking_copy */, void* /* dst_ptr */,
|
||||||
|
const void* /* src_ptr */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueSVMMemFill_fn)(
|
||||||
|
cl_command_queue /* command_queue */, void* /* svm_ptr */, const void* /* pattern */,
|
||||||
|
size_t /* pattern_size */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueSVMMap_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_bool /* blocking_map */, cl_map_flags /* flags */,
|
||||||
|
void* /* svm_ptr */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clEnqueueSVMUnmap_fn)(cl_command_queue /* command_queue */,
|
||||||
|
void* /* svm_ptr */,
|
||||||
|
cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */,
|
||||||
|
cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_mem(CL_API_CALL* clCreatePipe_fn)(cl_context /* context */, cl_mem_flags /* flags */,
|
||||||
|
cl_uint /* pipe_packet_size */,
|
||||||
|
cl_uint /* pipe_max_packets */,
|
||||||
|
const cl_pipe_properties* /* properties */,
|
||||||
|
cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetPipeInfo_fn)(
|
||||||
|
cl_mem /* pipe */, cl_pipe_info /* param_name */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clGetKernelSubGroupInfoKHR_fn)(
|
||||||
|
cl_kernel /* kernel */, cl_device_id /* device */, cl_kernel_sub_group_info /* param_name */,
|
||||||
|
size_t /* input_value_size */, const void* /* input_value */, size_t /* param_value_size */,
|
||||||
|
void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;
|
||||||
|
|
||||||
|
|
||||||
|
typedef cl_int(CL_API_CALL* clSetDefaultDeviceCommandQueue_fn)(
|
||||||
|
cl_context /* context */, cl_device_id /* device */,
|
||||||
|
cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_2_1;
|
||||||
|
|
||||||
|
typedef cl_kernel(CL_API_CALL* clCloneKernel_fn)(
|
||||||
|
cl_kernel /* source_kernel */, cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_1;
|
||||||
|
|
||||||
|
typedef cl_int (CL_API_CALL* clEnqueueSVMMigrateMem_fn)(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */,
|
||||||
|
const void ** /* svm_pointers */, const size_t * /* sizes */,
|
||||||
|
cl_mem_migration_flags /* flags */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event * /* event_wait_list */, cl_event * /* event */) CL_API_SUFFIX__VERSION_2_1;
|
||||||
|
|
||||||
|
typedef cl_int (CL_API_CALL* clGetDeviceAndHostTimer_fn)(
|
||||||
|
cl_device_id /* device */, cl_ulong * /* device_timestamp */,
|
||||||
|
cl_ulong * /* host_timestamp */) CL_API_SUFFIX__VERSION_2_1;
|
||||||
|
|
||||||
|
typedef cl_int (CL_API_CALL* clGetHostTimer_fn)(
|
||||||
|
cl_device_id /* device */, cl_ulong * /* host_timestamp */) CL_API_SUFFIX__VERSION_2_1;
|
||||||
|
|
||||||
|
typedef cl_int (CL_API_CALL* clSetProgramSpecializationConstant_fn)(
|
||||||
|
cl_program /* program */, cl_uint /* spec_id */, size_t /* spec_size */,
|
||||||
|
const void* /* spec_value */) CL_API_SUFFIX__VERSION_2_2;
|
||||||
|
|
||||||
|
typedef cl_int (CL_API_CALL* clSetProgramReleaseCallback_fn)(
|
||||||
|
cl_program /* program */,
|
||||||
|
void (CL_CALLBACK * /* pfn_notify */)(cl_program program, void * user_data),
|
||||||
|
void * /* user_data */) CL_API_SUFFIX__VERSION_2_2;
|
||||||
|
|
||||||
|
typedef struct _cl_icd_dispatch_table {
|
||||||
|
/* OpenCL 1.0 */
|
||||||
|
clGetPlatformIDs_fn GetPlatformIDs;
|
||||||
|
clGetPlatformInfo_fn GetPlatformInfo;
|
||||||
|
clGetDeviceIDs_fn GetDeviceIDs;
|
||||||
|
clGetDeviceInfo_fn GetDeviceInfo;
|
||||||
|
clCreateContext_fn CreateContext;
|
||||||
|
clCreateContextFromType_fn CreateContextFromType;
|
||||||
|
clRetainContext_fn RetainContext;
|
||||||
|
clReleaseContext_fn ReleaseContext;
|
||||||
|
clGetContextInfo_fn GetContextInfo;
|
||||||
|
clCreateCommandQueue_fn CreateCommandQueue;
|
||||||
|
clRetainCommandQueue_fn RetainCommandQueue;
|
||||||
|
clReleaseCommandQueue_fn ReleaseCommandQueue;
|
||||||
|
clGetCommandQueueInfo_fn GetCommandQueueInfo;
|
||||||
|
clSetCommandQueueProperty_fn SetCommandQueueProperty;
|
||||||
|
clCreateBuffer_fn CreateBuffer;
|
||||||
|
clCreateImage2D_fn CreateImage2D;
|
||||||
|
clCreateImage3D_fn CreateImage3D;
|
||||||
|
clRetainMemObject_fn RetainMemObject;
|
||||||
|
clReleaseMemObject_fn ReleaseMemObject;
|
||||||
|
clGetSupportedImageFormats_fn GetSupportedImageFormats;
|
||||||
|
clGetMemObjectInfo_fn GetMemObjectInfo;
|
||||||
|
clGetImageInfo_fn GetImageInfo;
|
||||||
|
clCreateSampler_fn CreateSampler;
|
||||||
|
clRetainSampler_fn RetainSampler;
|
||||||
|
clReleaseSampler_fn ReleaseSampler;
|
||||||
|
clGetSamplerInfo_fn GetSamplerInfo;
|
||||||
|
clCreateProgramWithSource_fn CreateProgramWithSource;
|
||||||
|
clCreateProgramWithBinary_fn CreateProgramWithBinary;
|
||||||
|
clRetainProgram_fn RetainProgram;
|
||||||
|
clReleaseProgram_fn ReleaseProgram;
|
||||||
|
clBuildProgram_fn BuildProgram;
|
||||||
|
clUnloadCompiler_fn UnloadCompiler;
|
||||||
|
clGetProgramInfo_fn GetProgramInfo;
|
||||||
|
clGetProgramBuildInfo_fn GetProgramBuildInfo;
|
||||||
|
clCreateKernel_fn CreateKernel;
|
||||||
|
clCreateKernelsInProgram_fn CreateKernelsInProgram;
|
||||||
|
clRetainKernel_fn RetainKernel;
|
||||||
|
clReleaseKernel_fn ReleaseKernel;
|
||||||
|
clSetKernelArg_fn SetKernelArg;
|
||||||
|
clGetKernelInfo_fn GetKernelInfo;
|
||||||
|
clGetKernelWorkGroupInfo_fn GetKernelWorkGroupInfo;
|
||||||
|
clWaitForEvents_fn WaitForEvents;
|
||||||
|
clGetEventInfo_fn GetEventInfo;
|
||||||
|
clRetainEvent_fn RetainEvent;
|
||||||
|
clReleaseEvent_fn ReleaseEvent;
|
||||||
|
clGetEventProfilingInfo_fn GetEventProfilingInfo;
|
||||||
|
clFlush_fn Flush;
|
||||||
|
clFinish_fn Finish;
|
||||||
|
clEnqueueReadBuffer_fn EnqueueReadBuffer;
|
||||||
|
clEnqueueWriteBuffer_fn EnqueueWriteBuffer;
|
||||||
|
clEnqueueCopyBuffer_fn EnqueueCopyBuffer;
|
||||||
|
clEnqueueReadImage_fn EnqueueReadImage;
|
||||||
|
clEnqueueWriteImage_fn EnqueueWriteImage;
|
||||||
|
clEnqueueCopyImage_fn EnqueueCopyImage;
|
||||||
|
clEnqueueCopyImageToBuffer_fn EnqueueCopyImageToBuffer;
|
||||||
|
clEnqueueCopyBufferToImage_fn EnqueueCopyBufferToImage;
|
||||||
|
clEnqueueMapBuffer_fn EnqueueMapBuffer;
|
||||||
|
clEnqueueMapImage_fn EnqueueMapImage;
|
||||||
|
clEnqueueUnmapMemObject_fn EnqueueUnmapMemObject;
|
||||||
|
clEnqueueNDRangeKernel_fn EnqueueNDRangeKernel;
|
||||||
|
clEnqueueTask_fn EnqueueTask;
|
||||||
|
clEnqueueNativeKernel_fn EnqueueNativeKernel;
|
||||||
|
clEnqueueMarker_fn EnqueueMarker;
|
||||||
|
clEnqueueWaitForEvents_fn EnqueueWaitForEvents;
|
||||||
|
clEnqueueBarrier_fn EnqueueBarrier;
|
||||||
|
clGetExtensionFunctionAddress_fn GetExtensionFunctionAddress;
|
||||||
|
clCreateFromGLBuffer_fn CreateFromGLBuffer;
|
||||||
|
clCreateFromGLTexture2D_fn CreateFromGLTexture2D;
|
||||||
|
clCreateFromGLTexture3D_fn CreateFromGLTexture3D;
|
||||||
|
clCreateFromGLRenderbuffer_fn CreateFromGLRenderbuffer;
|
||||||
|
clGetGLObjectInfo_fn GetGLObjectInfo;
|
||||||
|
clGetGLTextureInfo_fn GetGLTextureInfo;
|
||||||
|
clEnqueueAcquireGLObjects_fn EnqueueAcquireGLObjects;
|
||||||
|
clEnqueueReleaseGLObjects_fn EnqueueReleaseGLObjects;
|
||||||
|
clGetGLContextInfoKHR_fn GetGLContextInfoKHR;
|
||||||
|
void* _reservedForD3D10KHR[6];
|
||||||
|
|
||||||
|
/* OpenCL 1.1 */
|
||||||
|
clSetEventCallback_fn SetEventCallback;
|
||||||
|
clCreateSubBuffer_fn CreateSubBuffer;
|
||||||
|
clSetMemObjectDestructorCallback_fn SetMemObjectDestructorCallback;
|
||||||
|
clCreateUserEvent_fn CreateUserEvent;
|
||||||
|
clSetUserEventStatus_fn SetUserEventStatus;
|
||||||
|
clEnqueueReadBufferRect_fn EnqueueReadBufferRect;
|
||||||
|
clEnqueueWriteBufferRect_fn EnqueueWriteBufferRect;
|
||||||
|
clEnqueueCopyBufferRect_fn EnqueueCopyBufferRect;
|
||||||
|
|
||||||
|
void* _reservedForDeviceFissionEXT[3];
|
||||||
|
clCreateEventFromGLsyncKHR_fn CreateEventFromGLsyncKHR;
|
||||||
|
|
||||||
|
/* OpenCL 1.2 */
|
||||||
|
clCreateSubDevices_fn CreateSubDevices;
|
||||||
|
clRetainDevice_fn RetainDevice;
|
||||||
|
clReleaseDevice_fn ReleaseDevice;
|
||||||
|
clCreateImage_fn CreateImage;
|
||||||
|
clCreateProgramWithBuiltInKernels_fn CreateProgramWithBuiltInKernels;
|
||||||
|
clCompileProgram_fn CompileProgram;
|
||||||
|
clLinkProgram_fn LinkProgram;
|
||||||
|
clUnloadPlatformCompiler_fn UnloadPlatformCompiler;
|
||||||
|
clGetKernelArgInfo_fn GetKernelArgInfo;
|
||||||
|
clEnqueueFillBuffer_fn EnqueueFillBuffer;
|
||||||
|
clEnqueueFillImage_fn EnqueueFillImage;
|
||||||
|
clEnqueueMigrateMemObjects_fn EnqueueMigrateMemObjects;
|
||||||
|
clEnqueueMarkerWithWaitList_fn EnqueueMarkerWithWaitList;
|
||||||
|
clEnqueueBarrierWithWaitList_fn EnqueueBarrierWithWaitList;
|
||||||
|
clGetExtensionFunctionAddressForPlatform_fn GetExtensionFunctionAddressForPlatform;
|
||||||
|
clCreateFromGLTexture_fn CreateFromGLTexture;
|
||||||
|
|
||||||
|
/* cl_khr_d3d11_sharing, cl_khr_dx9_media_sharing */
|
||||||
|
void* _reservedForD3DExtensions[10];
|
||||||
|
|
||||||
|
/* cl_khr_egl_image, cl_khr_egl_event */
|
||||||
|
void* _reservedForEGLExtensions[4];
|
||||||
|
|
||||||
|
/* OpenCL 2.0 */
|
||||||
|
clCreateCommandQueueWithProperties_fn CreateCommandQueueWithProperties;
|
||||||
|
clCreatePipe_fn CreatePipe;
|
||||||
|
clGetPipeInfo_fn GetPipeInfo;
|
||||||
|
clSVMAlloc_fn SVMAlloc;
|
||||||
|
clSVMFree_fn SVMFree;
|
||||||
|
clEnqueueSVMFree_fn EnqueueSVMFree;
|
||||||
|
clEnqueueSVMMemcpy_fn EnqueueSVMMemcpy;
|
||||||
|
clEnqueueSVMMemFill_fn EnqueueSVMMemFill;
|
||||||
|
clEnqueueSVMMap_fn EnqueueSVMMap;
|
||||||
|
clEnqueueSVMUnmap_fn EnqueueSVMUnmap;
|
||||||
|
clCreateSamplerWithProperties_fn CreateSamplerWithProperties;
|
||||||
|
clSetKernelArgSVMPointer_fn SetKernelArgSVMPointer;
|
||||||
|
clSetKernelExecInfo_fn SetKernelExecInfo;
|
||||||
|
/* cl_khr_sub_groups */
|
||||||
|
clGetKernelSubGroupInfoKHR_fn GetKernelSubGroupInfoKHR;
|
||||||
|
|
||||||
|
/* OpenCL 2.1 */
|
||||||
|
clCloneKernel_fn CloneKernel;
|
||||||
|
clCreateProgramWithILKHR_fn CreateProgramWithILKHR;
|
||||||
|
clEnqueueSVMMigrateMem_fn EnqueueSVMMigrateMem;
|
||||||
|
clGetDeviceAndHostTimer_fn GetDeviceAndHostTimer;
|
||||||
|
clGetHostTimer_fn GetHostTimer;
|
||||||
|
clGetKernelSubGroupInfoKHR_fn GetKernelSubGroupInfo;
|
||||||
|
clSetDefaultDeviceCommandQueue_fn SetDefaultDeviceCommandQueue;
|
||||||
|
|
||||||
|
/* OpenCL 2.2 */
|
||||||
|
clSetProgramReleaseCallback_fn SetProgramReleaseCallback;
|
||||||
|
clSetProgramSpecializationConstant_fn SetProgramSpecializationConstant;
|
||||||
|
|
||||||
|
} cl_icd_dispatch_table;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __OPENCL_CL_ICD_H */
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CL_KERNEL_H_
|
||||||
|
#define CL_KERNEL_H_
|
||||||
|
|
||||||
|
struct clk_builtins_t;
|
||||||
|
|
||||||
|
// This must be a multiple of sizeof(cl_ulong16)
|
||||||
|
#define __CPU_SCRATCH_SIZE 128
|
||||||
|
|
||||||
|
#define CLK_PRIVATE_MEMORY_SIZE (16 * 1024)
|
||||||
|
|
||||||
|
struct clk_thread_info_block_t {
|
||||||
|
// Warning! The size of this struct needs to be a multiple
|
||||||
|
// of 16 when compiling 64 bit
|
||||||
|
|
||||||
|
struct clk_builtins_t const* builtins;
|
||||||
|
void* local_mem_base;
|
||||||
|
void* local_scratch;
|
||||||
|
const void* table_base;
|
||||||
|
size_t pad;
|
||||||
|
|
||||||
|
uint work_dim;
|
||||||
|
size_t global_offset[4]; /*dim0,dim1,dim2,invalid(dim<0||dim>2)*/
|
||||||
|
size_t global_size[4]; /*dim0,dim1,dim2,invalid(dim<0||dim>2)*/
|
||||||
|
|
||||||
|
size_t enqueued_local_size[4];
|
||||||
|
size_t local_size[4]; /*dim0,dim1,dim2,invalid(dim<0||dim>2)*/
|
||||||
|
size_t local_id[4]; /*dim0,dim1,dim2,invalid(dim<0||dim>2)*/
|
||||||
|
size_t group_id[4]; /*dim0,dim1,dim2,invalid(dim<0||dim>2)*/
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum clk_value_type_t {
|
||||||
|
T_VOID,
|
||||||
|
T_CHAR,
|
||||||
|
T_SHORT,
|
||||||
|
T_INT,
|
||||||
|
T_LONG,
|
||||||
|
T_FLOAT,
|
||||||
|
T_DOUBLE,
|
||||||
|
T_POINTER,
|
||||||
|
T_CHAR2,
|
||||||
|
T_CHAR3,
|
||||||
|
T_CHAR4,
|
||||||
|
T_CHAR8,
|
||||||
|
T_CHAR16,
|
||||||
|
T_SHORT2,
|
||||||
|
T_SHORT3,
|
||||||
|
T_SHORT4,
|
||||||
|
T_SHORT8,
|
||||||
|
T_SHORT16,
|
||||||
|
T_INT2,
|
||||||
|
T_INT3,
|
||||||
|
T_INT4,
|
||||||
|
T_INT8,
|
||||||
|
T_INT16,
|
||||||
|
T_LONG2,
|
||||||
|
T_LONG3,
|
||||||
|
T_LONG4,
|
||||||
|
T_LONG8,
|
||||||
|
T_LONG16,
|
||||||
|
T_FLOAT2,
|
||||||
|
T_FLOAT3,
|
||||||
|
T_FLOAT4,
|
||||||
|
T_FLOAT8,
|
||||||
|
T_FLOAT16,
|
||||||
|
T_DOUBLE2,
|
||||||
|
T_DOUBLE3,
|
||||||
|
T_DOUBLE4,
|
||||||
|
T_DOUBLE8,
|
||||||
|
T_DOUBLE16,
|
||||||
|
T_SAMPLER,
|
||||||
|
T_SEMA,
|
||||||
|
T_STRUCT,
|
||||||
|
T_QUEUE,
|
||||||
|
T_PAD
|
||||||
|
} clk_value_type_t;
|
||||||
|
|
||||||
|
typedef enum clk_address_space_t {
|
||||||
|
A_PRIVATE,
|
||||||
|
A_LOCAL,
|
||||||
|
A_CONSTANT,
|
||||||
|
A_GLOBAL,
|
||||||
|
A_REGION
|
||||||
|
} clk_address_space_t;
|
||||||
|
|
||||||
|
// kernel arg access qualifier and type qualifier
|
||||||
|
typedef enum clk_arg_qualifier_t {
|
||||||
|
Q_NONE = 0,
|
||||||
|
|
||||||
|
// for image type only, access qualifier
|
||||||
|
Q_READ = 1,
|
||||||
|
Q_WRITE = 2,
|
||||||
|
|
||||||
|
// for pointer type only
|
||||||
|
Q_CONST = 4, // pointee
|
||||||
|
Q_RESTRICT = 8,
|
||||||
|
Q_VOLATILE = 16, // pointee
|
||||||
|
Q_PIPE = 32 // pipe
|
||||||
|
|
||||||
|
} clk_arg_qualifier_t;
|
||||||
|
|
||||||
|
#pragma pack(push, 4)
|
||||||
|
struct clk_parameter_descriptor_t {
|
||||||
|
clk_value_type_t type;
|
||||||
|
clk_address_space_t space;
|
||||||
|
uint qualifier;
|
||||||
|
const char* name;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
//#define CLK_LOCAL_MEM_FENCE (1 << 0)
|
||||||
|
//#define CLK_GLOBAL_MEM_FENCE (1 << 1)
|
||||||
|
|
||||||
|
struct clk_builtins_t {
|
||||||
|
/* Synchronization functions */
|
||||||
|
void (*barrier_ptr)(cl_mem_fence_flags flags);
|
||||||
|
|
||||||
|
/* AMD Only builtins: FIXME_lmoriche (extension) */
|
||||||
|
void* reserved;
|
||||||
|
int (*printf_ptr)(const char* format, ...);
|
||||||
|
};
|
||||||
|
|
||||||
|
enum clk_natures_t { KN_HAS_BARRIER = 1 << 0, KN_WG_LEVEL = 1 << 1 };
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable : 4200)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__OPENCL_VERSION__) || __OPENCL_VERSION__ >= 200
|
||||||
|
|
||||||
|
typedef struct clk_pipe_t {
|
||||||
|
size_t read_idx;
|
||||||
|
size_t write_idx;
|
||||||
|
size_t end_idx;
|
||||||
|
char padding[128 - 3 * sizeof(size_t)];
|
||||||
|
char packets[];
|
||||||
|
} clk_pipe_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*CL_KERNEL_H_*/
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2009 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef __CL_PROFILE_AMD_H
|
||||||
|
#define __CL_PROFILE_AMD_H
|
||||||
|
|
||||||
|
#include "CL/cl_platform.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
typedef struct _cl_perfcounter_amd* cl_perfcounter_amd;
|
||||||
|
typedef cl_ulong cl_perfcounter_property;
|
||||||
|
typedef cl_uint cl_perfcounter_info;
|
||||||
|
|
||||||
|
/* cl_perfcounter_info */
|
||||||
|
enum PerfcounterInfo {
|
||||||
|
CL_PERFCOUNTER_NONE = 0x0,
|
||||||
|
CL_PERFCOUNTER_REFERENCE_COUNT = 0x1,
|
||||||
|
CL_PERFCOUNTER_DATA = 0x2,
|
||||||
|
CL_PERFCOUNTER_GPU_BLOCK_INDEX = 0x3,
|
||||||
|
CL_PERFCOUNTER_GPU_COUNTER_INDEX = 0x4,
|
||||||
|
CL_PERFCOUNTER_GPU_EVENT_INDEX = 0x5,
|
||||||
|
CL_PERFCOUNTER_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
* Set device clock mode data
|
||||||
|
*********************************/
|
||||||
|
enum cl_DeviceClockMode_AMD {
|
||||||
|
CL_DEVICE_CLOCK_MODE_DEFAULT_AMD = 0x0, /*Device clocks and other power settings are restored to default*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_QUERY_AMD = 0x1, /*Queries the current device clock ratios. Leaves the clock mode of the device unchanged*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_PROFILING_AMD = 0x2, /*Scale down from peak ratio*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_MINIMUMMEMORY_AMD = 0x3, /* Memory clock is set to the lowest available level*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_MINIMUMENGINE_AMD = 0x4, /*Engine clock is set to the lowest available level*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_PEAK_AMD = 0x5, /*Clocks set to maximum when possible. Fan set to maximum.*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_QUERYPROFILING_AMD = 0x6, /*Queries the profiling device clock ratios. Leaves the clock mode of the device unchanged*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_QUERYPEAK_AMD = 0x7, /*Queries the peak device clock ratios.Leaves the clock mode of the device unchanged*/
|
||||||
|
CL_DEVICE_CLOCK_MODE_COUNT_AMD = 0x8, /*Maxmium count of device clock mode*/
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _cl_set_device_clock_mode_input_amd
|
||||||
|
{
|
||||||
|
/* specify the clock mode for AMD GPU device*/
|
||||||
|
cl_DeviceClockMode_AMD clock_mode;
|
||||||
|
} cl_set_device_clock_mode_input_amd;
|
||||||
|
|
||||||
|
typedef struct _cl_set_device_clock_mode_output_amd
|
||||||
|
{
|
||||||
|
/*Ratio of current mem clock to peak clock as obtained from DeviceProperties::maxGpuClock*/
|
||||||
|
cl_float memory_clock_ratio_to_peak;
|
||||||
|
/*Ratio of current gpu core clock to peak clock as obtained from DeviceProperties::maxGpuClock*/
|
||||||
|
cl_float engine_clock_ratio_to_peak;
|
||||||
|
} cl_set_device_clock_mode_output_amd;
|
||||||
|
|
||||||
|
/*! \brief Creates a new HW performance counter
|
||||||
|
* for the specified OpenCL context.
|
||||||
|
*
|
||||||
|
* \param device must be a valid OpenCL device.
|
||||||
|
*
|
||||||
|
* \param properties the list of properties of the hardware counter
|
||||||
|
*
|
||||||
|
* \param errcode_ret A non zero value if OpenCL failed to create PerfCounter
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_INVALID_CONTEXT if the specified context is invalid.
|
||||||
|
* - CL_OUT_OF_RESOURCES if we couldn't create the object
|
||||||
|
*
|
||||||
|
* \return the created perfcounter object
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_perfcounter_amd CL_API_CALL clCreatePerfCounterAMD(
|
||||||
|
cl_device_id /* device */, cl_perfcounter_property* /* properties */, cl_int* /* errcode_ret */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Destroy a performance counter object.
|
||||||
|
*
|
||||||
|
* \param perf_counter the perfcounter object for release
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to release PerfCounter
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_INVALID_OPERATION if we failed to release the object
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clReleasePerfCounterAMD(cl_perfcounter_amd /* perf_counter */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Increments the perfcounter object reference count.
|
||||||
|
*
|
||||||
|
* \param perf_counter the perfcounter object for retain
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to retain PerfCounter
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_INVALID_OPERATION if we failed to release the object
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clRetainPerfCounterAMD(cl_perfcounter_amd /* perf_counter */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Enqueues the begin command for the specified counters.
|
||||||
|
*
|
||||||
|
* \param command_queue must be a valid OpenCL command queue.
|
||||||
|
*
|
||||||
|
* \param num_perf_counters the number of perfcounter objects in the array.
|
||||||
|
*
|
||||||
|
* \param perf_counters specifies an array of perfcounter objects.
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to release PerfCounter
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_INVALID_OPERATION if we failed to enqueue the begin operation
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueBeginPerfCounterAMD(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_perf_counters */,
|
||||||
|
cl_perfcounter_amd* /* perf_counters */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Enqueues the end command for the specified counters.
|
||||||
|
*
|
||||||
|
* \param command_queue must be a valid OpenCL command queue.
|
||||||
|
*
|
||||||
|
* \param num_perf_counters the number of perfcounter objects in the array.
|
||||||
|
*
|
||||||
|
* \param perf_counters specifies an array of perfcounter objects.
|
||||||
|
*
|
||||||
|
* \param event the event object associated with the end operation.
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to release PerfCounter
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_INVALID_OPERATION if we failed to enqueue the end operation
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueEndPerfCounterAMD(
|
||||||
|
cl_command_queue /* command_queue */, cl_uint /* num_perf_counters */,
|
||||||
|
cl_perfcounter_amd* /* perf_counters */, cl_uint /* num_events_in_wait_list */,
|
||||||
|
const cl_event* /* event_wait_list */, cl_event* /* event */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Retrieves the results from the counter objects.
|
||||||
|
*
|
||||||
|
* \param perf_counter specifies a perfcounter objects for query.
|
||||||
|
*
|
||||||
|
* \param param_name specifies the information to query.
|
||||||
|
*
|
||||||
|
* \param param_value is a pointer to memory where the appropriate result
|
||||||
|
* being queried is returned. If \a param_value is NULL, it is ignored.
|
||||||
|
*
|
||||||
|
* \param param_value_size is used to specify the size in bytes of memory
|
||||||
|
* pointed to by \a param_value. This size must be >= size of return type.
|
||||||
|
*
|
||||||
|
* \param param_value_size_ret returns the actual size in bytes of data copied
|
||||||
|
* to \a param_value. If \a param_value_size_ret is NULL, it is ignored.
|
||||||
|
*
|
||||||
|
* \param values must be a valid pointer to an array of 64-bit values
|
||||||
|
* and the array size must be equal to num_perf_counters.
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
* - CL_SUCCESS if the function is executed successfully.
|
||||||
|
* - CL_PROFILING_INFO_NOT_AVAILABLE if event isn't finished.
|
||||||
|
* - CL_INVALID_OPERATION if we failed to get the data
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clGetPerfCounterInfoAMD(
|
||||||
|
cl_perfcounter_amd /* perf_counter */, cl_perfcounter_info /* param_name */,
|
||||||
|
size_t /* param_value_size */, void* /* param_value */, size_t* /* param_value_size_ret */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clSetDeviceClockModeAMD(
|
||||||
|
cl_device_id /* device*/, cl_set_device_clock_mode_input_amd /* Clock_Mode_Input */,
|
||||||
|
cl_set_device_clock_mode_output_amd* /* Clock_Mode_Output */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /*extern "C"*/
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
#endif /*__CL_PROFILE_AMD_H*/
|
||||||
@@ -0,0 +1,347 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2012 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef __CL_THREAD_TRACE_AMD_H
|
||||||
|
#define __CL_THREAD_TRACE_AMD_H
|
||||||
|
|
||||||
|
#include "CL/cl_platform.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
typedef struct _cl_threadtrace_amd* cl_threadtrace_amd;
|
||||||
|
typedef cl_uint cl_thread_trace_param;
|
||||||
|
typedef cl_uint cl_threadtrace_info;
|
||||||
|
|
||||||
|
/* cl_command_type */
|
||||||
|
#define CL_COMMAND_THREAD_TRACE_MEM 0x4500
|
||||||
|
#define CL_COMMAND_THREAD_TRACE 0x4501
|
||||||
|
|
||||||
|
/* cl_threadtrace_command_name_amd enumeration */
|
||||||
|
typedef enum _cl_threadtrace_command_name_amd {
|
||||||
|
CL_THREAD_TRACE_BEGIN_COMMAND,
|
||||||
|
CL_THREAD_TRACE_END_COMMAND,
|
||||||
|
CL_THREAD_TRACE_PAUSE_COMMAND,
|
||||||
|
CL_THREAD_TRACE_RESUME_COMMAND
|
||||||
|
} cl_threadtrace_command_name_amd;
|
||||||
|
|
||||||
|
// Thread trace parameters
|
||||||
|
enum ThreadTraceParameter {
|
||||||
|
CL_THREAD_TRACE_PARAM_TOKEN_MASK,
|
||||||
|
CL_THREAD_TRACE_PARAM_REG_MASK,
|
||||||
|
CL_THREAD_TRACE_PARAM_COMPUTE_UNIT_TARGET,
|
||||||
|
CL_THREAD_TRACE_PARAM_SHADER_ARRAY_TARGET,
|
||||||
|
CL_THREAD_TRACE_PARAM_SIMD_MASK,
|
||||||
|
CL_THREAD_TRACE_PARAM_VM_ID_MASK,
|
||||||
|
CL_THREAD_TRACE_PARAM_RANDOM_SEED,
|
||||||
|
CL_THREAD_TRACE_PARAM_CAPTURE_MODE,
|
||||||
|
CL_THREAD_TRACE_PARAM_INSTRUCTION_MASK,
|
||||||
|
CL_THREAD_TRACE_PARAM_USER_DATA,
|
||||||
|
CL_THREAD_TRACE_PARAM_IS_WRAPPED
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_THREAD_TRACE_PARAM_TOKEN_MASK data selects for SI
|
||||||
|
enum CL_THREAD_TRACE_TOKEN_MASK {
|
||||||
|
// Time passed
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_TIME_SI = 0x00000001,
|
||||||
|
// Resync the timestamp
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_TIMESTAMP_SI = 0x00000002,
|
||||||
|
// A register write has occurred
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_REG_SI = 0x00000004,
|
||||||
|
// A wavefront has started
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_WAVE_START_SI = 0x00000008,
|
||||||
|
// Output space has been allocated for color/Z [Should be used for cl-gl]
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_WAVE_PS_ALLOC_SI = 0x00000010,
|
||||||
|
// Output space has been allocated for vertex position [Should be used for cl-gl]
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_WAVE_VS_ALLOC_SI = 0x00000020,
|
||||||
|
// Wavefront completion
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_WAVE_END_SI = 0x00000040,
|
||||||
|
// An event has reached the top of a shader stage. In-order with WAVE_START
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_EVENT_SI = 0x00000080,
|
||||||
|
// An event has reached the top of a compute shader stage. In-order with WAVE_START
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_EVENT_CS_SI = 0x00000100,
|
||||||
|
// An event has reached the top of a shader stage for the second GFX pipe. In-order with
|
||||||
|
// WAVE_START.
|
||||||
|
//[Should be used for cl-gl]
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_EVENT_GFX_SI = 0x00000200,
|
||||||
|
// The kernel has executed an instruction
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_INST_SI = 0x00000400,
|
||||||
|
// The kernel has explicitly written the PC value
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_INST_PC_SI = 0x00000800,
|
||||||
|
// The kernel has written user data into the thread trace buffer
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_INST_USERDATA_SI = 0x00001000,
|
||||||
|
// Provides information about instruction scheduling
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_ISSUE_SI = 0x00002000,
|
||||||
|
// The performance counter delta has been updated
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_PERF_SI = 0x00004000,
|
||||||
|
// A miscellaneous event has been sent
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_MISC_SI = 0x00008000,
|
||||||
|
// All possible tokens
|
||||||
|
CL_THREAD_TRACE_TOKEN_MASK_ALL_SI = 0x0000ffff,
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_THREAD_TRACE_PARAM_REG_MASK data selects
|
||||||
|
enum CL_THREAD_TRACE_REG_MASK {
|
||||||
|
// Event initiator
|
||||||
|
CL_THREAD_TRACE_REG_MASK_EVENT_SI = 0x00000001,
|
||||||
|
// Draw initiator [Should be used for cl-gl]
|
||||||
|
CL_THREAD_TRACE_REG_MASK_DRAW_SI = 0x00000002,
|
||||||
|
// Dispatch initiator
|
||||||
|
CL_THREAD_TRACE_REG_MASK_DISPATCH_SI = 0x00000004,
|
||||||
|
// User data from host
|
||||||
|
CL_THREAD_TRACE_REG_MASK_USERDATA_SI = 0x00000008,
|
||||||
|
// GFXDEC register (8-state) [Should be used for cl-gl]
|
||||||
|
CL_THREAD_TRACE_REG_MASK_GFXDEC_SI = 0x00000020,
|
||||||
|
// SHDEC register (many state)
|
||||||
|
CL_THREAD_TRACE_REG_MASK_SHDEC_SI = 0x00000040,
|
||||||
|
// Other registers
|
||||||
|
CL_THREAD_TRACE_REG_MASK_OTHER_SI = 0x00000080,
|
||||||
|
// All possible registers types
|
||||||
|
CL_THREAD_TRACE_REG_MASK_ALL_SI = 0x000000ff,
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_THREAD_TRACE_PARAM_VM_ID_MASK data selects
|
||||||
|
enum CL_THREAD_TRACE_VM_ID_MASK {
|
||||||
|
// Capture only data from the VM_ID used to write {SQTT}_BASE
|
||||||
|
CL_THREAD_TRACE_VM_ID_MASK_SINGLE = 0,
|
||||||
|
// Capture all data from all VM_IDs
|
||||||
|
CL_THREAD_TRACE_VM_ID_MASK_ALL = 1,
|
||||||
|
// Capture all data but only get target (a.k.a. detail) data from VM_ID used to write {SQTT}_BASE
|
||||||
|
CL_THREAD_TRACE_VM_ID_MASK_SINGLE_DETAIL = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_THREAD_TRACE_PARAM_CAPTURE_MODE data
|
||||||
|
enum CL_THREAD_TRACE_CAPTURE_MODE {
|
||||||
|
// Capture all data in the thread trace buffer
|
||||||
|
CL_THREAD_TRACE_CAPTURE_ALL = 0,
|
||||||
|
// Capture only data between THREAD_TRACE_START and THREAD_TRACE_STOP events
|
||||||
|
CL_THREAD_TRACE_CAPTURE_SELECT = 1,
|
||||||
|
// Capture data between THREAD_TRACE_START and THREAD_TRACE_/STOP events,
|
||||||
|
// and global/reference data at all times
|
||||||
|
CL_THREAD_TRACE_CAPTURE_SELECT_DETAIL = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_THREAD_TRACE_PARAM_INSTRUCTION_MASK data selects
|
||||||
|
enum CL_THREAD_TRACE_INSTRUCTION_MASK {
|
||||||
|
// Generate {SQTT}_TOKEN_INST tokens for all instructions
|
||||||
|
CL_THREAD_TRACE_INST_MASK_ALL,
|
||||||
|
// Generate {SQTT}_TOKEN_INST tokens for stalled instructions only
|
||||||
|
CL_THREAD_TRACE_INST_MASK_STALLED,
|
||||||
|
// Generate {SQTT}_TOKEN_INST messages for stalled and other (no op/wait/set prio/etc)
|
||||||
|
// instructions
|
||||||
|
CL_THREAD_TRACE_INST_MASK_STALLED_AND_IMMEDIATE,
|
||||||
|
// Generate {SQTT}_TOKEN_INST messages for immediate instructions only only [ Should be used only
|
||||||
|
// for CI]
|
||||||
|
CL_THREAD_TRACE_INST_MASK_IMMEDIATE_CI,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ThreadTraceInfo {
|
||||||
|
CL_THREAD_TRACE_SE,
|
||||||
|
CL_THREAD_TRACE_BUFFERS_FILLED,
|
||||||
|
CL_THREAD_TRACE_BUFFERS_SIZE
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Creates a new cl_threadtrace_amd object
|
||||||
|
*
|
||||||
|
* \param device must be a valid OpenCL device.
|
||||||
|
*
|
||||||
|
* \param errcode_ret A non zero value if OpenCL failed to create threadTrace
|
||||||
|
* -CL_INVALID_DEVICE if devices contains an invalid device.
|
||||||
|
* -CL_DEVICE_NOT_AVAILABLE if a device is currently not available even
|
||||||
|
* though the device was returned by clGetDeviceIDs.
|
||||||
|
* -CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the
|
||||||
|
* OpenCL implementation on the device.
|
||||||
|
* -CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
OpenCL implementation on the host.
|
||||||
|
*
|
||||||
|
* \return the created threadTrace object
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_threadtrace_amd CL_API_CALL clCreateThreadTraceAMD(
|
||||||
|
cl_device_id /* device */, cl_int* /* errcode_ret */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Destroys a cl_threadtrace_amd object.
|
||||||
|
*
|
||||||
|
* \param threadTrace the cl_threadtrace_amd object for release
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to release threadTrace
|
||||||
|
* -CL_INVALID_VALUE if the thread_trace is not a valid OpenCL thread trace object
|
||||||
|
(cl_threadtrace_amd) .
|
||||||
|
* -CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the
|
||||||
|
* OpenCL implementation on the device.
|
||||||
|
* -CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
OpenCL implementation on the host.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clReleaseThreadTraceAMD(cl_threadtrace_amd /* threadTrace */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Increments the cl_threadtrace_amd object reference count.
|
||||||
|
*
|
||||||
|
* \param threadTrace the cl_threadtrace_amd object for retain
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to retain threadTrace
|
||||||
|
* -CL_INVALID_VALUE if the thread_trace is not a valid thread trace object (cl_threadtrace_amd) .
|
||||||
|
* -CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the
|
||||||
|
OpenCL implementation on the device.
|
||||||
|
* -CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
OpenCL implementation on the host.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clRetainThreadTraceAMD(cl_threadtrace_amd /* threadTrace */
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Sets the cl_threadtrace_amd object configuration parameter.
|
||||||
|
*
|
||||||
|
* \param thread_trace the cl_threadtrace_amd object to set configuration parameter
|
||||||
|
*
|
||||||
|
* \param config_param the cl_thread_trace_param
|
||||||
|
*
|
||||||
|
* \param param_value corresponding to configParam
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to set threadTrace buffer parameter
|
||||||
|
* - CL_INVALID_VALUE if the thread_trace is invalid thread trace object.
|
||||||
|
* - CL_INVALID_VALUE if the invalid config_param or param_value enum values , are used.
|
||||||
|
* - CL_INVALID_EVENT_WAIT_LIST if event_wait_list is NULL and num_events_in_wait_list > 0, or
|
||||||
|
event_wait_list is not NULL and num_events_in_wait_list is 0,
|
||||||
|
* - or if event objects in event_wait_list are not valid events.
|
||||||
|
* - CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the OpenCL
|
||||||
|
implementation on the device.
|
||||||
|
* - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
OpenCL implementation on the host.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clSetThreadTraceParamAMD(
|
||||||
|
cl_threadtrace_amd /*thread_trace*/, cl_thread_trace_param /*config_param*/,
|
||||||
|
cl_uint /*param_value*/
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/* \brief Enqueues the binding command to bind cl_threadtrace_amd to cl_mem object for trace
|
||||||
|
* recording..
|
||||||
|
*
|
||||||
|
* \param command_queue must be a valid OpenCL command queue.
|
||||||
|
*
|
||||||
|
* \param thread_trace specifies the cl_threadtrace_amd object.
|
||||||
|
*
|
||||||
|
* \param mem_objects the cl_mem objects for trace recording
|
||||||
|
*
|
||||||
|
* \param mem_objects_num the number of cl_mem objects in the mem_objects
|
||||||
|
*
|
||||||
|
* \param buffer_size the size of each cl_mem object from mem_objects
|
||||||
|
*
|
||||||
|
* \param event_wait_list specify [is a pointer to] events that need to
|
||||||
|
* complete before this particular command can be executed.
|
||||||
|
* If \a event_wait_list is NULL, then this particular command does not wait
|
||||||
|
* on any event to complete. If \a event_wait_list is NULL,
|
||||||
|
* \a num_events_in_wait_list must be 0. If \a event_wait_list is not NULL,
|
||||||
|
* the list of events pointed to by \a event_wait_list must be valid and
|
||||||
|
* \a num_events_in_wait_list must be greater than 0. The events specified in
|
||||||
|
* \a event_wait_list act as synchronization points.
|
||||||
|
*
|
||||||
|
* \param num_events_in_wait_list specify the number of events in
|
||||||
|
* \a event_wait_list. It must be 0 if \a event_wait_list is NULL. It must be
|
||||||
|
* greater than 0 if \a event_wait_list is not NULL.
|
||||||
|
*
|
||||||
|
* \param event returns an event object that identifies this particular
|
||||||
|
* command and can be used to query or queue a wait for this particular
|
||||||
|
* command to complete. \a event can be NULL in which case it will not be
|
||||||
|
* possible for the application to query the status of this command or queue a
|
||||||
|
* wait for this command to complete.
|
||||||
|
* \return A non zero value if OpenCL failed to set threadTrace buffer parameter
|
||||||
|
* - CL_INVALID_COMMAND_QUEUE if command_queue is not a valid command-queue.
|
||||||
|
* - CL_INVALID_CONTEXT if the context associated with command_queue and events in event_wait_list
|
||||||
|
* are not the same.
|
||||||
|
* - CL_INVALID_VALUE if the thread_trace is invalid thread trace object.
|
||||||
|
* - CL_INVALID_VALUE if the buffer_size is negative or zero.
|
||||||
|
* - CL_INVALID_VALUE if the sub_buffers_num I less than 1.
|
||||||
|
* - CL_INVALID_OPERATION if the mem_objects_num is not equal to the number of Shader Engines of
|
||||||
|
* the [GPU] device.
|
||||||
|
* - CL_INVALID_MEM_OBJECT if one on memory objects in the mem_objects array is not a valid memory
|
||||||
|
* object or memory_objects is NULL.
|
||||||
|
* - CL_MEM_OBJECT_ALLOCATION_FAILURE if there is a failure to allocate memory for the data store
|
||||||
|
* associated from the memory objects of the mem_objects array.
|
||||||
|
* - CL_INVALID_EVENT_WAIT_LIST if event_wait_list is NULL and num_events_in_wait_list > 0, or
|
||||||
|
* event_wait_list is not NULL and num_events_in_wait_list is 0, or if event objects in
|
||||||
|
* event_wait_list are not valid events.
|
||||||
|
* - CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the OpenCL
|
||||||
|
* implementation on the device.
|
||||||
|
* - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
* OpenCL implementation on the host.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueBindThreadTraceBufferAMD(
|
||||||
|
cl_command_queue command_queue, cl_threadtrace_amd /*thread_trace*/, cl_mem* /*mem_objects*/,
|
||||||
|
cl_uint /*mem_objects_num*/, cl_uint /*buffer_size*/, cl_uint /*num_events_in_wait_list*/,
|
||||||
|
const cl_event* /*event_wait_list*/, cl_event* /*event*/
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Get specific information about the OpenCL Thread Trace.
|
||||||
|
*
|
||||||
|
* \param thread_trace_info_param is an enum that identifies the Thread Trace information being
|
||||||
|
* queried.
|
||||||
|
*
|
||||||
|
* \param param_value is a pointer to memory location where appropriate values
|
||||||
|
* for a given \a threadTrace_info_param will be returned. If \a param_value is NULL,
|
||||||
|
* it is ignored.
|
||||||
|
*
|
||||||
|
* \param param_value_size specifies the size in bytes of memory pointed to by
|
||||||
|
* \a param_value. This size in bytes must be >= size of return type.
|
||||||
|
*
|
||||||
|
* \param param_value_size_ret returns the actual size in bytes of data being
|
||||||
|
* queried by param_value. If \a param_value_size_ret is NULL, it is ignored.
|
||||||
|
*
|
||||||
|
* \return One of the following values:
|
||||||
|
* CL_INVALID_OPERATION if cl_threadtrace_amd object is not valid
|
||||||
|
* - CL_INVALID_VALUE if \a param_name is not one of the supported
|
||||||
|
* values or if size in bytes specified by \a param_value_size is < size of
|
||||||
|
* return type and \a param_value is not a NULL value.
|
||||||
|
* CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the
|
||||||
|
* OpenCL implementation on the host.
|
||||||
|
* CL_SUCCESS if the function is executed successfully.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clGetThreadTraceInfoAMD(
|
||||||
|
cl_threadtrace_amd /* thread_trace */, cl_threadtrace_info /*thread_trace_info_param*/,
|
||||||
|
size_t /*param_value_size*/, void* /*param_value*/, size_t* /*param_value_size_ret*/
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
/*! \brief Enqueues the thread trace command for the specified thread trace object.
|
||||||
|
*
|
||||||
|
* \param command_queue must be a valid OpenCL command queue.
|
||||||
|
*
|
||||||
|
* \param threadTraces specifies an array of cl_threadtrace_amd objects.
|
||||||
|
*
|
||||||
|
* \return A non zero value if OpenCL failed to release threadTrace
|
||||||
|
* - CL_INVALID_COMMAND_QUEUE if command_queue is not a valid command-queue.
|
||||||
|
* - CL_INVALID_CONTEXT if the context associated with command_queue and events in event_wait_list
|
||||||
|
* are not the same.
|
||||||
|
* - CL_INVALID_VALUE if the thread_trace is invalid thread trace object .
|
||||||
|
* - CL_INVALID_VALUE if the invalid command name enum value , not described in the
|
||||||
|
* cl_threadtrace_command_name_amd, is used.
|
||||||
|
* - CL_INVALID_OPERATION if the command enqueue failed. It can happen in the following cases:
|
||||||
|
* o BEGIN_COMMAND is queued for thread trace object for which memory object/s was/were not
|
||||||
|
* bound..
|
||||||
|
* o END_COMMAND is queued for thread trace object, for which BEGIN_COMMAND was not queued.
|
||||||
|
* o PAUSE_COMMAND is queued for thread trace object, for which BEGIN_COMMAND was not
|
||||||
|
* queued.
|
||||||
|
* o RESUME_COMMAND is queued for thread trace object, for which PAUSE_COMMAND was not
|
||||||
|
* queued.
|
||||||
|
* - CL_INVALID_EVENT_WAIT_LIST if event_wait_list is NULL and num_events_in_wait_list > 0, or
|
||||||
|
* event_wait_list is not NULL and num_events_in_wait_list is 0, or if event objects in
|
||||||
|
* event_wait_list are not valid events.
|
||||||
|
* - CL_OUT_OF_RESOURCES if there is a failure to allocate resources required by the OpenCL
|
||||||
|
* implementation on the device.
|
||||||
|
* - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the OpenCL
|
||||||
|
* implementation on the host.
|
||||||
|
*/
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueThreadTraceCommandAMD(
|
||||||
|
cl_command_queue /*command_queue*/, cl_threadtrace_amd /*thread_trace*/,
|
||||||
|
cl_threadtrace_command_name_amd /*command_name*/, cl_uint /*num_events_in_wait_list*/,
|
||||||
|
const cl_event* /*event_wait_list*/, cl_event* /*event*/
|
||||||
|
) CL_API_SUFFIX__VERSION_1_0;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /*extern "C"*/
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
#endif /*__CL_THREAD_TRACE_AMD_H*/
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2010 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
GLPREFIX(GLubyte*, glGetString, (GLenum name))
|
||||||
|
|
||||||
|
GLPREFIX(void, glBindBuffer, (GLenum target, GLuint buffer))
|
||||||
|
//GLPREFIX(void, glBindFramebufferEXT, (GLenum target, GLuint framebuffer))
|
||||||
|
GLPREFIX(void, glBindRenderbuffer, (GLenum target, GLuint renderbuffer))
|
||||||
|
GLPREFIX(void, glBindTexture, (GLenum target, GLuint texture))
|
||||||
|
GLPREFIX(void, glBufferData, (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage))
|
||||||
|
|
||||||
|
GLPREFIX(GLenum, glCheckFramebufferStatusEXT, (GLenum target))
|
||||||
|
|
||||||
|
GLPREFIX(void, glDeleteBuffers, (GLsizei n, const GLuint* buffers))
|
||||||
|
GLPREFIX(void, glDrawPixels, (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels))
|
||||||
|
|
||||||
|
//GLPREFIX(void, glFramebufferRenderbufferEXT, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer))
|
||||||
|
|
||||||
|
GLPREFIX(void, glGenBuffers, (GLsizei n, GLuint* buffers))
|
||||||
|
//GLPREFIX(void, glGenFramebuffersEXT, (GLsizei n, GLuint* framebuffers))
|
||||||
|
//10
|
||||||
|
GLPREFIX(void, glGetBufferParameteriv, (GLenum target, GLenum pname, GLint* params))
|
||||||
|
GLPREFIX(GLenum, glGetError, (void))
|
||||||
|
GLPREFIX(void, glFinish, (void))
|
||||||
|
GLPREFIX(void, glFlush, (void))
|
||||||
|
GLPREFIX(GLenum, glClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout))
|
||||||
|
GLPREFIX(void, glGetIntegerv, (GLenum pname, GLint *params))
|
||||||
|
GLPREFIX(void, glGetRenderbufferParameterivEXT, (GLenum target, GLenum pname, GLint* params))
|
||||||
|
//GLPREFIX(GLubyte*, glGetString, (GLenum name))
|
||||||
|
GLPREFIX(void, glGetTexImage, (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels))
|
||||||
|
GLPREFIX(void, glGetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint *params))
|
||||||
|
GLPREFIX(void, glGetTexParameteriv, (GLenum target, GLenum pname, GLint *params))
|
||||||
|
|
||||||
|
GLPREFIX(GLboolean, glIsBuffer, (GLuint buffer))
|
||||||
|
GLPREFIX(GLboolean, glIsRenderbufferEXT, (GLuint renderbuffer))
|
||||||
|
GLPREFIX(GLboolean, glIsTexture, (GLuint texture))
|
||||||
|
//20
|
||||||
|
GLPREFIX(GLvoid*, glMapBuffer, (GLenum target, GLenum access))
|
||||||
|
|
||||||
|
GLPREFIX(void, glReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels))
|
||||||
|
|
||||||
|
GLPREFIX(void, glTexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels))
|
||||||
|
GLPREFIX(void, glTexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels))
|
||||||
|
|
||||||
|
GLPREFIX(GLboolean, glUnmapBuffer, (GLenum target))
|
||||||
|
|
||||||
|
#undef GLPREFIX
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
|||||||
|
# Try to find ROCR (Radeon Open Compute Runtime)
|
||||||
|
#
|
||||||
|
# Once found, this will define:
|
||||||
|
# - ROCR_FOUND - ROCR status (found or not found)
|
||||||
|
# - ROCR_INCLUDES - Required ROCR include directories
|
||||||
|
# - ROCR_LIBRARIES - Required ROCR libraries
|
||||||
|
find_path(FIND_ROCR_INCLUDES hsa.h HINTS /opt/rocm/include /opt/rocm/hsa/include PATH_SUFFIXES hsa)
|
||||||
|
find_library(FIND_ROCR_LIBRARIES hsa-runtime64 HINTS /opt/rocm/lib /opt/rocm/hsa/lib)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(ROCR DEFAULT_MSG
|
||||||
|
FIND_ROCR_INCLUDES FIND_ROCR_LIBRARIES)
|
||||||
|
mark_as_advanced(FIND_ROCR_INCLUDES FIND_ROCR_LIBRARIES)
|
||||||
|
|
||||||
|
set(ROCR_INCLUDES ${FIND_ROCR_INCLUDES})
|
||||||
|
set(ROCR_LIBRARIES ${FIND_ROCR_LIBRARIES})
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# Try to find ROCT (Radeon Open Compute Thunk)
|
||||||
|
#
|
||||||
|
# Once found, this will define:
|
||||||
|
# - ROCT_FOUND - ROCT status (found or not found)
|
||||||
|
# - ROCT_INCLUDES - Required ROCT include directories
|
||||||
|
# - ROCT_LIBRARIES - Required ROCT libraries
|
||||||
|
find_path(FIND_ROCT_INCLUDES hsakmt.h HINTS /opt/rocm/include)
|
||||||
|
find_library(FIND_ROCT_LIBRARIES hsakmt HINTS /opt/rocm/lib)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(ROCT DEFAULT_MSG
|
||||||
|
FIND_ROCT_INCLUDES FIND_ROCT_LIBRARIES)
|
||||||
|
mark_as_advanced(FIND_ROCT_INCLUDES FIND_ROCT_LIBRARIES)
|
||||||
|
|
||||||
|
set(ROCT_INCLUDES ${FIND_ROCT_INCLUDES})
|
||||||
|
set(ROCT_LIBRARIES ${FIND_ROCT_LIBRARIES})
|
||||||
Vendored
@@ -0,0 +1,55 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8.3)
|
||||||
|
project(hip_vdi)
|
||||||
|
|
||||||
|
install(FILES @PROJECT_BINARY_DIR@/lib/libamdhip64.so DESTINATION lib)
|
||||||
|
install(FILES @PROJECT_BINARY_DIR@/lib/libhip_hcc.so DESTINATION lib)
|
||||||
|
if(NOT @HIP_COMPILER@ STREQUAL "clang")
|
||||||
|
install(FILES @PROJECT_BINARY_DIR@/libhiprtc.so DESTINATION lib)
|
||||||
|
endif()
|
||||||
|
install(FILES @PROJECT_BINARY_DIR@/.hipInfo DESTINATION lib)
|
||||||
|
install(FILES @PROJECT_BINARY_DIR@/hip-config.cmake @PROJECT_BINARY_DIR@/hip-config-version.cmake DESTINATION lib/cmake/hip)
|
||||||
|
install(FILES @hip_SOURCE_DIR@/packaging/hip-targets.cmake @hip_SOURCE_DIR@/packaging/hip-targets-release.cmake DESTINATION lib/cmake/hip)
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Packaging steps
|
||||||
|
#############################
|
||||||
|
set(CPACK_SET_DESTDIR TRUE)
|
||||||
|
set(CPACK_INSTALL_PREFIX "/opt/rocm/hip")
|
||||||
|
set(CPACK_PACKAGE_NAME "hip-vdi")
|
||||||
|
set(HCC_PACKAGE_NAME "vdi")
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HIP: Heterogenous-computing Interface for Portability [VDI]")
|
||||||
|
set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.")
|
||||||
|
set(CPACK_PACKAGE_CONTACT "Maneesh Gupta <maneesh.gupta@amd.com>")
|
||||||
|
set(CPACK_PACKAGE_VERSION @HIP_VERSION_MAJOR@.@HIP_VERSION_MINOR@.@HIP_VERSION_PATCH@)
|
||||||
|
set(CPACK_PACKAGE_VERSION_MAJOR @HIP_VERSION_MAJOR@)
|
||||||
|
set(CPACK_PACKAGE_VERSION_MINOR @HIP_VERSION_MINOR@)
|
||||||
|
set(CPACK_PACKAGE_VERSION_PATCH @HIP_VERSION_PATCH@)
|
||||||
|
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
|
||||||
|
set(CPACK_GENERATOR "TGZ;DEB;RPM")
|
||||||
|
set(CPACK_BINARY_DEB "ON")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/postinst;${PROJECT_BINARY_DIR}/prerm")
|
||||||
|
if(@COMPILE_HIP_ATP_MARKER@)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "hip-base (= ${CPACK_PACKAGE_VERSION}), ${HCC_PACKAGE_NAME} (= @HCC_PACKAGE_VERSION@), rocm-profiler, comgr (>= 1.1)")
|
||||||
|
else()
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "hip-base (= ${CPACK_PACKAGE_VERSION}), ${HCC_PACKAGE_NAME} (= @HCC_PACKAGE_VERSION@), comgr (>= 1.1)")
|
||||||
|
endif()
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_PROVIDES "hip_vdi")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_REPLACES "hip_vdi")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_CONFLICTS "hip_vdi")
|
||||||
|
set(CPACK_BINARY_RPM "ON")
|
||||||
|
set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
|
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/postinst")
|
||||||
|
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/prerm")
|
||||||
|
set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
|
||||||
|
string(REPLACE "-" "_" HIP_BASE_VERSION ${CPACK_PACKAGE_VERSION})
|
||||||
|
if(@COMPILE_HIP_ATP_MARKER@)
|
||||||
|
set(CPACK_RPM_PACKAGE_REQUIRES "hip-base = ${HIP_BASE_VERSION}, rocm-profiler, comgr >= 1.1")
|
||||||
|
#set(CPACK_RPM_PACKAGE_REQUIRES "hip-base = ${HIP_BASE_VERSION}, ${HCC_PACKAGE_NAME} = @HCC_PACKAGE_VERSION@, rocm-profiler, comgr >= 1.1")
|
||||||
|
else()
|
||||||
|
set(CPACK_RPM_PACKAGE_REQUIRES "hip-base = ${HIP_BASE_VERSION}, comgr >= 1.1")
|
||||||
|
endif()
|
||||||
|
set(CPACK_RPM_PACKAGE_OBSOLETES "hip_vdi")
|
||||||
|
set(CPACK_RPM_PACKAGE_CONFLICTS "hip_vdi")
|
||||||
|
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/opt")
|
||||||
|
set(CPACK_SOURCE_GENERATOR "TGZ")
|
||||||
|
include(CPack)
|
||||||
@@ -75,7 +75,7 @@ macro(PARSE_BUILD_COMMAND _target _sources _hipcc_options _hcc_options _nvcc_opt
|
|||||||
elseif(_link_options_found)
|
elseif(_link_options_found)
|
||||||
list(APPEND ${_link_options} ${arg})
|
list(APPEND ${_link_options} ${arg})
|
||||||
elseif(_exclude_platforms_found)
|
elseif(_exclude_platforms_found)
|
||||||
set(${_exclude_platforms} ${arg})
|
list(APPEND ${_exclude_platforms} ${arg})
|
||||||
elseif(_depends_found)
|
elseif(_depends_found)
|
||||||
list(APPEND ${_depends} ${arg})
|
list(APPEND ${_depends} ${arg})
|
||||||
else()
|
else()
|
||||||
@@ -106,7 +106,7 @@ macro(PARSE_CUSTOMBUILD_COMMAND _target _buildcmd _exclude_platforms _depends)
|
|||||||
set(_depends_found TRUE)
|
set(_depends_found TRUE)
|
||||||
else()
|
else()
|
||||||
if(_exclude_platforms_found)
|
if(_exclude_platforms_found)
|
||||||
set(${_exclude_platforms} ${arg})
|
list(APPEND ${_exclude_platforms} ${arg})
|
||||||
elseif(_depends_found)
|
elseif(_depends_found)
|
||||||
list(APPEND ${_depends} ${arg})
|
list(APPEND ${_depends} ${arg})
|
||||||
else()
|
else()
|
||||||
@@ -131,7 +131,7 @@ macro(PARSE_TEST_COMMAND _target _arguments _exclude_platforms)
|
|||||||
set(_exclude_platforms_found TRUE)
|
set(_exclude_platforms_found TRUE)
|
||||||
else()
|
else()
|
||||||
if(_exclude_platforms_found)
|
if(_exclude_platforms_found)
|
||||||
set(${_exclude_platforms} ${arg})
|
list(APPEND ${_exclude_platforms} ${arg})
|
||||||
else()
|
else()
|
||||||
list(APPEND ${_arguments} ${arg})
|
list(APPEND ${_arguments} ${arg})
|
||||||
endif()
|
endif()
|
||||||
@@ -158,7 +158,7 @@ macro(PARSE_TEST_NAMED_COMMAND _target _testname _arguments _exclude_platforms)
|
|||||||
set(_exclude_platforms_found TRUE)
|
set(_exclude_platforms_found TRUE)
|
||||||
else()
|
else()
|
||||||
if(_exclude_platforms_found)
|
if(_exclude_platforms_found)
|
||||||
set(${_exclude_platforms} ${arg})
|
list(APPEND ${_exclude_platforms} ${arg})
|
||||||
else()
|
else()
|
||||||
list(APPEND ${_arguments} ${arg})
|
list(APPEND ${_arguments} ${arg})
|
||||||
endif()
|
endif()
|
||||||
@@ -206,7 +206,7 @@ macro(HIT_ADD_FILES _dir _label _parent)
|
|||||||
parse_build_command(_target _sources _hipcc_options _hcc_options _nvcc_options _link_options _exclude_platforms _depends ${_dir} ${_cmd})
|
parse_build_command(_target _sources _hipcc_options _hcc_options _nvcc_options _link_options _exclude_platforms _depends ${_dir} ${_cmd})
|
||||||
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
||||||
insert_into_map("_exclude" "${target}" "${_exclude_platforms}")
|
insert_into_map("_exclude" "${target}" "${_exclude_platforms}")
|
||||||
if(_exclude_platforms STREQUAL "all" OR _exclude_platforms STREQUAL ${HIP_PLATFORM})
|
if("all" IN_LIST _exclude_platforms OR ${HIP_PLATFORM} IN_LIST _exclude_platforms)
|
||||||
else()
|
else()
|
||||||
set_source_files_properties(${_sources} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
|
set_source_files_properties(${_sources} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
|
||||||
hip_reset_flags()
|
hip_reset_flags()
|
||||||
@@ -239,7 +239,7 @@ macro(HIT_ADD_FILES _dir _label _parent)
|
|||||||
parse_custombuild_command(_target _buildcmd _exclude_platforms _depends ${_cmd})
|
parse_custombuild_command(_target _buildcmd _exclude_platforms _depends ${_cmd})
|
||||||
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
||||||
insert_into_map("_exclude" "${target}" "${_exclude_platforms}")
|
insert_into_map("_exclude" "${target}" "${_exclude_platforms}")
|
||||||
if(_exclude_platforms STREQUAL "all" OR _exclude_platforms STREQUAL ${HIP_PLATFORM})
|
if("all" IN_LIST _exclude_platforms OR ${HIP_PLATFORM} IN_LIST _exclude_platforms)
|
||||||
else()
|
else()
|
||||||
string(REGEX REPLACE ";" " " _buildcmd "${_buildcmd}")
|
string(REGEX REPLACE ";" " " _buildcmd "${_buildcmd}")
|
||||||
#string(CONCAT buildscript ${CMAKE_CURRENT_BINARY_DIR}/${target} ".sh")
|
#string(CONCAT buildscript ${CMAKE_CURRENT_BINARY_DIR}/${target} ".sh")
|
||||||
@@ -266,7 +266,7 @@ macro(HIT_ADD_FILES _dir _label _parent)
|
|||||||
parse_test_command(_target _arguments _exclude_platforms ${_cmd})
|
parse_test_command(_target _arguments _exclude_platforms ${_cmd})
|
||||||
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
||||||
read_from_map("_exclude" "${target}" _exclude_platforms_from_build)
|
read_from_map("_exclude" "${target}" _exclude_platforms_from_build)
|
||||||
if(_exclude_platforms STREQUAL "all" OR _exclude_platforms STREQUAL ${HIP_PLATFORM} OR
|
if("all" IN_LIST _exclude_platforms OR ${HIP_PLATFORM} IN_LIST _exclude_platforms OR
|
||||||
_exclude_platforms_from_build STREQUAL "all" OR _exclude_platforms_from_build STREQUAL ${HIP_PLATFORM})
|
_exclude_platforms_from_build STREQUAL "all" OR _exclude_platforms_from_build STREQUAL ${HIP_PLATFORM})
|
||||||
else()
|
else()
|
||||||
make_test(${_label}/${_target} ${_arguments})
|
make_test(${_label}/${_target} ${_arguments})
|
||||||
@@ -285,7 +285,7 @@ macro(HIT_ADD_FILES _dir _label _parent)
|
|||||||
parse_test_named_command(_target _testname _arguments _exclude_platforms ${_cmd})
|
parse_test_named_command(_target _testname _arguments _exclude_platforms ${_cmd})
|
||||||
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
string(REGEX REPLACE "/" "." target ${_label}/${_target})
|
||||||
read_from_map("_exclude" "${target}" _exclude_platforms_from_build)
|
read_from_map("_exclude" "${target}" _exclude_platforms_from_build)
|
||||||
if(_exclude_platforms STREQUAL "all" OR _exclude_platforms STREQUAL ${HIP_PLATFORM} OR
|
if("all" IN_LIST _exclude_platforms OR ${HIP_PLATFORM} IN_LIST _exclude_platforms OR
|
||||||
_exclude_platforms_from_build STREQUAL "all" OR _exclude_platforms_from_build STREQUAL ${HIP_PLATFORM})
|
_exclude_platforms_from_build STREQUAL "all" OR _exclude_platforms_from_build STREQUAL ${HIP_PLATFORM})
|
||||||
else()
|
else()
|
||||||
make_named_test(${_label}/${_target} ${_label}/${_testname}.tst ${_arguments})
|
make_named_test(${_label}/${_target} ${_label}/${_testname}.tst ${_arguments})
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
/* HIT_START
|
/* HIT_START
|
||||||
* BUILD_CMD: libfoo_amd %hc %S/%s -o libfoo.so -Xcompiler -fPIC -lpthread -shared -DTEST_SHARED_LIBRARY EXCLUDE_HIP_PLATFORM nvcc
|
* BUILD_CMD: libfoo_amd %hc %S/%s -o libfoo.so -Xcompiler -fPIC -lpthread -shared -DTEST_SHARED_LIBRARY EXCLUDE_HIP_PLATFORM nvcc
|
||||||
* BUILD_CMD: libfoo_nvidia %hc %S/%s -o libfoo.so -Xcompiler -fPIC -lpthread -shared -DTEST_SHARED_LIBRARY EXCLUDE_HIP_PLATFORM hcc
|
* BUILD_CMD: libfoo_nvidia %hc %S/%s -o libfoo.so -Xcompiler -fPIC -lpthread -shared -DTEST_SHARED_LIBRARY EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* BUILD_CMD: %t %hc %S/%s -o %T/%t -ldl
|
* BUILD_CMD: %t %hc %S/%s -o %T/%t -ldl
|
||||||
* TEST: %t
|
* TEST: %t
|
||||||
* HIT_END
|
* HIT_END
|
||||||
|
|||||||
@@ -18,9 +18,9 @@
|
|||||||
* */
|
* */
|
||||||
|
|
||||||
/* HIT_START
|
/* HIT_START
|
||||||
* BUILD_CMD: hipMalloc %cc -D__HIP_PLATFORM_NVCC__ -I%hip-path/include -I/usr/local/cuda/include %S/%s -o %T/hipMalloc_nv -L/usr/local/cuda/lib64 -lcudart EXCLUDE_HIP_PLATFORM hcc
|
* BUILD_CMD: hipMalloc %cc -D__HIP_PLATFORM_NVCC__ -I%hip-path/include -I/usr/local/cuda/include %S/%s -o %T/hipMalloc_nv -L/usr/local/cuda/lib64 -lcudart EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* BUILD_CMD: hipMalloc %cc -D__HIP_PLATFORM_HCC__ -I%hip-path/include %S/%s -Wl,--rpath=%hip-path/lib %hip-path/lib/libhip_hcc.so -o %T/hipMalloc_hcc EXCLUDE_HIP_PLATFORM nvcc
|
* BUILD_CMD: hipMalloc %cc -D__HIP_PLATFORM_HCC__ -I%hip-path/include %S/%s -Wl,--rpath=%hip-path/lib %hip-path/lib/libhip_hcc.so -o %T/hipMalloc_hcc EXCLUDE_HIP_PLATFORM nvcc
|
||||||
* TEST: hipMalloc_nv EXCLUDE_HIP_PLATFORM hcc
|
* TEST: hipMalloc_nv EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* TEST: hipMalloc_hcc EXCLUDE_HIP_PLATFORM nvcc
|
* TEST: hipMalloc_hcc EXCLUDE_HIP_PLATFORM nvcc
|
||||||
* HIT_END
|
* HIT_END
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ THE SOFTWARE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* HIT_START
|
/* HIT_START
|
||||||
* BUILD: %t %s ../test_common.cpp EXCLUDE_HIP_PLATFORM hcc
|
* BUILD: %t %s ../test_common.cpp EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* TEST: %t EXCLUDE_HIP_PLATFORM nvcc
|
* TEST: %t EXCLUDE_HIP_PLATFORM nvcc
|
||||||
* HIT_END
|
* HIT_END
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ THE SOFTWARE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* HIT_START
|
/* HIT_START
|
||||||
* BUILD: %t %s ../test_common.cpp EXCLUDE_HIP_PLATFORM hcc
|
* BUILD: %t %s ../test_common.cpp EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* TEST: %t EXCLUDE_HIP_PLATFORM nvcc
|
* TEST: %t EXCLUDE_HIP_PLATFORM nvcc
|
||||||
* HIT_END
|
* HIT_END
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
/* HIT_START
|
/* HIT_START
|
||||||
* BUILD: %t %s ../test_common.cpp
|
* BUILD: %t %s ../test_common.cpp
|
||||||
* TEST: %t EXCLUDE_HIP_PLATFORM hcc
|
* TEST: %t EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* TEST: %t --memcpyWithPeer EXCLUDE_HIP_PLATFORM hcc
|
* TEST: %t --memcpyWithPeer EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* TEST: %t --mirrorPeers EXCLUDE_HIP_PLATFORM hcc
|
* TEST: %t --mirrorPeers EXCLUDE_HIP_PLATFORM hcc vdi
|
||||||
* HIT_END
|
* HIT_END
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,198 @@
|
|||||||
|
#project("hip")
|
||||||
|
cmake_minimum_required(VERSION 3.5.1)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-keep-memory -Wl,-Bsymbolic -Wl,--unresolved-symbols=report-all -Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/hip_hcc.map.in")
|
||||||
|
|
||||||
|
if(CMAKE_CXX_FLAGS MATCHES "fsanitize=address")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -shared-libasan")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
|
||||||
|
add_definitions(-D__HIP_VDI__ -D__HIP_PLATFORM_HCC__ -DLINUX -D__x86_64__ -D__AMD64__ -DUNIX_OS -DqLittleEndian -DOPENCL_MAJOR=2 -DOPENCL_MINOR=0 -DWITH_AQL -DWITH_ONLINE_COMPILER -DATI_OS_LINUX -DATI_ARCH_X86 -DLITTLEENDIAN_CPU -DATI_BITS_64 -DATI_COMP_GCC -DWITH_HSA_DEVICE -DWITH_TARGET_AMDGCN -DOPENCL_EXPORTS -DCL_USE_DEPRECATED_OPENCL_1_0_APIS -DCL_USE_DEPRECATED_OPENCL_1_1_APIS -DCL_USE_DEPRECATED_OPENCL_1_2_APIS -DCL_USE_DEPRECATED_OPENCL_2_0_APIS -DVEGA10_ONLY=false -DWITH_LIGHTNING_COMPILER -DUSE_PROF_API)
|
||||||
|
|
||||||
|
if(CMAKE_BUILD_TYPE MATCHES "^Debug$")
|
||||||
|
add_definitions(-DDEBUG)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#command example:
|
||||||
|
#cmake -DVDI_DIR=/home/pghafari/vdi/vdi -DLIBOCL_STATIC_DIR=/home/pghafari/git-ocl/build/amdocl -DLIBVDI_STATIC_DIR=/home/pghafari/vdi/vdi/build -DUSE_COMGR_LIBRARY=yes -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="/home/pghafari/rocmgitvdi/hsa-runtime/opensrc/hsa-runtime/build;/home/pghafari/rocmgitvdi/hsa-runtime/opensrc;/home/pghafari/rocmgitvdi/support/lib/comgr;/home/pghafari/rocmgitvdi/support/lib/comgr/build;" -DCMAKE_MODULE_PATH=/home/pghafari/rocmgit/opencl/cmake/modules -DLLVM_INCLUDES=/home/pghafari/rocmgit/llvm-project/llvm/include ..
|
||||||
|
|
||||||
|
set(USE_PROF_API "1")
|
||||||
|
|
||||||
|
find_package(ROCT REQUIRED)
|
||||||
|
find_package(ROCR REQUIRED)
|
||||||
|
|
||||||
|
if(NOT DEFINED LIBVDI_STATIC_DIR)
|
||||||
|
find_path(LIBVDI_STATIC_DIR
|
||||||
|
NAMES libamdvdi_static.a
|
||||||
|
PATHS /opt/rocm/vdi
|
||||||
|
PATH_SUFFIXES lib
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED VDI_DIR)
|
||||||
|
find_path(VDI_DIR
|
||||||
|
NAMES top.hpp
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
PATHS /opt/rocm/vdi
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
message("vdilib:${LIBVDI_STATIC_DIR} ,found vdi includes ${VDI_DIR}")
|
||||||
|
set(PROF_API_HEADER_PATH ${VDI_DIR}/platform)
|
||||||
|
#############################
|
||||||
|
# Profiling API support
|
||||||
|
#############################
|
||||||
|
# Generate profiling API macros/structures header
|
||||||
|
set(PROF_API_STR "${CMAKE_CURRENT_SOURCE_DIR}/../include/hip/hcc_detail/hip_prof_str.h")
|
||||||
|
set(PROF_API_HDR "${CMAKE_CURRENT_SOURCE_DIR}/../include/hip/hcc_detail/hip_runtime_api.h")
|
||||||
|
set(PROF_API_SRC "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
set(PROF_API_GEN "${CMAKE_CURRENT_SOURCE_DIR}/hip_prof_gen.py")
|
||||||
|
set(PROF_API_LOG "${PROJECT_BINARY_DIR}/hip_prof_gen.log.txt")
|
||||||
|
set(PROF_API_CMD "${PROF_API_GEN} -v -t --priv ${OPT_PROF_API} ${PROF_API_HDR} ${PROF_API_SRC} ${PROF_API_STR} >${PROF_API_LOG}")
|
||||||
|
MESSAGE(STATUS "Generating profiling promitives: ${PROF_API_STR}")
|
||||||
|
execute_process(COMMAND sh -c "rm -f ${PROF_API_STR}; ${PROF_API_CMD}")
|
||||||
|
MESSAGE(COMMAND sh -c "rm -f ${PROF_API_STR}; ${PROF_API_CMD}")
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROF_API_GEN} ${PROF_API_HDR} ${PROF_API_STR})
|
||||||
|
|
||||||
|
# Enable profiling API
|
||||||
|
if(USE_PROF_API EQUAL 1)
|
||||||
|
find_path(PROF_API_HEADER_DIR prof_protocol.h
|
||||||
|
HINTS
|
||||||
|
${PROF_API_HEADER_PATH}
|
||||||
|
PATHS
|
||||||
|
/opt/rocm/roctracer
|
||||||
|
PATH_SUFFIXES
|
||||||
|
include/ext
|
||||||
|
)
|
||||||
|
if(NOT PROF_API_HEADER_DIR)
|
||||||
|
MESSAGE(WARNING "Profiling API header not found. Disabling roctracer integration. Use -DPROF_API_HEADER_PATH=<path to prof_protocol.h header>")
|
||||||
|
else()
|
||||||
|
add_definitions(-DUSE_PROF_API=1)
|
||||||
|
include_directories(${PROF_API_HEADER_DIR})
|
||||||
|
MESSAGE(STATUS "Profiling API: ${PROF_API_HEADER_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT DEFINED VDI_DIR OR NOT DEFINED LIBOCL_STATIC_DIR OR NOT DEFINED LIBVDI_STATIC_DIR )
|
||||||
|
# message(FATAL_ERROR "define VDI_DIR, LIBOCL_STATIC_DIR\n")
|
||||||
|
|
||||||
|
endif()
|
||||||
|
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
|
||||||
|
set(CMAKE_MODULE_PATH${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
|
||||||
|
|
||||||
|
include_directories(${ROCR_INCLUDES})
|
||||||
|
if (DEFINED LLVM_INCLUDES AND NOT ${LLVM_INCLUDES} STREQUAL "")
|
||||||
|
message(STATUS "LLVM includes found ${LLVM_INCLUDES}")
|
||||||
|
include_directories(${LLVM_INCLUDES})
|
||||||
|
endif() # if (DEFINED LLVM_INCLUDES AND NOT ${LLVM_INCLUDES} STREQUAL "")
|
||||||
|
|
||||||
|
#find_package(hsa-runtime REQUIRED CONFIG PATHS ${HSA_RUNTIME} NO_DEFAULT_PATH)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR})
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/include)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/elfio)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/amdocl)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/include/hip/hcc_detail/elfio)
|
||||||
|
include_directories(${VDI_DIR})
|
||||||
|
include_directories(${VDI_DIR}/include)
|
||||||
|
include_directories(${VDI_DIR}/compiler/lib)
|
||||||
|
include_directories(${VDI_DIR}/compiler/lib/include)
|
||||||
|
include_directories(${VDI_DIR}/compiler/lib/loaders)
|
||||||
|
include_directories(${VDI_DIR}/compiler/lib/loaders/elf/utils/common)
|
||||||
|
include_directories(${VDI_DIR}/compiler/lib/loaders/elf/utils/libelf)
|
||||||
|
add_definitions(-DUSE_COMGR_LIBRARY -DCOMGR_DYN_DLL)
|
||||||
|
find_package(amd_comgr REQUIRED CONFIG
|
||||||
|
PATHS
|
||||||
|
/opt/rocm/
|
||||||
|
PATH_SUFFIXES
|
||||||
|
cmake/amd_comgr
|
||||||
|
lib/cmake/amd_comgr
|
||||||
|
)
|
||||||
|
MESSAGE(STATUS "Code Object Manager found at ${amd_comgr_DIR}.")
|
||||||
|
|
||||||
|
#find_package(amd_comgr REQUIRED CONFIG)
|
||||||
|
include_directories("$<TARGET_PROPERTY:amd_comgr,INTERFACE_INCLUDE_DIRECTORIES>")
|
||||||
|
|
||||||
|
add_definitions(-DBSD_LIBELF)
|
||||||
|
#find_package( Threads REQUIRED CONFIG)
|
||||||
|
#find_package( LibElf REQUIRED CONFIG)
|
||||||
|
|
||||||
|
add_library(amdhip64 SHARED
|
||||||
|
hip_context.cpp
|
||||||
|
hip_device.cpp
|
||||||
|
hip_device_runtime.cpp
|
||||||
|
hip_error.cpp
|
||||||
|
hip_event.cpp
|
||||||
|
hip_memory.cpp
|
||||||
|
hip_module.cpp
|
||||||
|
hip_peer.cpp
|
||||||
|
hip_platform.cpp
|
||||||
|
hip_profile.cpp
|
||||||
|
hip_stream.cpp
|
||||||
|
hip_surface.cpp
|
||||||
|
hip_texture.cpp
|
||||||
|
hip_activity.cpp
|
||||||
|
hip_intercept.cpp
|
||||||
|
hip_rtc.cpp
|
||||||
|
cl_gl.cpp
|
||||||
|
cl_icd.cpp
|
||||||
|
cl_lqdflash_amd.cpp
|
||||||
|
)
|
||||||
|
add_library(amdvdi_static STATIC IMPORTED)
|
||||||
|
set_target_properties(amdvdi_static PROPERTIES IMPORTED_LOCATION "${LIBVDI_STATIC_DIR}/libamdvdi_static.a")
|
||||||
|
#add_library(amdocl64 SHARED IMPORTED)
|
||||||
|
#set_target_properties(amdocl64 PROPERTIES IMPORTED_LOCATION "/opt/rocm/opencl/lib/x86_64/libamdocl64.so")
|
||||||
|
#add_library(oclelf STATIC IMPORTED)
|
||||||
|
#set_target_properties(oclelf PROPERTIES IMPORTED_LOCATION "${LIBOCLELF_STATIC_DIR}/liboclelf.a")
|
||||||
|
|
||||||
|
add_library(host INTERFACE)
|
||||||
|
target_link_libraries(host INTERFACE amdhip64)
|
||||||
|
add_library(device INTERFACE)
|
||||||
|
target_link_libraries(device INTERFACE host)
|
||||||
|
#target_link_libraries(amdhip64 PRIVATE amd_comgr)
|
||||||
|
|
||||||
|
target_link_libraries(amdhip64 amdvdi_static pthread dl ${ROCT_LIBRARIES} ${ROCR_LIBRARIES})
|
||||||
|
#target_link_libraries(amdhip64 amdvdi_static amdocl64_static pthread dl ${ROCT_LIBRARIES} ${ROCR_LIBRARIES})
|
||||||
|
|
||||||
|
#install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink libamdhip64.so lib/libhip_hcc.so)" )
|
||||||
|
install(TARGETS amdhip64 LIBRARY DESTINATION lib/x86_64 COMPONENT applications)
|
||||||
|
|
||||||
|
install(PROGRAMS $<TARGET_FILE:amdhip64>
|
||||||
|
DESTINATION lib
|
||||||
|
COMPONENT MAIN)
|
||||||
|
INSTALL(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink libamdhip64.so lib/libhip_hcc.so )" DESTINATION lib COMPONENT MAIN)
|
||||||
|
|
||||||
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/lib/libhip_hcc.so DESTINATION lib COMPONENT MAIN)
|
||||||
|
|
||||||
|
|
||||||
|
if(0)
|
||||||
|
set(CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators")
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.")
|
||||||
|
set(CPACK_PACKAGE_VENDOR "AMD")
|
||||||
|
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm/hip-on-vdi")
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_VERSION_MAJOR "1")
|
||||||
|
set(CPACK_PACKAGE_VERSION_MINOR "0")
|
||||||
|
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
||||||
|
|
||||||
|
# Debian CPACK variables
|
||||||
|
set(CPACK_DEB_COMPONENT_INSTALL ON)
|
||||||
|
|
||||||
|
set(CPACK_DEBIAN_MAIN_FILE_NAME "hip-on-vdi-1.0.0.deb")
|
||||||
|
set(CPACK_DEBIAN_MAIN_PACKAGE_NAME "hip-on-vdi")
|
||||||
|
#set(CPACK_DEBIAN_MAIN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/DEB/postinst;${CMAKE_CURRENT_SOURCE_DIR}/DEB/prerm")
|
||||||
|
|
||||||
|
# RPM CPACK variables
|
||||||
|
set(CPACK_RPM_COMPONENT_INSTALL ON)
|
||||||
|
|
||||||
|
set(CPACK_RPM_MAIN_FILE_NAME "hip-on-vdi-1.0.0.rpm")
|
||||||
|
set(CPACK_RPM_MAIN_PACKAGE_NAME "hip-on-vdi")
|
||||||
|
#set(CPACK_RPM_MAIN_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_post")
|
||||||
|
#set(CPACK_RPM_MAIN_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_postun")
|
||||||
|
|
||||||
|
set(CPACK_COMPONENTS_ALL MAIN)
|
||||||
|
include(CPack)
|
||||||
|
endif()
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,363 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2010 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CL_GL_AMD_HPP_
|
||||||
|
#define CL_GL_AMD_HPP_
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else //!_WIN32
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#endif //!_WIN32
|
||||||
|
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#include <GL/glext.h>
|
||||||
|
#include "CL/cl_gl.h"
|
||||||
|
#ifndef _WIN32
|
||||||
|
#include <GL/glx.h>
|
||||||
|
#endif //!_WIN32
|
||||||
|
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
#include <EGL/eglext.h>
|
||||||
|
#include <EGL/eglplatform.h>
|
||||||
|
|
||||||
|
#include "platform/context.hpp"
|
||||||
|
#include "platform/command.hpp"
|
||||||
|
|
||||||
|
namespace amd
|
||||||
|
{
|
||||||
|
|
||||||
|
//! Class GLObject keeps all the info about the GL object
|
||||||
|
//! from which the CL object is created
|
||||||
|
class GLObject : public InteropObject
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
cl_gl_object_type clGLType_; //!< CL GL object type
|
||||||
|
GLenum glTarget_;
|
||||||
|
GLuint gluiName_;
|
||||||
|
GLint gliMipLevel_;
|
||||||
|
GLenum glInternalFormat_;
|
||||||
|
GLint gliWidth_;
|
||||||
|
GLint gliHeight_;
|
||||||
|
GLint gliDepth_;
|
||||||
|
GLenum glCubemapFace_;
|
||||||
|
GLsizei glNumSamples_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! GLObject constructor initializes member variables
|
||||||
|
GLObject(
|
||||||
|
GLenum glTarget,
|
||||||
|
GLuint gluiName,
|
||||||
|
GLint gliMipLevel,
|
||||||
|
GLenum glInternalFormat,
|
||||||
|
GLint gliWidth,
|
||||||
|
GLint gliHeight,
|
||||||
|
GLint gliDepth,
|
||||||
|
cl_gl_object_type clGLType,
|
||||||
|
GLenum glCubemapFace,
|
||||||
|
GLsizei glNumSamples
|
||||||
|
): // Initialization of member variables
|
||||||
|
clGLType_(clGLType),
|
||||||
|
glTarget_(glTarget),
|
||||||
|
gluiName_(gluiName),
|
||||||
|
gliMipLevel_(gliMipLevel),
|
||||||
|
glInternalFormat_(glInternalFormat),
|
||||||
|
gliWidth_(gliWidth),
|
||||||
|
gliHeight_(gliHeight),
|
||||||
|
gliDepth_(gliDepth),
|
||||||
|
glCubemapFace_(glCubemapFace),
|
||||||
|
glNumSamples_(glNumSamples)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~GLObject() {}
|
||||||
|
virtual GLObject* asGLObject() {return this;}
|
||||||
|
|
||||||
|
//! GLObject query functions to get GL info from member variables
|
||||||
|
GLenum getGLTarget() const {return glTarget_;}
|
||||||
|
GLuint getGLName() const {return gluiName_;}
|
||||||
|
GLint getGLMipLevel() const {return gliMipLevel_;}
|
||||||
|
GLenum getGLInternalFormat() const {return glInternalFormat_;}
|
||||||
|
GLint getGLSize() const {return gliWidth_;}
|
||||||
|
GLint getGLWidth() const {return gliWidth_;}
|
||||||
|
GLint getGLHeight() const {return gliHeight_;}
|
||||||
|
GLint getGLDepth() const {return gliDepth_;}
|
||||||
|
cl_gl_object_type getCLGLObjectType() const { return clGLType_; }
|
||||||
|
GLenum getCubemapFace() const {return glCubemapFace_;}
|
||||||
|
GLsizei getNumSamples() const { return glNumSamples_;}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Class BufferGL is drived from classes Buffer and GLObject
|
||||||
|
//! where the former keeps all data for CL object and
|
||||||
|
//! the latter keeps all data for GL object
|
||||||
|
class BufferGL : public Buffer, public GLObject
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
//! Initializes the device memory array which is nested
|
||||||
|
// after'BufferGL' object in memory layout.
|
||||||
|
virtual void initDeviceMemory();
|
||||||
|
public:
|
||||||
|
//! BufferGL constructor just calls constructors of base classes
|
||||||
|
//! to pass down the parameters
|
||||||
|
BufferGL(
|
||||||
|
Context& amdContext,
|
||||||
|
cl_mem_flags clFlags,
|
||||||
|
size_t uiSizeInBytes,
|
||||||
|
GLenum glTarget,
|
||||||
|
GLuint gluiName)
|
||||||
|
: // Call base classes constructors
|
||||||
|
Buffer(
|
||||||
|
amdContext,
|
||||||
|
clFlags,
|
||||||
|
uiSizeInBytes
|
||||||
|
),
|
||||||
|
GLObject(
|
||||||
|
glTarget,
|
||||||
|
gluiName,
|
||||||
|
0, // Mipmap level default
|
||||||
|
GL_ARRAY_BUFFER, // Just init to some value
|
||||||
|
(GLint) uiSizeInBytes,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
CL_GL_OBJECT_BUFFER,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setInteropObj(this);
|
||||||
|
}
|
||||||
|
virtual ~BufferGL() {}
|
||||||
|
|
||||||
|
virtual BufferGL* asBufferGL() { return this; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Class ImageGL is derived from classes Image and GLObject
|
||||||
|
//! where the former keeps all data for CL object and
|
||||||
|
//! the latter keeps all data for GL object
|
||||||
|
class ImageGL : public Image, public GLObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! ImageGL constructor just calls constructors of base classes
|
||||||
|
//! to pass down the parameters
|
||||||
|
ImageGL(
|
||||||
|
Context& amdContext,
|
||||||
|
cl_mem_object_type clType,
|
||||||
|
cl_mem_flags clFlags,
|
||||||
|
const Format& format,
|
||||||
|
size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t depth,
|
||||||
|
GLenum glTarget,
|
||||||
|
GLuint gluiName,
|
||||||
|
GLint gliMipLevel,
|
||||||
|
GLenum glInternalFormat,
|
||||||
|
cl_gl_object_type clGLType,
|
||||||
|
GLsizei numSamples,
|
||||||
|
GLenum glCubemapFace = 0)
|
||||||
|
: Image(amdContext, clType, clFlags, format, width, height, depth,
|
||||||
|
Format(format).getElementSize() * width,
|
||||||
|
Format(format).getElementSize() * width * depth)
|
||||||
|
, GLObject(glTarget, gluiName, gliMipLevel, glInternalFormat,
|
||||||
|
static_cast<GLint>(width), static_cast<GLint>(height),
|
||||||
|
static_cast<GLint>(depth), clGLType, glCubemapFace,numSamples)
|
||||||
|
{
|
||||||
|
setInteropObj(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~ImageGL() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//! Initializes the device memory array which is nested
|
||||||
|
// after'BufferGL' object in memory layout.
|
||||||
|
virtual void initDeviceMemory();
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define APICALL WINAPI
|
||||||
|
#define GETPROCADDRESS GetProcAddress
|
||||||
|
#define API_GETPROCADDR "wglGetProcAddress"
|
||||||
|
#define FCN_STR_TYPE LPCSTR
|
||||||
|
typedef PROC (WINAPI* PFN_xxxGetProcAddress) (LPCSTR fcnName);
|
||||||
|
typedef HGLRC (APICALL* PFN_wglCreateContext) (HDC hdc);
|
||||||
|
typedef HGLRC (APICALL* PFN_wglGetCurrentContext) (void);
|
||||||
|
typedef HDC (APICALL* PFN_wglGetCurrentDC) (void);
|
||||||
|
typedef BOOL (APICALL* PFN_wglDeleteContext) (HGLRC hglrc);
|
||||||
|
typedef BOOL (APICALL* PFN_wglMakeCurrent) (HDC hdc, HGLRC hglrc);
|
||||||
|
typedef BOOL (APICALL* PFN_wglShareLists) (HGLRC hglrc1, HGLRC hglrc2);
|
||||||
|
#else //!_WIN32
|
||||||
|
#define APICALL // __stdcall //??? todo odintsov
|
||||||
|
#define API_GETPROCADDR "glXGetProcAddress"
|
||||||
|
#define GETPROCADDRESS dlsym
|
||||||
|
#define FCN_STR_TYPE const GLubyte*
|
||||||
|
#define WINAPI
|
||||||
|
#define PROC void*
|
||||||
|
typedef void* (*PFN_xxxGetProcAddress) (const GLubyte* procName);
|
||||||
|
// X11 typedef
|
||||||
|
typedef Display* (*PFNXOpenDisplay)(_Xconst char* display_name );
|
||||||
|
typedef int (*PFNXCloseDisplay)(Display* display );
|
||||||
|
|
||||||
|
//glx typedefs
|
||||||
|
typedef GLXDrawable (*PFNglXGetCurrentDrawable)();
|
||||||
|
typedef Display* (*PFNglXGetCurrentDisplay)();
|
||||||
|
typedef GLXContext (*PFNglXGetCurrentContext)( void );
|
||||||
|
typedef XVisualInfo* (*PFNglXChooseVisual)(Display *dpy, int screen, int *attribList);
|
||||||
|
typedef GLXContext(*PFNglXCreateContext)(Display* dpy,XVisualInfo* vis,GLXContext shareList,Bool direct);
|
||||||
|
typedef void(*PFNglXDestroyContext)(Display* dpy, GLXContext ctx);
|
||||||
|
typedef Bool(*PFNglXMakeCurrent)( Display* dpy, GLXDrawable drawable, GLXContext ctx);
|
||||||
|
typedef void* HMODULE;
|
||||||
|
#endif //!_WIN32
|
||||||
|
|
||||||
|
#define GLPREFIX(rtype, fcn, dclargs) \
|
||||||
|
typedef rtype (APICALL* PFN_##fcn) dclargs;
|
||||||
|
|
||||||
|
// Declare prototypes for GL functions
|
||||||
|
#include "gl_functions.hpp"
|
||||||
|
|
||||||
|
class GLFunctions
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! Locks any access to the virtual GPUs
|
||||||
|
class SetIntEnv : public amd::StackObject {
|
||||||
|
public:
|
||||||
|
//! Default constructor
|
||||||
|
SetIntEnv(GLFunctions* env);
|
||||||
|
|
||||||
|
//! Destructor
|
||||||
|
~SetIntEnv();
|
||||||
|
|
||||||
|
//! Checks if the environment setup was successful
|
||||||
|
bool isValid() const { return isValid_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLFunctions* env_; //!< GL environment
|
||||||
|
bool isValid_; //!< If TRUE, then it's a valid setup
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
HMODULE libHandle_;
|
||||||
|
int missed_; // Indicates how many GL functions not init'ed, if any
|
||||||
|
|
||||||
|
amd::Monitor lock_;
|
||||||
|
|
||||||
|
EGLDisplay eglDisplay_;
|
||||||
|
EGLContext eglOriginalContext_;
|
||||||
|
EGLContext eglInternalContext_;
|
||||||
|
EGLContext eglTempContext_;
|
||||||
|
bool isEGL_;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
HGLRC hOrigGLRC_;
|
||||||
|
HDC hDC_;
|
||||||
|
HGLRC hIntGLRC_; // handle for internal GLRC to access shared context
|
||||||
|
HDC tempDC_;
|
||||||
|
HGLRC tempGLRC_;
|
||||||
|
|
||||||
|
PFN_wglCreateContext wglCreateContext_;
|
||||||
|
PFN_wglGetCurrentContext wglGetCurrentContext_;
|
||||||
|
PFN_wglGetCurrentDC wglGetCurrentDC_;
|
||||||
|
PFN_wglDeleteContext wglDeleteContext_;
|
||||||
|
PFN_wglMakeCurrent wglMakeCurrent_;
|
||||||
|
PFN_wglShareLists wglShareLists_;
|
||||||
|
#else
|
||||||
|
public:
|
||||||
|
Display* Dpy_;
|
||||||
|
GLXDrawable Drawable_;
|
||||||
|
GLXContext origCtx_;
|
||||||
|
Display* intDpy_;
|
||||||
|
Window intDrawable_;
|
||||||
|
GLXContext intCtx_;
|
||||||
|
Display* tempDpy_;
|
||||||
|
GLXDrawable tempDrawable_;
|
||||||
|
GLXContext tempCtx_;
|
||||||
|
|
||||||
|
//pointers to X11 functions
|
||||||
|
PFNXOpenDisplay XOpenDisplay_;
|
||||||
|
PFNXCloseDisplay XCloseDisplay_;
|
||||||
|
|
||||||
|
//pointers to GLX functions
|
||||||
|
PFNglXGetCurrentDrawable glXGetCurrentDrawable_;
|
||||||
|
PFNglXGetCurrentDisplay glXGetCurrentDisplay_;
|
||||||
|
PFNglXGetCurrentContext glXGetCurrentContext_;
|
||||||
|
PFNglXChooseVisual glXChooseVisual_;
|
||||||
|
PFNglXCreateContext glXCreateContext_;
|
||||||
|
PFNglXDestroyContext glXDestroyContext_;
|
||||||
|
PFNglXMakeCurrent glXMakeCurrent_;
|
||||||
|
#endif
|
||||||
|
public:
|
||||||
|
|
||||||
|
GLFunctions(HMODULE h, bool isEGL);
|
||||||
|
~GLFunctions();
|
||||||
|
|
||||||
|
// Query CL-GL context association
|
||||||
|
bool isAssociated() const
|
||||||
|
{
|
||||||
|
if (isEGL_ && eglDisplay_ && eglOriginalContext_) return true;
|
||||||
|
#ifdef _WIN32
|
||||||
|
if(hDC_ && hOrigGLRC_) return true;
|
||||||
|
#else //!_WIN32
|
||||||
|
if(Dpy_ && origCtx_) return true;
|
||||||
|
#endif //!_WIN32
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool isEGL() const
|
||||||
|
{
|
||||||
|
return isEGL_;
|
||||||
|
}
|
||||||
|
// Accessor methods
|
||||||
|
#ifdef _WIN32
|
||||||
|
HGLRC getOrigGLRC() const {return hOrigGLRC_;}
|
||||||
|
HDC getDC() const {return hDC_;}
|
||||||
|
HGLRC getIntGLRC() const {return hIntGLRC_;}
|
||||||
|
#else //!_WIN32
|
||||||
|
Display* getDpy() const {return Dpy_;}
|
||||||
|
GLXDrawable getDrawable() const {return Drawable_;}
|
||||||
|
GLXContext getOrigCtx() const {return origCtx_;}
|
||||||
|
|
||||||
|
Display* getIntDpy() const {return intDpy_;}
|
||||||
|
GLXDrawable getIntDrawable() const {return intDrawable_;}
|
||||||
|
GLXContext getIntCtx() const {return intCtx_;}
|
||||||
|
|
||||||
|
EGLDisplay getEglDpy() const { return eglDisplay_; }
|
||||||
|
EGLContext getEglOrigCtx() const { return eglOriginalContext_; }
|
||||||
|
#endif //!_WIN32
|
||||||
|
|
||||||
|
// Initialize GL dynamic library and function pointers
|
||||||
|
bool init(intptr_t hdc, intptr_t hglrc);
|
||||||
|
|
||||||
|
// Return true if successful, false - if error occurred
|
||||||
|
bool setIntEnv();
|
||||||
|
bool restoreEnv();
|
||||||
|
|
||||||
|
amd::Monitor& getLock() { return lock_; }
|
||||||
|
|
||||||
|
PFN_xxxGetProcAddress GetProcAddress_;
|
||||||
|
|
||||||
|
#define GLPREFIX(rtype, fcn, dclargs) \
|
||||||
|
PFN_##fcn fcn##_;
|
||||||
|
// Declare pointers to GL functions
|
||||||
|
#include "gl_functions.hpp"
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Functions for executing the GL related stuff
|
||||||
|
cl_mem clCreateFromGLBufferAMD(Context& amdContext, cl_mem_flags flags,
|
||||||
|
GLuint bufobj, cl_int* errcode_ret);
|
||||||
|
cl_mem clCreateFromGLTextureAMD(Context& amdContext, cl_mem_flags flags,
|
||||||
|
GLenum target, GLint miplevel, GLuint texture, int* errcode_ret);
|
||||||
|
cl_mem clCreateFromGLRenderbufferAMD(Context& amdContext, cl_mem_flags flags,
|
||||||
|
GLuint renderbuffer, int* errcode_ret);
|
||||||
|
|
||||||
|
bool
|
||||||
|
getCLFormatFromGL(
|
||||||
|
const Context& amdContext,
|
||||||
|
GLint gliInternalFormat,
|
||||||
|
cl_image_format* pclImageFormat,
|
||||||
|
int* piBytesPerPixel,
|
||||||
|
cl_mem_flags flags
|
||||||
|
);
|
||||||
|
|
||||||
|
} //namespace amd
|
||||||
|
|
||||||
|
#endif //CL_GL_AMD_HPP_
|
||||||
@@ -0,0 +1,279 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2008 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "cl_common.hpp"
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <d3d10_1.h>
|
||||||
|
#include "cl_d3d9_amd.hpp"
|
||||||
|
#include "cl_d3d10_amd.hpp"
|
||||||
|
#include "cl_d3d11_amd.hpp"
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#include <icd/loader/icd_dispatch.h>
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
amd::PlatformIDS amd::PlatformID::Platform = //{ NULL };
|
||||||
|
{amd::ICDDispatchedObject::icdVendorDispatch_};
|
||||||
|
|
||||||
|
static cl_int CL_API_CALL icdGetPlatformInfo(cl_platform_id platform, cl_platform_info param_name,
|
||||||
|
size_t param_value_size, void* param_value,
|
||||||
|
size_t* param_value_size_ret) {
|
||||||
|
return NULL ; //clGetPlatformInfo(NULL, param_name, param_value_size, param_value, param_value_size_ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static cl_int CL_API_CALL icdGetDeviceIDs(cl_platform_id platform, cl_device_type device_type,
|
||||||
|
cl_uint num_entries, cl_device_id* devices,
|
||||||
|
cl_uint* num_devices) {
|
||||||
|
return NULL ;//clGetDeviceIDs(NULL, device_type, num_entries, devices, num_devices);
|
||||||
|
}
|
||||||
|
|
||||||
|
static cl_int CL_API_CALL icdGetDeviceInfo(cl_device_id device, cl_device_info param_name,
|
||||||
|
size_t param_value_size, void* param_value,
|
||||||
|
size_t* param_value_size_ret) {
|
||||||
|
if (param_name == CL_DEVICE_PLATFORM) {
|
||||||
|
// Return the ICD platform instead of the default NULL platform.
|
||||||
|
cl_platform_id platform = reinterpret_cast<cl_platform_id>(&amd::PlatformID::Platform);
|
||||||
|
return amd::clGetInfo(platform, param_value_size, param_value, param_value_size_ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL ; //clGetDeviceInfo(device, param_name, param_value_size, param_value, param_value_size_ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
KHRicdVendorDispatch amd::ICDDispatchedObject::icdVendorDispatch_[] = {
|
||||||
|
{NULL /* should not get called */, icdGetPlatformInfo, icdGetDeviceIDs, icdGetDeviceInfo}
|
||||||
|
#if 0
|
||||||
|
clCreateContext, clCreateContextFromType, clRetainContext, clReleaseContext, clGetContextInfo,
|
||||||
|
clCreateCommandQueue, clRetainCommandQueue, clReleaseCommandQueue, clGetCommandQueueInfo,
|
||||||
|
clSetCommandQueueProperty, clCreateBuffer, clCreateImage2D, clCreateImage3D, clRetainMemObject,
|
||||||
|
clReleaseMemObject, clGetSupportedImageFormats, clGetMemObjectInfo, clGetImageInfo,
|
||||||
|
clCreateSampler, clRetainSampler, clReleaseSampler, clGetSamplerInfo,
|
||||||
|
clCreateProgramWithSource, clCreateProgramWithBinary, clRetainProgram, clReleaseProgram,
|
||||||
|
clBuildProgram, clUnloadCompiler, clGetProgramInfo, clGetProgramBuildInfo, clCreateKernel,
|
||||||
|
clCreateKernelsInProgram, clRetainKernel, clReleaseKernel, clSetKernelArg, clGetKernelInfo,
|
||||||
|
clGetKernelWorkGroupInfo, clWaitForEvents, clGetEventInfo, clRetainEvent, clReleaseEvent,
|
||||||
|
clGetEventProfilingInfo, clFlush, clFinish, clEnqueueReadBuffer, clEnqueueWriteBuffer,
|
||||||
|
clEnqueueCopyBuffer, clEnqueueReadImage, clEnqueueWriteImage, clEnqueueCopyImage,
|
||||||
|
clEnqueueCopyImageToBuffer, clEnqueueCopyBufferToImage, clEnqueueMapBuffer, clEnqueueMapImage,
|
||||||
|
clEnqueueUnmapMemObject, clEnqueueNDRangeKernel, clEnqueueTask, clEnqueueNativeKernel,
|
||||||
|
clEnqueueMarker, clEnqueueWaitForEvents, clEnqueueBarrier, clGetExtensionFunctionAddress,
|
||||||
|
clCreateFromGLBuffer, clCreateFromGLTexture2D, clCreateFromGLTexture3D,
|
||||||
|
clCreateFromGLRenderbuffer, clGetGLObjectInfo, clGetGLTextureInfo, clEnqueueAcquireGLObjects,
|
||||||
|
clEnqueueReleaseGLObjects, clGetGLContextInfoKHR,
|
||||||
|
WINDOWS_SWITCH(clGetDeviceIDsFromD3D10KHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D10BufferKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D10Texture2DKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D10Texture3DKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clEnqueueAcquireD3D10ObjectsKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clEnqueueReleaseD3D10ObjectsKHR, NULL), clSetEventCallback, clCreateSubBuffer,
|
||||||
|
clSetMemObjectDestructorCallback, clCreateUserEvent, clSetUserEventStatus,
|
||||||
|
clEnqueueReadBufferRect, clEnqueueWriteBufferRect, clEnqueueCopyBufferRect,
|
||||||
|
NULL, NULL, NULL, clCreateEventFromGLsyncKHR,
|
||||||
|
|
||||||
|
/* OpenCL 1.2*/
|
||||||
|
clCreateSubDevices, clRetainDevice, clReleaseDevice, clCreateImage,
|
||||||
|
clCreateProgramWithBuiltInKernels, clCompileProgram, clLinkProgram, clUnloadPlatformCompiler,
|
||||||
|
clGetKernelArgInfo, clEnqueueFillBuffer, clEnqueueFillImage, clEnqueueMigrateMemObjects,
|
||||||
|
clEnqueueMarkerWithWaitList, clEnqueueBarrierWithWaitList,
|
||||||
|
clGetExtensionFunctionAddressForPlatform, clCreateFromGLTexture,
|
||||||
|
|
||||||
|
WINDOWS_SWITCH(clGetDeviceIDsFromD3D11KHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D11BufferKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D11Texture2DKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromD3D11Texture3DKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clCreateFromDX9MediaSurfaceKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clEnqueueAcquireD3D11ObjectsKHR, NULL),
|
||||||
|
WINDOWS_SWITCH(clEnqueueReleaseD3D11ObjectsKHR, NULL),
|
||||||
|
|
||||||
|
WINDOWS_SWITCH(clGetDeviceIDsFromDX9MediaAdapterKHR,
|
||||||
|
NULL), // KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR
|
||||||
|
// clGetDeviceIDsFromDX9MediaAdapterKHR;
|
||||||
|
WINDOWS_SWITCH(
|
||||||
|
clEnqueueAcquireDX9MediaSurfacesKHR,
|
||||||
|
NULL), // KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR clEnqueueAcquireDX9MediaSurfacesKHR;
|
||||||
|
WINDOWS_SWITCH(
|
||||||
|
clEnqueueReleaseDX9MediaSurfacesKHR,
|
||||||
|
NULL), // KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR clEnqueueReleaseDX9MediaSurfacesKHR;
|
||||||
|
|
||||||
|
NULL,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
|
||||||
|
clCreateCommandQueueWithProperties, clCreatePipe, clGetPipeInfo, clSVMAlloc, clSVMFree,
|
||||||
|
clEnqueueSVMFree, clEnqueueSVMMemcpy, clEnqueueSVMMemFill, clEnqueueSVMMap, clEnqueueSVMUnmap,
|
||||||
|
clCreateSamplerWithProperties, clSetKernelArgSVMPointer, clSetKernelExecInfo,
|
||||||
|
clGetKernelSubGroupInfo,
|
||||||
|
clCloneKernel,
|
||||||
|
clCreateProgramWithIL,
|
||||||
|
clEnqueueSVMMigrateMem,
|
||||||
|
clGetDeviceAndHostTimer,
|
||||||
|
clGetHostTimer,
|
||||||
|
clGetKernelSubGroupInfo,
|
||||||
|
clSetDefaultDeviceCommandQueue,
|
||||||
|
|
||||||
|
clSetProgramReleaseCallback,
|
||||||
|
clSetProgramSpecializationConstant }
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(ATI_OS_WIN)
|
||||||
|
#include <Shlwapi.h>
|
||||||
|
|
||||||
|
#pragma comment(lib, "shlwapi.lib")
|
||||||
|
|
||||||
|
static bool ShouldLoadPlatform() {
|
||||||
|
// Get the OpenCL ICD registry values
|
||||||
|
HKEY platformsKey = NULL;
|
||||||
|
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Khronos\\OpenCL\\Vendors", 0, KEY_READ,
|
||||||
|
&platformsKey) != ERROR_SUCCESS)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
std::vector<std::string> registryValues;
|
||||||
|
DWORD dwIndex = 0;
|
||||||
|
while (true) {
|
||||||
|
char cszLibraryName[1024] = {0};
|
||||||
|
DWORD dwLibraryNameSize = sizeof(cszLibraryName);
|
||||||
|
DWORD dwLibraryNameType = 0;
|
||||||
|
DWORD dwValue = 0;
|
||||||
|
DWORD dwValueSize = sizeof(dwValue);
|
||||||
|
|
||||||
|
if (RegEnumValueA(platformsKey, dwIndex++, cszLibraryName, &dwLibraryNameSize, NULL,
|
||||||
|
&dwLibraryNameType, (LPBYTE)&dwValue, &dwValueSize) != ERROR_SUCCESS)
|
||||||
|
break;
|
||||||
|
// Require that the value be a DWORD and equal zero
|
||||||
|
if (dwLibraryNameType != REG_DWORD || dwValue != 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
registryValues.push_back(cszLibraryName);
|
||||||
|
}
|
||||||
|
RegCloseKey(platformsKey);
|
||||||
|
|
||||||
|
HMODULE hm = NULL;
|
||||||
|
if (!GetModuleHandleExA(
|
||||||
|
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
|
||||||
|
(LPCSTR)&ShouldLoadPlatform, &hm))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
char cszDllPath[1024] = {0};
|
||||||
|
if (!GetModuleFileNameA(hm, cszDllPath, sizeof(cszDllPath))) return true;
|
||||||
|
|
||||||
|
// If we are loaded from the DriverStore, then there should be a registry
|
||||||
|
// value matching our current module absolute path.
|
||||||
|
if (std::find(registryValues.begin(), registryValues.end(), cszDllPath) == registryValues.end())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
LPSTR cszFileName;
|
||||||
|
char buffer[1024] = {0};
|
||||||
|
if (!GetFullPathNameA(cszDllPath, sizeof(buffer), buffer, &cszFileName)) return true;
|
||||||
|
|
||||||
|
// We found an absolute path in the registry that matched this DLL, now
|
||||||
|
// check if there is also an entry with the same filename.
|
||||||
|
if (std::find(registryValues.begin(), registryValues.end(), cszFileName) == registryValues.end())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Lastly, check if there is a DLL with the same name in the System folder.
|
||||||
|
char cszSystemPath[1024] = {0};
|
||||||
|
#if defined(ATI_BITS_32)
|
||||||
|
if (!GetSystemWow64DirectoryA(cszSystemPath, sizeof(cszSystemPath)))
|
||||||
|
#endif // defined(ATI_BITS_32)
|
||||||
|
if (!GetSystemDirectoryA(cszSystemPath, sizeof(cszSystemPath))) return true;
|
||||||
|
|
||||||
|
std::string systemDllPath;
|
||||||
|
systemDllPath.append(cszSystemPath).append("\\").append(cszFileName);
|
||||||
|
if (!PathFileExistsA(systemDllPath.c_str())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we get here, then all 3 conditions are true:
|
||||||
|
// - An entry in the registry with an absolute path matches the current DLL
|
||||||
|
// - An entry in the registry with a relative path matches the current DLL
|
||||||
|
// - A DLL with the same name was found in the system directory
|
||||||
|
//
|
||||||
|
// We should not load this platform!
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
// If there is only one platform, load it.
|
||||||
|
// If there is more than one platform, only load platforms that have visible devices
|
||||||
|
// If all platforms have no devices available, only load the PAL platform
|
||||||
|
static bool ShouldLoadPlatform() {
|
||||||
|
bool shouldLoad = true;
|
||||||
|
|
||||||
|
if (!amd::Runtime::initialized()) {
|
||||||
|
amd::Runtime::init();
|
||||||
|
}
|
||||||
|
const int numDevices = amd::Device::numDevices(CL_DEVICE_TYPE_GPU, false);
|
||||||
|
|
||||||
|
void *otherPlatform = nullptr;
|
||||||
|
if (amd::IS_LEGACY) {
|
||||||
|
otherPlatform = dlopen("libamdocl64.so", RTLD_LAZY);
|
||||||
|
if (otherPlatform != nullptr) { // Present platform exists
|
||||||
|
shouldLoad = numDevices > 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
otherPlatform = dlopen("libamdocl-orca64.so", RTLD_LAZY);
|
||||||
|
if (otherPlatform != nullptr) { // Legacy platform exists
|
||||||
|
// gcc4.8 doesn't support casting void* to a function pointer
|
||||||
|
// Work around this by creating a typedef untill we upgrade the compiler
|
||||||
|
typedef void*(*clGetFunctionAddress_t)(const char *);
|
||||||
|
typedef cl_int(*clIcdGetPlatformIDs_t)(cl_uint, cl_platform_id *, cl_uint *);
|
||||||
|
|
||||||
|
clGetFunctionAddress_t legacyGetFunctionAddress =
|
||||||
|
reinterpret_cast<clGetFunctionAddress_t>(dlsym(otherPlatform, "clGetExtensionFunctionAddress"));
|
||||||
|
clIcdGetPlatformIDs_t legacyGetPlatformIDs =
|
||||||
|
reinterpret_cast<clIcdGetPlatformIDs_t>(legacyGetFunctionAddress("clIcdGetPlatformIDsKHR"));
|
||||||
|
|
||||||
|
cl_uint numLegacyPlatforms = 0;
|
||||||
|
legacyGetPlatformIDs(0, nullptr, &numLegacyPlatforms);
|
||||||
|
|
||||||
|
shouldLoad = (numDevices > 0) || (numLegacyPlatforms == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (otherPlatform != nullptr) {
|
||||||
|
dlclose(otherPlatform);
|
||||||
|
}
|
||||||
|
|
||||||
|
return shouldLoad;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(ATI_OS_WIN)
|
||||||
|
|
||||||
|
CL_API_ENTRY cl_int CL_API_CALL clIcdGetPlatformIDsKHR(cl_uint num_entries,
|
||||||
|
cl_platform_id* platforms,
|
||||||
|
cl_uint* num_platforms) {
|
||||||
|
if (((num_entries > 0 || num_platforms == NULL) && platforms == NULL) ||
|
||||||
|
(num_entries == 0 && platforms != NULL)) {
|
||||||
|
return CL_INVALID_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool shouldLoad = true;
|
||||||
|
|
||||||
|
static std::once_flag initOnce;
|
||||||
|
std::call_once(initOnce, [](){ shouldLoad = ShouldLoadPlatform(); });
|
||||||
|
|
||||||
|
if (!shouldLoad) {
|
||||||
|
*not_null(num_platforms) = 0;
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!amd::Runtime::initialized()) {
|
||||||
|
amd::Runtime::init();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num_platforms != NULL && platforms == NULL) {
|
||||||
|
*num_platforms = 1;
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(platforms != NULL && "check the code above");
|
||||||
|
*platforms = reinterpret_cast<cl_platform_id>(&amd::PlatformID::Platform);
|
||||||
|
|
||||||
|
*not_null(num_platforms) = 1;
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
@@ -0,0 +1,294 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2015 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "cl_common.hpp"
|
||||||
|
#include <CL/cl_ext.h>
|
||||||
|
|
||||||
|
#include "platform/object.hpp"
|
||||||
|
|
||||||
|
#include "cl_lqdflash_amd.h"
|
||||||
|
|
||||||
|
#if (!defined(BUILD_HSA_TARGET) && defined(WITH_HSA_DEVICE) && \
|
||||||
|
defined(WITH_AMDGPU_PRO)) || defined(_WIN32) || defined(WITH_PAL_DEVICE)
|
||||||
|
#define WITH_LIQUID_FLASH 1
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
|
#if defined(WITH_LIQUID_FLASH)
|
||||||
|
#include "lf.h"
|
||||||
|
#include <locale>
|
||||||
|
#include <codecvt>
|
||||||
|
#endif // WITH_LIQUID_FLASH
|
||||||
|
|
||||||
|
namespace amd {
|
||||||
|
|
||||||
|
LiquidFlashFile::~LiquidFlashFile() { close(); }
|
||||||
|
|
||||||
|
bool LiquidFlashFile::open() {
|
||||||
|
#if defined WITH_LIQUID_FLASH
|
||||||
|
lf_status err;
|
||||||
|
lf_file_flags flags = 0;
|
||||||
|
|
||||||
|
switch (flags_) {
|
||||||
|
case CL_FILE_READ_ONLY_AMD:
|
||||||
|
flags = LF_READ;
|
||||||
|
break;
|
||||||
|
case CL_FILE_WRITE_ONLY_AMD:
|
||||||
|
flags = LF_WRITE;
|
||||||
|
break;
|
||||||
|
case CL_FILE_READ_WRITE_AMD:
|
||||||
|
flags = LF_READ | LF_WRITE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef ATI_OS_LINUX
|
||||||
|
assert(sizeof(wchar_t) != sizeof(lf_char));
|
||||||
|
std::string name_char;
|
||||||
|
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> cv;
|
||||||
|
name_char = cv.to_bytes(name_);
|
||||||
|
handle_ = lfOpenFile(name_char.c_str(), flags, &err);
|
||||||
|
#else
|
||||||
|
handle_ = lfOpenFile(name_.c_str(), flags, &err);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (err != lf_success) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lfGetFileBlockSize((lf_file)handle_, &blockSize_) != lf_success) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lfGetFileSize((lf_file)handle_, &fileSize_) != lf_success) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif // WITH_LIQUID_FLASH
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiquidFlashFile::close() {
|
||||||
|
#if defined WITH_LIQUID_FLASH
|
||||||
|
if (handle_ != NULL) {
|
||||||
|
lfReleaseFile((lf_file)handle_);
|
||||||
|
handle_ = NULL;
|
||||||
|
}
|
||||||
|
#endif // WITH_LIQUID_FLASH
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LiquidFlashFile::transferBlock(bool writeBuffer, void* srcDst, uint64_t bufferSize,
|
||||||
|
uint64_t fileOffset, uint64_t bufferOffset,
|
||||||
|
uint64_t size) const {
|
||||||
|
#if defined WITH_LIQUID_FLASH
|
||||||
|
lf_status status;
|
||||||
|
|
||||||
|
lf_region_descriptor region = {fileOffset / blockSize(), bufferOffset / blockSize(),
|
||||||
|
size / blockSize()};
|
||||||
|
if (writeBuffer) {
|
||||||
|
status = lfReadFile(srcDst, bufferSize, (lf_file)handle_, 1, ®ion, NULL);
|
||||||
|
} else {
|
||||||
|
status = lfWriteFile(srcDst, bufferSize, (lf_file)handle_, 1, ®ion, NULL);
|
||||||
|
}
|
||||||
|
if (lf_success == status) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif // WITH_LIQUID_FLASH
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace amd
|
||||||
|
|
||||||
|
/*! \addtogroup API
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* \addtogroup AMD_Extensions
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
RUNTIME_ENTRY_RET(cl_file_amd, clCreateSsgFileObjectAMD,
|
||||||
|
(cl_context context, cl_file_flags_amd flags, const wchar_t* file_name,
|
||||||
|
cl_int* errcode_ret)) {
|
||||||
|
#if defined WITH_LIQUID_FLASH && defined ATI_OS_LINUX
|
||||||
|
if (!is_valid(context)) {
|
||||||
|
*not_null(errcode_ret) = CL_INVALID_CONTEXT;
|
||||||
|
LogWarning("invalid parameter \"context\"");
|
||||||
|
return (cl_file_amd)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<amd::Device*>& devices = as_amd(context)->devices();
|
||||||
|
bool supportPass = false;
|
||||||
|
for (auto& dev : devices) {
|
||||||
|
if (lf_success == lfCheckExtensionSupportForDevice(dev->info().pcieDeviceId_,
|
||||||
|
dev->info().pcieRevisionId_)) {
|
||||||
|
supportPass = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!supportPass) {
|
||||||
|
*not_null(errcode_ret) = CL_INVALID_DEVICE;
|
||||||
|
LogWarning("SSG isn't supported");
|
||||||
|
return (cl_file_amd)0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
amd::LiquidFlashFile* file = new amd::LiquidFlashFile(file_name, flags);
|
||||||
|
|
||||||
|
if (file == NULL) {
|
||||||
|
*not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY;
|
||||||
|
return (cl_file_amd)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file->open()) {
|
||||||
|
*not_null(errcode_ret) = CL_INVALID_VALUE;
|
||||||
|
delete file;
|
||||||
|
return (cl_file_amd)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*not_null(errcode_ret) = CL_SUCCESS;
|
||||||
|
return as_cl(file);
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
|
|
||||||
|
RUNTIME_ENTRY(cl_int, clGetSsgFileObjectInfoAMD,
|
||||||
|
(cl_file_amd file, cl_file_info_amd param_name, size_t param_value_size,
|
||||||
|
void* param_value, size_t* param_value_size_ret)) {
|
||||||
|
if (!is_valid(file)) {
|
||||||
|
return CL_INVALID_FILE_OBJECT_AMD;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (param_name) {
|
||||||
|
case CL_FILE_BLOCK_SIZE_AMD: {
|
||||||
|
cl_uint blockSize = as_amd(file)->blockSize();
|
||||||
|
return amd::clGetInfo(blockSize, param_value_size, param_value, param_value_size_ret);
|
||||||
|
}
|
||||||
|
case CL_FILE_SIZE_AMD: {
|
||||||
|
cl_ulong fileSize = as_amd(file)->fileSize();
|
||||||
|
return amd::clGetInfo(fileSize, param_value_size, param_value, param_value_size_ret);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CL_INVALID_VALUE;
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
|
|
||||||
|
RUNTIME_ENTRY(cl_int, clRetainSsgFileObjectAMD, (cl_file_amd file)) {
|
||||||
|
if (!is_valid(file)) {
|
||||||
|
return CL_INVALID_FILE_OBJECT_AMD;
|
||||||
|
}
|
||||||
|
as_amd(file)->retain();
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
|
|
||||||
|
RUNTIME_ENTRY(cl_int, clReleaseSsgFileObjectAMD, (cl_file_amd file)) {
|
||||||
|
if (!is_valid(file)) {
|
||||||
|
return CL_INVALID_FILE_OBJECT_AMD;
|
||||||
|
}
|
||||||
|
as_amd(file)->release();
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
|
|
||||||
|
static cl_int EnqueueTransferBufferFromSsgFileAMD(
|
||||||
|
cl_bool isWrite, cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write,
|
||||||
|
size_t buffer_offset, size_t cb, cl_file_amd file, size_t file_offset,
|
||||||
|
cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event) {
|
||||||
|
if (!is_valid(command_queue)) {
|
||||||
|
return CL_INVALID_COMMAND_QUEUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_valid(buffer)) {
|
||||||
|
return CL_INVALID_MEM_OBJECT;
|
||||||
|
}
|
||||||
|
amd::Buffer* pBuffer = as_amd(buffer)->asBuffer();
|
||||||
|
if (pBuffer == NULL) {
|
||||||
|
return CL_INVALID_MEM_OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pBuffer->getMemFlags() & (CL_MEM_HOST_READ_ONLY | CL_MEM_HOST_NO_ACCESS)) {
|
||||||
|
return CL_INVALID_OPERATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
amd::HostQueue* queue = as_amd(command_queue)->asHostQueue();
|
||||||
|
if (NULL == queue) {
|
||||||
|
return CL_INVALID_COMMAND_QUEUE;
|
||||||
|
}
|
||||||
|
amd::HostQueue& hostQueue = *queue;
|
||||||
|
|
||||||
|
if (hostQueue.context() != pBuffer->getContext()) {
|
||||||
|
return CL_INVALID_CONTEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_valid(file)) {
|
||||||
|
return CL_INVALID_FILE_OBJECT_AMD;
|
||||||
|
}
|
||||||
|
|
||||||
|
amd::LiquidFlashFile* amdFile = as_amd(file);
|
||||||
|
amd::Coord3D bufferOffset(buffer_offset, 0, 0);
|
||||||
|
amd::Coord3D bufferSize(cb, 1, 1);
|
||||||
|
|
||||||
|
if ((!pBuffer->validateRegion(bufferOffset, bufferSize)) ||
|
||||||
|
// LF library supports aligned sizes only
|
||||||
|
((buffer_offset % amdFile->blockSize()) != 0) || ((cb % amdFile->blockSize()) != 0) ||
|
||||||
|
((file_offset % amdFile->blockSize()) != 0)) {
|
||||||
|
return CL_INVALID_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
amd::Command::EventWaitList eventWaitList;
|
||||||
|
cl_int err = amd::clSetEventWaitList(eventWaitList, hostQueue, num_events_in_wait_list,
|
||||||
|
event_wait_list);
|
||||||
|
if (err != CL_SUCCESS) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
amd::TransferBufferFileCommand* command;
|
||||||
|
command = new amd::TransferBufferFileCommand(
|
||||||
|
isWrite ? CL_COMMAND_READ_SSG_FILE_AMD : CL_COMMAND_WRITE_SSG_FILE_AMD, hostQueue,
|
||||||
|
eventWaitList, *pBuffer, bufferOffset, bufferSize, amdFile, file_offset);
|
||||||
|
|
||||||
|
if (command == NULL) {
|
||||||
|
return CL_OUT_OF_HOST_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we have memory for the command execution
|
||||||
|
if (!command->validateMemory()) {
|
||||||
|
delete command;
|
||||||
|
return CL_MEM_OBJECT_ALLOCATION_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
command->enqueue();
|
||||||
|
if (blocking_write) {
|
||||||
|
command->awaitCompletion();
|
||||||
|
}
|
||||||
|
|
||||||
|
*not_null(event) = as_cl(&command->event());
|
||||||
|
if (event == NULL) {
|
||||||
|
command->release();
|
||||||
|
}
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
RUNTIME_ENTRY(cl_int, clEnqueueReadSsgFileAMD,
|
||||||
|
(cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write,
|
||||||
|
size_t buffer_offset, size_t cb, cl_file_amd file, size_t file_offset,
|
||||||
|
cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event)) {
|
||||||
|
return EnqueueTransferBufferFromSsgFileAMD(CL_TRUE, command_queue, buffer, blocking_write,
|
||||||
|
buffer_offset, cb, file, file_offset,
|
||||||
|
num_events_in_wait_list, event_wait_list, event);
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
|
|
||||||
|
RUNTIME_ENTRY(cl_int, clEnqueueWriteSsgFileAMD,
|
||||||
|
(cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write,
|
||||||
|
size_t buffer_offset, size_t cb, cl_file_amd file, size_t file_offset,
|
||||||
|
cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event)) {
|
||||||
|
return EnqueueTransferBufferFromSsgFileAMD(CL_FALSE, command_queue, buffer, blocking_write,
|
||||||
|
buffer_offset, cb, file, file_offset,
|
||||||
|
num_events_in_wait_list, event_wait_list, event);
|
||||||
|
}
|
||||||
|
RUNTIME_EXIT
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2015 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef __CL_LQDFLASH_AMD_H
|
||||||
|
#define __CL_LQDFLASH_AMD_H
|
||||||
|
|
||||||
|
#include "CL/cl_ext.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_file_amd CL_API_CALL
|
||||||
|
clCreateSsgFileObjectAMD(cl_context context, cl_file_flags_amd flags, const wchar_t* file_name,
|
||||||
|
cl_int* errcode_ret) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clGetSsgFileObjectInfoAMD(
|
||||||
|
cl_file_amd file, cl_file_info_amd param_name, size_t param_value_size, void* param_value,
|
||||||
|
size_t* param_value_size_ret) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clRetainSsgFileObjectAMD(cl_file_amd file)
|
||||||
|
CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clReleaseSsgFileObjectAMD(cl_file_amd file)
|
||||||
|
CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueReadSsgFileAMD(
|
||||||
|
cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t buffer_offset,
|
||||||
|
size_t cb, cl_file_amd file, size_t file_offset, cl_uint num_events_in_wait_list,
|
||||||
|
const cl_event* event_wait_list, cl_event* event) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueWriteSsgFileAMD(
|
||||||
|
cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t buffer_offset,
|
||||||
|
size_t cb, cl_file_amd file, size_t file_offset, cl_uint num_events_in_wait_list,
|
||||||
|
const cl_event* event_wait_list, cl_event* event) CL_EXT_SUFFIX__VERSION_1_2;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /*extern "C"*/
|
||||||
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
|
#endif
|
||||||
Executable
+610
@@ -0,0 +1,610 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# Copyright (c) 2019 - present Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
import os, sys, re
|
||||||
|
|
||||||
|
PROF_HEADER = "hip_prof_str.h"
|
||||||
|
OUTPUT = PROF_HEADER
|
||||||
|
REC_MAX_LEN = 1024
|
||||||
|
|
||||||
|
# Recursive sources processing
|
||||||
|
recursive_mode = 0
|
||||||
|
# HIP_INIT_API macro patching
|
||||||
|
hip_patch_mode = 0
|
||||||
|
# API matching types check
|
||||||
|
types_check_mode = 0
|
||||||
|
# Private API check
|
||||||
|
private_check_mode = 0
|
||||||
|
|
||||||
|
# Messages and errors controll
|
||||||
|
verbose = 0
|
||||||
|
errexit = 0
|
||||||
|
inp_file = 'none'
|
||||||
|
line_num = -1
|
||||||
|
|
||||||
|
# Verbose message
|
||||||
|
def message(msg):
|
||||||
|
if verbose: sys.stdout.write(msg + '\n')
|
||||||
|
|
||||||
|
# Fatal error termination
|
||||||
|
def error(msg):
|
||||||
|
if line_num != -1:
|
||||||
|
msg += ", file '" + inp_file + "', line (" + str(line_num) + ")"
|
||||||
|
if errexit:
|
||||||
|
msg = " Error: " + msg
|
||||||
|
else:
|
||||||
|
msg = " Warning: " + msg
|
||||||
|
|
||||||
|
sys.stdout.write(msg + '\n')
|
||||||
|
sys.stderr.write(sys.argv[0] + msg +'\n')
|
||||||
|
|
||||||
|
def fatal(msg):
|
||||||
|
error(msg)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Normalizing API name
|
||||||
|
def filtr_api_name(name):
|
||||||
|
name = re.sub(r'\s*$', r'', name);
|
||||||
|
return name
|
||||||
|
|
||||||
|
def filtr_api_decl(record):
|
||||||
|
record = re.sub("\s__dparm\([^\)]*\)", '', record);
|
||||||
|
record = re.sub("\(void\*\)", '', record);
|
||||||
|
return record
|
||||||
|
|
||||||
|
# Normalizing API arguments
|
||||||
|
def filtr_api_args(args_str):
|
||||||
|
args_str = re.sub(r'^\s*', r'', args_str);
|
||||||
|
args_str = re.sub(r'\s*$', r'', args_str);
|
||||||
|
args_str = re.sub(r'\s*,\s*', r',', args_str);
|
||||||
|
args_str = re.sub(r'\s+', r' ', args_str);
|
||||||
|
#args_str = re.sub(r'void \*', r'void* ', args_str);
|
||||||
|
args_str = re.sub(r'\s*(\*+)\s*', r'\1 ', args_str);
|
||||||
|
args_str = re.sub(r'(enum|struct) ', '', args_str);
|
||||||
|
return args_str
|
||||||
|
|
||||||
|
# Normalizing types
|
||||||
|
def norm_api_types(type_str):
|
||||||
|
type_str = re.sub(r'uint32_t', r'unsigned int', type_str)
|
||||||
|
type_str = re.sub(r'^unsigned$', r'unsigned int', type_str)
|
||||||
|
return type_str
|
||||||
|
|
||||||
|
# Creating a list of arguments [(type, name), ...]
|
||||||
|
def list_api_args(args_str):
|
||||||
|
args_str = filtr_api_args(args_str)
|
||||||
|
args_list = []
|
||||||
|
if args_str != '':
|
||||||
|
for arg_pair in args_str.split(','):
|
||||||
|
if arg_pair == 'void': continue
|
||||||
|
arg_pair = re.sub(r'\s*=\s*\S+$','', arg_pair);
|
||||||
|
m = re.match("^(.*)\s(\S+)$", arg_pair);
|
||||||
|
if m:
|
||||||
|
arg_type = norm_api_types(m.group(1))
|
||||||
|
arg_name = m.group(2)
|
||||||
|
args_list.append((arg_type, arg_name))
|
||||||
|
else:
|
||||||
|
fatal("bad args: args_str: '" + args_str + "' arg_pair: '" + arg_pair + "'")
|
||||||
|
return args_list;
|
||||||
|
|
||||||
|
# Creating arguments string "type0, type1, ..."
|
||||||
|
def filtr_api_types(args_str):
|
||||||
|
args_list = list_api_args(args_str)
|
||||||
|
types_str = ''
|
||||||
|
for arg_tuple in args_list:
|
||||||
|
types_str += arg_tuple[0] + ', '
|
||||||
|
return types_str
|
||||||
|
|
||||||
|
# Creating options list [opt0, opt1, ...]
|
||||||
|
def filtr_api_opts(args_str):
|
||||||
|
args_list = list_api_args(args_str)
|
||||||
|
opts_list = []
|
||||||
|
for arg_tuple in args_list:
|
||||||
|
opts_list.append(arg_tuple[1])
|
||||||
|
return opts_list
|
||||||
|
#############################################################
|
||||||
|
# Parsing API header
|
||||||
|
# hipError_t hipSetupArgument(const void* arg, size_t size, size_t offset);
|
||||||
|
def parse_api(inp_file_p, out):
|
||||||
|
global inp_file
|
||||||
|
global line_num
|
||||||
|
inp_file = inp_file_p
|
||||||
|
|
||||||
|
beg_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(");
|
||||||
|
api_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(([^\)]*)\)");
|
||||||
|
end_pattern = re.compile("Texture");
|
||||||
|
hidden_pattern = re.compile(r'__attribute__\(\(visibility\("hidden"\)\)\)')
|
||||||
|
nms_open_pattern = re.compile(r'namespace hip_impl {')
|
||||||
|
nms_close_pattern = re.compile(r'}')
|
||||||
|
|
||||||
|
inp = open(inp_file, 'r')
|
||||||
|
|
||||||
|
found = 0
|
||||||
|
hidden = 0
|
||||||
|
nms_level = 0;
|
||||||
|
record = ""
|
||||||
|
line_num = -1
|
||||||
|
|
||||||
|
for line in inp.readlines():
|
||||||
|
record += re.sub(r'^\s+', r' ', line[:-1])
|
||||||
|
line_num += 1
|
||||||
|
|
||||||
|
if len(record) > REC_MAX_LEN:
|
||||||
|
fatal("bad record \"" + record + "\"")
|
||||||
|
|
||||||
|
m = beg_pattern.match(line)
|
||||||
|
if m:
|
||||||
|
name = m.group(2)
|
||||||
|
if hidden != 0:
|
||||||
|
message("api: " + name + " - hidden")
|
||||||
|
elif nms_level != 0:
|
||||||
|
message("api: " + name + " - hip_impl")
|
||||||
|
else:
|
||||||
|
message("api: " + name)
|
||||||
|
found = 1
|
||||||
|
|
||||||
|
if found != 0:
|
||||||
|
record = re.sub("\s__dparm\([^\)]*\)", '', record);
|
||||||
|
m = api_pattern.match(record)
|
||||||
|
if m:
|
||||||
|
found = 0
|
||||||
|
if end_pattern.search(record): break
|
||||||
|
api_name = filtr_api_name(m.group(2))
|
||||||
|
api_args = m.group(3)
|
||||||
|
if not api_name in out:
|
||||||
|
out[api_name] = api_args
|
||||||
|
else: continue
|
||||||
|
|
||||||
|
hidden = 0
|
||||||
|
if hidden_pattern.match(line): hidden = 1
|
||||||
|
|
||||||
|
if nms_open_pattern.match(line): nms_level += 1
|
||||||
|
if (nms_level > 0) and nms_close_pattern.match(line): nms_level -= 1
|
||||||
|
if nms_level < 0:
|
||||||
|
fatal("nms level < 0")
|
||||||
|
|
||||||
|
record = ""
|
||||||
|
|
||||||
|
inp.close()
|
||||||
|
line_num = -1
|
||||||
|
#############################################################
|
||||||
|
# Parsing API implementation
|
||||||
|
# hipError_t hipSetupArgument(const void* arg, size_t size, size_t offset) {
|
||||||
|
# HIP_INIT_API(hipSetupArgument, arg, size, offset);
|
||||||
|
# inp_file - input implementation source file
|
||||||
|
# api_map - input public API map [<api name>] => <api args>
|
||||||
|
# out - output map [<api name>] => [opt0, opt1, ...]
|
||||||
|
def parse_content(inp_file_p, api_map, out):
|
||||||
|
global hip_patch_mode
|
||||||
|
global types_check_mode
|
||||||
|
global private_check_mode
|
||||||
|
global inp_file
|
||||||
|
global line_num
|
||||||
|
inp_file = inp_file_p
|
||||||
|
|
||||||
|
# API method begin pattern
|
||||||
|
beg_pattern = re.compile("^(hipError_t|const char\s*\*)\s+[^\(]+\(");
|
||||||
|
# API declaration pattern
|
||||||
|
decl_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(([^\)]*)\)\s*;");
|
||||||
|
# API definition pattern
|
||||||
|
api_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(([^\)]*)\)\s*{");
|
||||||
|
# API init macro pattern
|
||||||
|
init_pattern = re.compile("(^\s*HIP_INIT_API\s*)\((([^,]+)(,.*|)|)(\);|,)\s*$");
|
||||||
|
|
||||||
|
# Open input file
|
||||||
|
inp = open(inp_file, 'r')
|
||||||
|
|
||||||
|
# API name
|
||||||
|
api_name = ""
|
||||||
|
# Valid public API found flag
|
||||||
|
api_valid = 0
|
||||||
|
|
||||||
|
# Input file patched content
|
||||||
|
content = ''
|
||||||
|
# Sub content for found API defiition
|
||||||
|
sub_content = ''
|
||||||
|
# Current record, accumulating several API definition related lines
|
||||||
|
record = ''
|
||||||
|
# Current input file line number
|
||||||
|
line_num = -1
|
||||||
|
# API beginning found flag
|
||||||
|
found = 0
|
||||||
|
|
||||||
|
# Reading input file
|
||||||
|
for line in inp.readlines():
|
||||||
|
# Accumulating record
|
||||||
|
record += re.sub(r'^\s+', r' ', line[:-1])
|
||||||
|
line_num += 1
|
||||||
|
|
||||||
|
if len(record) > REC_MAX_LEN:
|
||||||
|
fatal("bad record \"" + record + "\"")
|
||||||
|
break;
|
||||||
|
|
||||||
|
# Looking for API begin
|
||||||
|
if found == 0:
|
||||||
|
if beg_pattern.match(record):
|
||||||
|
found = 1
|
||||||
|
record = filtr_api_decl(record)
|
||||||
|
|
||||||
|
# Matching API declaration
|
||||||
|
if found == 1:
|
||||||
|
if decl_pattern.match(record):
|
||||||
|
found = 0
|
||||||
|
|
||||||
|
# Matching API definition
|
||||||
|
if found == 1:
|
||||||
|
m = api_pattern.match(record)
|
||||||
|
# Checking if complete API matched
|
||||||
|
if m:
|
||||||
|
found = 2
|
||||||
|
api_name = filtr_api_name(m.group(2))
|
||||||
|
# Checking if API name is in the API map
|
||||||
|
if (private_check_mode == 0) or (api_name in api_map):
|
||||||
|
if not api_name in api_map: api_map[api_name] = ''
|
||||||
|
# Getting API arguments
|
||||||
|
api_args = m.group(3)
|
||||||
|
# Getting etalon arguments from the API map
|
||||||
|
eta_args = api_map[api_name]
|
||||||
|
if eta_args == '':
|
||||||
|
eta_args = api_args
|
||||||
|
api_map[api_name] = eta_args
|
||||||
|
# Normalizing API arguments
|
||||||
|
api_types = filtr_api_types(api_args)
|
||||||
|
# Normalizing etalon arguments
|
||||||
|
eta_types = filtr_api_types(eta_args)
|
||||||
|
if (api_types == eta_types) or ((types_check_mode == 0) and (not api_name in out)):
|
||||||
|
# API is already found and not is mismatched
|
||||||
|
if (api_name in out):
|
||||||
|
fatal("API redefined \"" + api_name + "\", record \"" + record + "\"")
|
||||||
|
# Set valid public API found flag
|
||||||
|
api_valid = 1
|
||||||
|
# Set output API map with API arguments list
|
||||||
|
out[api_name] = filtr_api_opts(api_args)
|
||||||
|
# Register missmatched API methods
|
||||||
|
else:
|
||||||
|
# Warning about mismatched API, possible non public overloaded version
|
||||||
|
api_diff = '\t\t' + inp_file + " line(" + str(line_num) + ")\n\t\tapi: " + api_types + "\n\t\teta: " + eta_types
|
||||||
|
message("\t" + api_name + ' args mismatch:\n' + api_diff + '\n')
|
||||||
|
|
||||||
|
if hip_patch_mode != 0:
|
||||||
|
# Looking for INIT macro
|
||||||
|
m = init_pattern.match(line)
|
||||||
|
if m:
|
||||||
|
if api_valid == 0: api_name = 'NONE'
|
||||||
|
|
||||||
|
if api_name == m.group(3):
|
||||||
|
if hip_patch_mode == 1: hip_patch_mode = 0
|
||||||
|
else: fatal("patching failed")
|
||||||
|
else:
|
||||||
|
hip_patch_mode = 2
|
||||||
|
init_args = m.group(2)
|
||||||
|
if init_args != '': init_args = ', ' + init_args
|
||||||
|
line = m.group(1) + '(' + api_name + init_args + m.group(5) + '\n'
|
||||||
|
non_public_api = 0
|
||||||
|
|
||||||
|
# API found action
|
||||||
|
if found == 2:
|
||||||
|
# Looking for INIT macro
|
||||||
|
m = init_pattern.match(line)
|
||||||
|
if m:
|
||||||
|
found = 0
|
||||||
|
non_public_api = 0
|
||||||
|
|
||||||
|
if api_valid == 1:
|
||||||
|
api_valid = 0
|
||||||
|
message("\t" + api_name)
|
||||||
|
else:
|
||||||
|
non_public_api = 1
|
||||||
|
|
||||||
|
if non_public_api == 1:
|
||||||
|
# Registering dummy API for non public API if the name in INIT is not NONE
|
||||||
|
init_name = m.group(3)
|
||||||
|
# Ignore if it is initialized as NONE
|
||||||
|
if init_name != 'NONE':
|
||||||
|
# Check if init name matching API name
|
||||||
|
if init_name != api_name:
|
||||||
|
fatal("init name mismatch: '" + init_name + "' <> '" + api_name + "'")
|
||||||
|
# If init name is not in public API map then it is private API
|
||||||
|
# else it was not identified and will be checked on finish
|
||||||
|
if not init_name in api_map:
|
||||||
|
if init_name in out:
|
||||||
|
fatal("API reinit \"" + api_name + "\", record \"" + record + "\"")
|
||||||
|
out[init_name] = []
|
||||||
|
elif re.search('}', line):
|
||||||
|
found = 0
|
||||||
|
# Expect INIT macro for valid public API
|
||||||
|
# Removing and registering non-conformant APIs with missing HIP_INIT macro
|
||||||
|
if api_valid == 1:
|
||||||
|
api_valid = 0
|
||||||
|
if api_name in out:
|
||||||
|
del out[api_name]
|
||||||
|
del api_map[api_name]
|
||||||
|
# Registering non-conformant APIs
|
||||||
|
out['.' + api_name] = 1
|
||||||
|
else:
|
||||||
|
fatal("API is not in out \"" + api_name + "\", record \"" + record + "\"")
|
||||||
|
|
||||||
|
if found != 1: record = ""
|
||||||
|
content += line
|
||||||
|
|
||||||
|
inp.close()
|
||||||
|
line_num = -1
|
||||||
|
|
||||||
|
if len(out) != 0:
|
||||||
|
return content
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
# src path walk
|
||||||
|
def parse_src(api_map, src_path, src_patt, out):
|
||||||
|
global recursive_mode
|
||||||
|
|
||||||
|
pattern = re.compile(src_patt)
|
||||||
|
src_path = re.sub(r'\s', '', src_path)
|
||||||
|
for src_dir in src_path.split(':'):
|
||||||
|
message("Parsing " + src_dir + " for '" + src_patt + "'")
|
||||||
|
for root, dirs, files in os.walk(src_dir):
|
||||||
|
for fnm in files:
|
||||||
|
if pattern.search(fnm):
|
||||||
|
file = root + '/' + fnm
|
||||||
|
message(file)
|
||||||
|
content = parse_content(file, api_map, out);
|
||||||
|
if (hip_patch_mode != 0) and (content != ''):
|
||||||
|
f = open(file, 'w')
|
||||||
|
f.write(content)
|
||||||
|
f.close()
|
||||||
|
if recursive_mode == 0: break
|
||||||
|
#############################################################
|
||||||
|
# Generating profiling primitives header
|
||||||
|
# api_map - public API map [<api name>] => [(type, name), ...]
|
||||||
|
# opts_map - opts map [<api name>] => [opt0, opt1, ...]
|
||||||
|
def generate_prof_header(f, api_map, opts_map):
|
||||||
|
# Private API list
|
||||||
|
priv_lst = []
|
||||||
|
|
||||||
|
f.write('// automatically generated sources\n')
|
||||||
|
f.write('#ifndef _HIP_PROF_STR_H\n');
|
||||||
|
f.write('#define _HIP_PROF_STR_H\n');
|
||||||
|
|
||||||
|
# Generating dummy macro for non-public API
|
||||||
|
f.write('\n// Dummy API primitives\n')
|
||||||
|
f.write('#define INIT_NONE_CB_ARGS_DATA(cb_data) {};\n')
|
||||||
|
for name in opts_map:
|
||||||
|
if not name in api_map:
|
||||||
|
opts_lst = opts_map[name]
|
||||||
|
if len(opts_lst) != 0:
|
||||||
|
fatal("bad dummy API \"" + name + "\", args: " + str(opts_lst))
|
||||||
|
f.write('#define INIT_'+ name + '_CB_ARGS_DATA(cb_data) {};\n')
|
||||||
|
priv_lst.append(name)
|
||||||
|
|
||||||
|
for name in priv_lst:
|
||||||
|
message("Private: " + name)
|
||||||
|
|
||||||
|
# Generating the callbacks ID enumaration
|
||||||
|
f.write('\n// HIP API callbacks ID enumaration\n')
|
||||||
|
f.write('enum hip_api_id_t {\n')
|
||||||
|
cb_id = 0
|
||||||
|
for name in api_map.keys():
|
||||||
|
f.write(' HIP_API_ID_' + name + ' = ' + str(cb_id) + ',\n')
|
||||||
|
cb_id += 1
|
||||||
|
f.write(' HIP_API_ID_NUMBER = ' + str(cb_id) + ',\n')
|
||||||
|
f.write('\n')
|
||||||
|
f.write(' HIP_API_ID_NONE = HIP_API_ID_NUMBER,\n')
|
||||||
|
for name in priv_lst:
|
||||||
|
f.write(' HIP_API_ID_' + name + ' = HIP_API_ID_NUMBER,\n')
|
||||||
|
f.write('};\n')
|
||||||
|
|
||||||
|
# Generating the callbacks ID enumaration
|
||||||
|
f.write('\n// Return HIP API string\n')
|
||||||
|
f.write('inline const char* hip_api_name(const uint32_t id) {\n')
|
||||||
|
f.write(' switch(id) {\n')
|
||||||
|
for name in api_map.keys():
|
||||||
|
f.write(' case HIP_API_ID_' + name + ': return "' + name + '";\n')
|
||||||
|
f.write(' };\n')
|
||||||
|
f.write(' return "unknown";\n')
|
||||||
|
f.write('};\n')
|
||||||
|
|
||||||
|
# Generating the callbacks data structure
|
||||||
|
f.write('\n// HIP API callbacks data structure\n')
|
||||||
|
f.write(
|
||||||
|
'struct hip_api_data_t {\n' +
|
||||||
|
' uint64_t correlation_id;\n' +
|
||||||
|
' uint32_t phase;\n' +
|
||||||
|
' union {\n'
|
||||||
|
)
|
||||||
|
for name, args in api_map.items():
|
||||||
|
if len(args) != 0:
|
||||||
|
f.write(' struct {\n')
|
||||||
|
for arg_tuple in args:
|
||||||
|
if arg_tuple[0] == "hipLimit_t":
|
||||||
|
f.write(' enum ' + arg_tuple[0] + ' ' + arg_tuple[1] + ';\n')
|
||||||
|
else:
|
||||||
|
f.write(' ' + arg_tuple[0] + ' ' + arg_tuple[1] + ';\n')
|
||||||
|
f.write(' } ' + name + ';\n')
|
||||||
|
f.write(
|
||||||
|
' } args;\n' +
|
||||||
|
'};\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Generating the callbacks args data filling macros
|
||||||
|
f.write('\n// HIP API callbacks args data filling macros\n')
|
||||||
|
for name, args in api_map.items():
|
||||||
|
f.write('// ' + name + str(args) + '\n')
|
||||||
|
f.write('#define INIT_' + name + '_CB_ARGS_DATA(cb_data) { \\\n')
|
||||||
|
if name in opts_map:
|
||||||
|
opts_list = opts_map[name]
|
||||||
|
if len(args) != len(opts_list):
|
||||||
|
fatal("\"" + name + "\" API args and opts mismatch, args: " + str(args) + ", opts: " + str(opts_list))
|
||||||
|
# API args iterating:
|
||||||
|
# type is args[<ind>][0]
|
||||||
|
# name is args[<ind>][1]
|
||||||
|
for ind in range(0, len(args)):
|
||||||
|
arg_tuple = args[ind]
|
||||||
|
arg_type = arg_tuple[0]
|
||||||
|
fld_name = arg_tuple[1]
|
||||||
|
arg_name = opts_list[ind]
|
||||||
|
f.write(' cb_data.args.' + name + '.' + fld_name + ' = (' + arg_type + ')' + arg_name + '; \\\n')
|
||||||
|
f.write('};\n')
|
||||||
|
f.write('#define INIT_CB_ARGS_DATA(cb_id, cb_data) INIT_##cb_id##_CB_ARGS_DATA(cb_data)\n')
|
||||||
|
|
||||||
|
# Generating the method for the API string, name and parameters
|
||||||
|
if False:
|
||||||
|
f.write('\n')
|
||||||
|
f.write('#if 0\n')
|
||||||
|
f.write('#include <sstream>\n');
|
||||||
|
f.write('#include <string>\n');
|
||||||
|
f.write('// HIP API string method, method name and parameters\n')
|
||||||
|
f.write('const char* hipApiString(hip_api_id_t id, const hip_api_data_t* data) {\n')
|
||||||
|
f.write(' std::ostringstream oss;\n')
|
||||||
|
f.write(' switch (id) {\n')
|
||||||
|
for name, args in api_map.items():
|
||||||
|
f.write(' case HIP_API_ID_' + name + ':\n')
|
||||||
|
f.write(' oss << "' + name + '("')
|
||||||
|
for ind in range(0, len(args)):
|
||||||
|
arg_tuple = args[ind]
|
||||||
|
arg_name = arg_tuple[1]
|
||||||
|
if ind != 0: f.write(' << ","')
|
||||||
|
f.write('\n << " ' + arg_name + '=" << data->args.' + name + '.' + arg_name)
|
||||||
|
f.write('\n << ")";\n')
|
||||||
|
f.write(' break;\n')
|
||||||
|
f.write(' default: oss << "unknown";\n')
|
||||||
|
f.write(' };\n')
|
||||||
|
f.write(' return strdup(oss.str().c_str());\n')
|
||||||
|
f.write('};\n')
|
||||||
|
f.write('#endif\n')
|
||||||
|
|
||||||
|
f.write('#endif // _HIP_PROF_STR_H\n');
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# main
|
||||||
|
while len(sys.argv) > 1:
|
||||||
|
if not re.match(r'-', sys.argv[1]): break
|
||||||
|
|
||||||
|
if (sys.argv[1] == '-v'):
|
||||||
|
verbose = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
if (sys.argv[1] == '-r'):
|
||||||
|
recursive_mode = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
if (sys.argv[1] == '-t'):
|
||||||
|
types_check_mode = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
if (sys.argv[1] == '--priv'):
|
||||||
|
private_check_mode = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
if (sys.argv[1] == '-e'):
|
||||||
|
errexit = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
if (sys.argv[1] == '-p'):
|
||||||
|
hip_patch_mode = 1
|
||||||
|
sys.argv.pop(1)
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
if (len(sys.argv) < 3):
|
||||||
|
fatal ("Usage: " + sys.argv[0] + " [-v] <input HIP API .h file> <patched srcs path> [<output>]\n" +
|
||||||
|
" -v - verbose messages\n" +
|
||||||
|
" -r - process source directory recursively\n" +
|
||||||
|
" -t - API types matching check\n" +
|
||||||
|
" --priv - private API check\n" +
|
||||||
|
" -e - on error exit mode\n" +
|
||||||
|
" -p - HIP_INIT_API macro patching mode\n" +
|
||||||
|
"\n" +
|
||||||
|
" Example:\n" +
|
||||||
|
" $ " + sys.argv[0] + " -v -p -t --priv ./api/hip/include/hip/hcc_detail/hip_runtime_api.h ./api/hip ./api/hip/include/hip/hcc_detail/hip_prof_str.h");
|
||||||
|
|
||||||
|
# API header file given as an argument
|
||||||
|
src_pat = "\.cpp$"
|
||||||
|
api_hfile = sys.argv[1]
|
||||||
|
if not os.path.isfile(api_hfile):
|
||||||
|
fatal("input file '" + api_hfile + "' not found")
|
||||||
|
|
||||||
|
# Srcs directory given as an argument
|
||||||
|
src_dir = sys.argv[2]
|
||||||
|
if not os.path.isdir(src_dir):
|
||||||
|
fatal("src directory " + src_dir + "' not found")
|
||||||
|
|
||||||
|
if len(sys.argv) > 3: OUTPUT = sys.argv[3]
|
||||||
|
|
||||||
|
# API declaration map
|
||||||
|
api_map = {
|
||||||
|
'hipSetupArgument': '',
|
||||||
|
'hipMalloc3DArray': '',
|
||||||
|
'hipFuncGetAttribute': '',
|
||||||
|
'hipMemset3DAsync': '',
|
||||||
|
'hipKernelNameRef': '',
|
||||||
|
'hipStreamGetPriority': '',
|
||||||
|
'hipLaunchByPtr': '',
|
||||||
|
'hipFreeHost': '',
|
||||||
|
'hipGetErrorName': '',
|
||||||
|
'hipMemcpy3DAsync': '',
|
||||||
|
'hipMemcpyParam2DAsync': '',
|
||||||
|
'hipArray3DCreate': '',
|
||||||
|
'hipOccupancyMaxActiveBlocksPerMultiprocessorWithFlags': '',
|
||||||
|
'hipOccupancyMaxPotentialBlockSize': '',
|
||||||
|
'hipMallocManaged': '',
|
||||||
|
'hipOccupancyMaxActiveBlocksPerMultiprocessor': '',
|
||||||
|
'hipGetErrorString': '',
|
||||||
|
'hipMallocHost': '',
|
||||||
|
'hipModuleLoadDataEx': '',
|
||||||
|
'hipGetDeviceProperties': '',
|
||||||
|
'hipConfigureCall': '',
|
||||||
|
}
|
||||||
|
# API options map
|
||||||
|
opts_map = {}
|
||||||
|
|
||||||
|
# Parsing API header
|
||||||
|
parse_api(api_hfile, api_map)
|
||||||
|
|
||||||
|
# Parsing sources
|
||||||
|
parse_src(api_map, src_dir, src_pat, opts_map)
|
||||||
|
|
||||||
|
# Checking for non-conformant APIs with missing HIP_INIT macro
|
||||||
|
for name in list(opts_map.keys()):
|
||||||
|
m = re.match(r'\.(\S*)', name)
|
||||||
|
if m:
|
||||||
|
message("Init missing: " + m.group(1))
|
||||||
|
del opts_map[name]
|
||||||
|
|
||||||
|
# Converting api map to map of lists
|
||||||
|
# Checking for not found APIs
|
||||||
|
not_found = 0
|
||||||
|
if len(opts_map) != 0:
|
||||||
|
for name in api_map.keys():
|
||||||
|
args_str = api_map[name];
|
||||||
|
api_map[name] = list_api_args(args_str)
|
||||||
|
if not name in opts_map:
|
||||||
|
error("implementation not found: " + name)
|
||||||
|
not_found += 1
|
||||||
|
if not_found != 0:
|
||||||
|
error(str(not_found) + " API calls missing in interception layer")
|
||||||
|
|
||||||
|
# Generating output header file
|
||||||
|
with open(OUTPUT, 'w') as f:
|
||||||
|
generate_prof_header(f, api_map, opts_map)
|
||||||
|
|
||||||
|
# Successfull exit
|
||||||
|
sys.exit(0)
|
||||||
Reference in New Issue
Block a user