23f12d5ea4
SWDEV-130722 - Channel order in an interop buffer from OpenCL to OpenGL is flipped on Vega Follow up for CL#1456230. Adding a new table that maps the OGL surface formats (hData.format) returned by wglResourceAttachAMD function into the OCL image format. The hData.format is the internal image surface format created for an interop by OGL and should be used by OCL for cl_gl interop. ReviewBoardURL = http://ocltc.amd.com/reviews/r/13421/ Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.hpp#20 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevicegl.cpp#6 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#36 edit
785 lines
56 KiB
C++
785 lines
56 KiB
C++
#include "platform/context.hpp"
|
|
#include "device/device.hpp"
|
|
#include "platform/runtime.hpp"
|
|
#include "platform/agent.hpp"
|
|
#ifdef _WIN32
|
|
#include <d3d10_1.h>
|
|
#include "CL/cl_d3d10.h"
|
|
#include "CL/cl_d3d11.h"
|
|
#endif // _WIN32
|
|
|
|
#include <GL/gl.h>
|
|
#include <GL/glext.h>
|
|
#include "CL/cl_gl.h"
|
|
#include "paldevice.hpp"
|
|
//#include "cwddeci.h"
|
|
#include <GL/gl.h>
|
|
#include "GL/glATIInternal.h"
|
|
#ifdef ATI_OS_LINUX
|
|
#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
#include "GL/glx.h"
|
|
#include "GL/glxext.h"
|
|
#include "GL/glXATIPrivate.h"
|
|
#else
|
|
#include "GL/wglATIPrivate.h"
|
|
#endif
|
|
|
|
#ifdef ATI_OS_LINUX
|
|
typedef void* (*PFNGlxGetProcAddress)(const GLubyte* procName);
|
|
static PFNGlxGetProcAddress pfnGlxGetProcAddress = NULL;
|
|
static PFNGLXBEGINCLINTEROPAMD glXBeginCLInteropAMD = NULL;
|
|
static PFNGLXENDCLINTEROPAMD glXEndCLInteropAMD = NULL;
|
|
static PFNGLXRESOURCEATTACHAMD glXResourceAttachAMD = NULL;
|
|
static PFNGLXRESOURCEDETACHAMD glxResourceAcquireAMD = NULL;
|
|
static PFNGLXRESOURCEDETACHAMD glxResourceReleaseAMD = NULL;
|
|
static PFNGLXRESOURCEDETACHAMD glXResourceDetachAMD = NULL;
|
|
static PFNGLXGETCONTEXTMVPUINFOAMD glXGetContextMVPUInfoAMD = NULL;
|
|
#else
|
|
static PFNWGLBEGINCLINTEROPAMD wglBeginCLInteropAMD = NULL;
|
|
static PFNWGLENDCLINTEROPAMD wglEndCLInteropAMD = NULL;
|
|
static PFNWGLRESOURCEATTACHAMD wglResourceAttachAMD = NULL;
|
|
static PFNWGLRESOURCEDETACHAMD wglResourceAcquireAMD = NULL;
|
|
static PFNWGLRESOURCEDETACHAMD wglResourceReleaseAMD = NULL;
|
|
static PFNWGLRESOURCEDETACHAMD wglResourceDetachAMD = NULL;
|
|
static PFNWGLGETCONTEXTGPUINFOAMD wglGetContextGPUInfoAMD = NULL;
|
|
#endif
|
|
|
|
namespace pal {
|
|
|
|
//
|
|
/// GSL Surface Formats as per defined in cmSurfFmtEnum enum in //depot/stg/ugl/drivers/ugl/src/include/cm_enum.h
|
|
//
|
|
typedef enum cmSurfFmtEnum {
|
|
CM_SURF_FMT_NOOVERRIDE = -1,
|
|
CM_SURF_FMT_LUMINANCE8, ///< Luminance, 8 bits per element packed as (@c LLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE16, ///< Luminance, 16 bits per element packed as (@c LLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE16F, ///< Luminance, 16 bits per element packed as (@c LLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE32F, ///< Luminance, 32 bits per element packed as (@c LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_INTENSITY8, ///< Intensity, 8 bits per element packed as (@c IIIIIIII)
|
|
CM_SURF_FMT_INTENSITY16, ///< Intensity, 16 bits per element packed as (@c IIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_INTENSITY16F, ///< Intensity, 16 bits per element packed as (@c IIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_INTENSITY32F, ///< Intensity, 32 bits per element packed as (@c IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_ALPHA8, ///< Alpha, 8 bits per element packed as (@c AAAAAAAA)
|
|
CM_SURF_FMT_ALPHA16, ///< Alpha, 16 bits per element packed as (@c AAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_ALPHA16F, ///< Alpha, 16 bits per element packed as (@c AAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_ALPHA32F, ///< Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_LUMINANCE8_ALPHA8, ///< Luminance Alpha, 16 bits per element packed as (@c AAAAAAAALLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE16_ALPHA16, ///< Luminance Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAALLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE16F_ALPHA16F, ///< Luminance Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAALLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE32F_ALPHA32F, ///< Luminance Alpha, 64 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_B2_G3_R3, ///< RGB, 8 bits per element packed as (@c RRRGGGBB)
|
|
CM_SURF_FMT_B5_G6_R5, ///< RGB, 16 bits per element packed as (@c RRRRRGGGGGGBBBBB)
|
|
CM_SURF_FMT_BGRX4, ///< RGB, 16 bits per element packed as (@c XXXXRRRRGGGGBBBB)
|
|
CM_SURF_FMT_BGR5_X1, ///< RGB, 16 bits per element packed as (@c XRRRRRGGGGGBBBBB)
|
|
CM_SURF_FMT_BGRX8, ///< RGB, 32 bits per element packed as (@c XXXXXXXXRRRRRRRRGGGGGGGGBBBBBBBB) - XXX unused by current driver
|
|
CM_SURF_FMT_BGR10_X2, ///< RGB, 32 bits per element packed as (@c XXRRRRRRRRRRGGGGGGGGGGBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRX16, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRX16F, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRX32F, ///< RGB, 128 bits per element packed as (@c XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_RGBX4, ///< RGB, 16 bits per element packed as (@c XXXXBBBBGGGGRRRR)
|
|
CM_SURF_FMT_RGB5_X1, ///< RGB, 16 bits per element packed as (@c XBBBBBGGGGGRRRRR)
|
|
CM_SURF_FMT_RGBX8, ///< RGB, 32 bits per element packed as (@c XXXXXXXXBBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGB10_X2, ///< RGB, 32 bits per element packed as (@c XXBBBBBBBBBBGGGGGGGGGGRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBX16, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBX16F, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBX32F, ///< RGB, 128 bits per element packed as (@c XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_BGRA4, ///< RGBA, 16 bits per element packed as (@c AAAARRRRGGGGBBBB)
|
|
CM_SURF_FMT_BGR5_A1, ///< RGBA, 16 bits per element packed as (@c ARRRRRGGGGGBBBBB)
|
|
CM_SURF_FMT_BGRA8, ///< RGBA, 32 bits per element packed as (@c AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB)
|
|
CM_SURF_FMT_BGR10_A2, ///< RGBA, 32 bits per element packed as (@c AARRRRRRRRRRGGGGGGGGGGBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRA16, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRA16F, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_BGRA32F, ///< RGBA, 128 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_RGBA4, ///< RGBA, 16 bits per element packed as (@c AAAABBBBGGGGRRRR)
|
|
CM_SURF_FMT_RGB5_A1, ///< RGBA, 16 bits per element packed as (@c ABBBBBGGGGGRRRRR)
|
|
CM_SURF_FMT_RGBA8, ///< RGBA, 32 bits per element packed as (@c AAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGB10_A2, ///< RGBA, 32 bits per element packed as (@c AABBBBBBBBBBGGGGGGGGGGRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBA16, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBA16F, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBA32I, ///< RGBA, 128 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBA32F, ///< RGBA, 128 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_DUDV8, ///< DUDV 16 bits per element packed as (@c VVVVVVVVUUUUUUUU)
|
|
CM_SURF_FMT_DXT1, ///< compressed, DXT1
|
|
CM_SURF_FMT_DXT2_3, ///< compressed, DXT2_3
|
|
CM_SURF_FMT_DXT4_5, ///< compressed, DXT4_5
|
|
CM_SURF_FMT_ATI1N, ///< compressed, 1 component
|
|
CM_SURF_FMT_ATI2N, ///< compressed, 2 component
|
|
CM_SURF_FMT_DEPTH16, ///< depth, 16 bits per element packed as (@c DDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH16F, ///< depth, 16 bits per element packed as (@c DDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH24_X8, ///< depth, 32 bits per element packed as (@c XXXXXXXXDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH24F_X8, ///< depth, 32 bits per element packed as (@c SSSSSSSSDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH24_STEN8, ///< depth + stencil, 32 bits per element packed as (@c SSSSSSSSDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH24F_STEN8, ///< depth + stencil, 32 bits per element packed as (@c SSSSSSSSDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH32F_X24_STEN8, ///< depth + stencil, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXXXXXXXXXSSSSSSSSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH32F, ///< depth, 32 bits per element packed as (@c DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_sR11_sG11_sB10, ///< RGB, 32 bits per element packed as (@c RRRRRRRRRRRGGGGGGGGGGGBBBBBBBBBB)
|
|
CM_SURF_FMT_sU16, ///<
|
|
CM_SURF_FMT_sUV16, ///<
|
|
CM_SURF_FMT_sUVWQ16, ///<
|
|
CM_SURF_FMT_RG16, ///< RG, 32 bits per element packed as (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_RG16F, ///< RG, 32 bits per element packed as (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_RG32F, ///< RG, 64 bits per element packed as (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_ABGR4, ///< RGBA, 16 bits per element packed as (@c RRRRGGGGBBBBAAAA)
|
|
CM_SURF_FMT_A1_BGR5, ///< RGBA, 16 bits per element packed as (@c RRRRRGGGGGBBBBBA)
|
|
CM_SURF_FMT_ABGR8, ///< RGBA, 32 bits per element packed as (@c RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA)
|
|
CM_SURF_FMT_A2_BGR10, ///< RGBA, 32 bits per element packed as (@c RRRRRRRRRRGGGGGGGGGGBBBBBBBBBBAA)
|
|
CM_SURF_FMT_ABGR16, ///< RGBA, 64 bits per element packed as (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_ABGR16F, ///< RGBA, 64 bits per element packed as (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_ABGR32F, ///< RGBA, 128 bits per element packed as (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_DXT1A,
|
|
CM_SURF_FMT_sRGB10_A2, ///< RGBA, 32 bits per element packed as signed (@c AABBBBBBBBBBGGGGGGGGGGRRRRRRRRRR)
|
|
CM_SURF_FMT_sR8, ///< R, 8 bits per element packed as signed (@c RRRRRRRR)
|
|
CM_SURF_FMT_sRG8, ///< RG, 16 bits per element packed as signed (@c RRRRRRRRGGGGGGGG)
|
|
CM_SURF_FMT_sR32I, ///< R, 32 bits per element packed as signed (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_sRG32I, ///< RG, 64 bits per element packed as signed (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_sRGBA32I, ///< RGBA, 128 bits per element packed as signed (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_R32I, ///< R, 32 bits per element packed as (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RG32I, ///< RG, 64 bits per element packed as (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_RG8, ///< RG8, 16 bits per element packed as (@c RRRRRRRRGGGGGGGG)
|
|
CM_SURF_FMT_sRGBA8, ///< RGBA8, 32 bits per element packed as signed (@c RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA)
|
|
CM_SURF_FMT_R11F_G11F_B10F, ///< RGB, 32 bits per element packed as (@c BBBBBBBBBBGGGGGGGGGGGRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGB9_E5, ///< RGB, 32 bits per element packed as (@c EEEEEBBBBBBBBBGGGGGGGGGRRRRRRRRR)
|
|
CM_SURF_FMT_LUMINANCE_LATC1, ///< compressed LATC1
|
|
CM_SURF_FMT_SIGNED_LUMINANCE_LATC1, ///< compressed signed LATC1
|
|
CM_SURF_FMT_LUMINANCE_ALPHA_LATC2, ///< compressed LATC2
|
|
CM_SURF_FMT_SIGNED_LUMINANCE_ALPHA_LATC2, ///< compressed signed LATC2
|
|
CM_SURF_FMT_RED_RGTC1, ///< compressed RGTC1
|
|
CM_SURF_FMT_SIGNED_RED_RGTC1, ///< compressed signed RGTC1
|
|
CM_SURF_FMT_RED_GREEN_RGTC2, ///< compressed RGTC2
|
|
CM_SURF_FMT_SIGNED_RED_GREEN_RGTC2, ///< compressed signed RGTC2
|
|
CM_SURF_FMT_R8, ///< R, 8 bits per element packed (@c RRRRRRRR)
|
|
CM_SURF_FMT_R16, ///< R, 16 bits per element packed (@c RRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_R16F, ///< R, 16 bits per element packed (@c RRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_R32F, ///< R, 32 bits per element packed (@c RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_R8I, ///< R, 8 bits per element packed (@c RRRRRRRR)
|
|
CM_SURF_FMT_sR8I, ///< R, 8 bits per element packed as signed (@c RRRRRRRR)
|
|
CM_SURF_FMT_RG8I, ///< RG, 16 bits per element packed (@c RRRRRRRRGGGGGGGG)
|
|
CM_SURF_FMT_sRG8I, ///< RG, 16 bits per element packed as signed (@c RRRRRRRRGGGGGGGG)
|
|
CM_SURF_FMT_R16I, ///< R, 16 bits per element packed (@c RRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_sR16I, ///< R, 16 bits per element packed as signed (@c RRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RG16I, ///< RG, 32 bits per element packed (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_sRG16I, ///< RG, 32 bits per element packed as signed (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_RGBA32UI, ///< RGBA, 128 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_RGBX32UI, ///< RGBX, 128 bits per element packed as(@c XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_ALPHA32UI, ///< Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_INTENSITY32UI, ///< Intensity, 32 bits per element packed as (@c IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_LUMINANCE32UI, ///< Luminance, 32 bits per element packed as (@c LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE_ALPHA32UI, ///< Luminance Alpha, 64 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_RGBA16UI, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBX16UI, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_ALPHA16UI, ///< Alpha, 16 bits per element packed as (@c AAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_INTENSITY16UI, ///< Intensity, 16 bits per element packed as (@c IIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_LUMINANCE16UI, ///< Luminance, 16 bits per element packed as (@c LLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE_ALPHA16UI, ///< Luminance Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAALLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_RGBA8UI, ///< RGBA, 32 bits per element packed as (@c AAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGBX8UI, ///< RGB, 32 bits per element packed as (@c XXXXXXXXBBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_ALPHA8UI, ///< Alpha, 8 bits per element packed as (@c AAAAAAAA)
|
|
CM_SURF_FMT_INTENSITY8UI, ///< Intensity, 8 bits per element packed as (@c IIIIIIII)
|
|
CM_SURF_FMT_LUMINANCE8UI, ///< Luminance, 8 bits per element packed as (@c LLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE_ALPHA8UI, ///< Luminance Alpha, 32 bits per element packed as (@c AAAAAAAALLLLLLLL)
|
|
CM_SURF_FMT_sRGBX32I, ///< RGBX, 128 bits per element packed as(@c XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
CM_SURF_FMT_sALPHA32I, ///< Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_sINTENSITY32I, ///< Intensity, 32 bits per element packed as (@c IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_sLUMINANCE32I, ///< Luminance, 32 bits per element packed as (@c LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_sLUMINANCE_ALPHA32I, ///< Luminance Alpha, 64 bits per element packed as (@c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_sRGBA16I, ///< RGBA, 64 bits per element packed as (@c AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_sRGBX16I, ///< RGB, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_sALPHA16I, ///< Alpha, 16 bits per element packed as (@c AAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_sINTENSITY16I, ///< Intensity, 16 bits per element packed as (@c IIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_sLUMINANCE16I, ///< Luminance, 16 bits per element packed as (@c LLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_sLUMINANCE_ALPHA16I, ///< Luminance Alpha, 32 bits per element packed as (@c AAAAAAAAAAAAAAAALLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_sRGBA8I, ///< RGBA, 32 bits per element packed as (@c AAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_sRGBX8I, ///< RGB, 32 bits per element packed as (@c XXXXXXXXBBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_sALPHA8I, ///< Alpha, 8 bits per element packed as (@c AAAAAAAA)
|
|
CM_SURF_FMT_sINTENSITY8I, ///< Intensity, 8 bits per element packed as (@c IIIIIIII)
|
|
CM_SURF_FMT_sLUMINANCE8I, ///< Luminance, 8 bits per element packed as (@c LLLLLLLL)
|
|
CM_SURF_FMT_sLUMINANCE_ALPHA8I, ///< Alpha, 8 bits per element packed as (@c AAAAAAAA)
|
|
CM_SURF_FMT_sDXT6, ///< compressed, CM_SURF_FMT_sDXT6
|
|
CM_SURF_FMT_DXT6, ///< compressed, CM_SURF_FMT_DXT6
|
|
CM_SURF_FMT_DXT7, ///< compressed, DXT7
|
|
CM_SURF_FMT_LUMINANCE8_SNORM, ///< Luminance, 8 bits per element packed as signed (@c LLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE16_SNORM, ///< Luminance, 16 bits per element packed as signed (@c LLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_INTENSITY8_SNORM, ///< Intensity, 8 bits per element packed as signed (@c IIIIIIII)
|
|
CM_SURF_FMT_INTENSITY16_SNORM, ///< Intensity, 16 bits per element packed as signed (@c IIIIIIIIIIIIIIII)
|
|
CM_SURF_FMT_ALPHA8_SNORM, ///< Alpha, 8 bits per element packed as signed (@c AAAAAAAA)
|
|
CM_SURF_FMT_ALPHA16_SNORM, ///< Alpha, 16 bits per element packed as signed (@c AAAAAAAAAAAAAAAA)
|
|
CM_SURF_FMT_LUMINANCE_ALPHA8_SNORM, ///< Luminance Alpha, 16 bits per element packed as signed (@c AAAAAAAALLLLLLLL)
|
|
CM_SURF_FMT_LUMINANCE_ALPHA16_SNORM, ///< Luminance Alpha, 32 bits per element packed as signed (@c AAAAAAAAAAAAAAAALLLLLLLLLLLLLLLL)
|
|
CM_SURF_FMT_R8_SNORM, ///< R, 8 bits per element packed as signed (@c RRRRRRRR)
|
|
CM_SURF_FMT_R16_SNORM, ///< R, 16 bits per element packed as signed (@c RRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RG8_SNORM, ///< RG8, 16 bits per element packed as signed (@c RRRRRRRRGGGGGGGG)
|
|
CM_SURF_FMT_RG16_SNORM, ///< RG, 32 bits per element packed as signed (@c RRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGG)
|
|
CM_SURF_FMT_RGBX8_SNORM, ///< RGB, 32 bits per element packed as signed (@c XXXXXXXXBBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGBX16_SNORM, ///< RGB, 64 bits per element packed as signed (@c XXXXXXXXXXXXXXXXBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBA8_SNORM, ///< RGBA, 32 bits per element packed as signed (@c AAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGBA16_SNORM, ///< RGBA, 64 bits per element packed as signed (@c AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGB10_A2UI, ///< RGBA, 32 bits per element packed as (@c AABBBBBBBBBBGGGGGGGGGGRRRRRRRRRR)
|
|
CM_SURF_FMT_RGB32F, ///< RGB, float, 96 bits per element packed as (@c BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGB32I, ///< RGB, unnormalized int, 96 bits per element packed as (@c BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGB32UI, ///< RGB, unnormalized uint, 96 bits per element packed as (@c BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR)
|
|
CM_SURF_FMT_RGBX8_SRGB, ///< RGB, 32 bits per element packed as (@c XXXXXXXXBBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_RGBA8_SRGB, ///< RGBA, 32 bits per element packed as (@c AAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR)
|
|
CM_SURF_FMT_DXT1_SRGB, ///< compressed, DXT1
|
|
CM_SURF_FMT_DXT1A_SRGB, ///<
|
|
CM_SURF_FMT_DXT2_3_SRGB, ///< compressed, DXT2_3
|
|
CM_SURF_FMT_DXT4_5_SRGB, ///< compressed, DXT4_5
|
|
CM_SURF_FMT_DXT7_SRGB, ///< compressed, DXT7
|
|
CM_SURF_FMT_RGB8_ETC2, ///< ETC2 compressed, RGB8 in 64 bits
|
|
CM_SURF_FMT_SRGB8_ETC2, ///< ETC2 compressed, SRGB8 in 64 bits
|
|
CM_SURF_FMT_RGB8_PT_ALPHA1_ETC2, ///< ETC2 compressed, RGB8 in 64 bits
|
|
CM_SURF_FMT_SRGB8_PT_ALPHA1_ETC2, ///< ETC2 compressed, sRGB8A1 in 64 bits
|
|
CM_SURF_FMT_RGBA8_ETC2_EAC, ///< ETC2 compressed, RGBA8 in 128 bits
|
|
CM_SURF_FMT_SRGB8_ALPHA8_ETC2_EAC, ///< ETC2 compressed, sRGBA8 in 128 bits
|
|
CM_SURF_FMT_R11_EAC, ///< EAC compressed, R11 in 64 bits
|
|
CM_SURF_FMT_SIGNED_R11_EAC, ///< EAC compressed, signed R11 in 64 bits
|
|
CM_SURF_FMT_RG11_EAC, ///< EAC compressed, RG11 in 128 bits
|
|
CM_SURF_FMT_SIGNED_RG11_EAC, ///< EAC compressed, signed RG11 in 128 bits
|
|
|
|
CM_SURF_FMT_RGBA8_ASTC_4x4, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_5x4, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_5x5, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_6x5, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_6x6, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_8x5, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_8x6, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_8x8, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_10x5, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_10x6, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_10x8, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_10x10, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_12x10, ///< ASTC compressed RGBA8 in 128 bits block
|
|
CM_SURF_FMT_RGBA8_ASTC_12x12, ///< ASTC compressed RGBA8 in 128 bits block
|
|
|
|
CM_SURF_FMT_SRGBA8_ASTC_4x4, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_5x4, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_5x5, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_6x5, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_6x6, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_8x5, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_8x6, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_8x8, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_10x5, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_10x6, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_10x8, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_10x10, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_12x10, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
CM_SURF_FMT_SRGBA8_ASTC_12x12, ///< ASTC compressed SRGBA8 in 128 bits block
|
|
|
|
CM_SURF_FMT_BGR10_A2UI, ///< RGBA, 32 bits per element packed as (@c AARRRRRRRRRRGGGGGGGGGGBBBBBBBBBB)
|
|
CM_SURF_FMT_A2_BGR10UI, ///< RGBA, 32 bits per element packed as (@c RRRRRRRRRRGGGGGGGGGGBBBBBBBBBBAA)
|
|
CM_SURF_FMT_A2_RGB10UI, ///< RGBA, 32 bits per element packed as (@c BBBBBBBBBBGGGGGGGGGGRRRRRRRRRRAA)
|
|
CM_SURF_FMT_B5_G6_R5UI, ///< RGB, 16 bits per element packed as (@c BBBBBGGGGGGRRRRR)
|
|
CM_SURF_FMT_R5_G6_B5UI, ///< RGB, 16 bits per element packed as (@c RRRRRGGGGGGBBBBB)
|
|
|
|
CM_SURF_FMT_DEPTH32F_X24_STEN8_UNCLAMPED, ///< depth + stencil, 64 bits per element packed as (@c XXXXXXXXXXXXXXXXXXXXXXXXSSSSSSSSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
CM_SURF_FMT_DEPTH32F_UNCLAMPED, ///< depth, 32 bits per element packed as (@c DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)
|
|
|
|
CM_SURF_FMT_L8_X16_A8_SRGB, ///< Sluminance Alpha, 32 bits per element packed as (@c AAAAAAAAXXXXXXXXXXXXXXXXLLLLLLLL)
|
|
CM_SURF_FMT_L8_X24_SRGB, ///< Sluminance, 32 bits per element packed as (@c XXXXXXXXXXXXXXXXXXXXXXXXLLLLLLLL)
|
|
|
|
CM_SURF_FMT_STENCIL8, ///< stencil, 32 bits per element packed as (@c SSSSSSSSXXXXXXXXXXXXXXXXXXXXXXXX)
|
|
|
|
|
|
// non-native surface formats after this line, will be ignored by HWL
|
|
// all non-native surface formats should use the _NN suffix to distinguish
|
|
// them from potential corresponding native formats added in the future
|
|
CM_SURF_FMT_I420_NN, ///< 4:2:0 Planar Y-U-V format
|
|
CM_SURF_FMT_YV12_NN, ///< 4:2:0 Planar Y-V-U format
|
|
CM_SURF_FMT_NV12_NN, ///< 4:2:0 Semi-planar Y-UV format
|
|
CM_SURF_FMT_NV21_NN, ///< 4:2:0 Semi-planar Y-VU format
|
|
cmSurfFmt_FIRST = CM_SURF_FMT_LUMINANCE8, ///< First surface format
|
|
cmSurfFmt_LAST = CM_SURF_FMT_STENCIL8, ///< Last native surface format
|
|
cmSurfFmt_LAST_NON_NATIVE = CM_SURF_FMT_NV21_NN,///< Last non-native surface format
|
|
} cmSurfFmt;
|
|
|
|
typedef struct cmFormatXlateRec {
|
|
cmSurfFmt raw_cmFormat;
|
|
cl_channel_type image_channel_data_type;
|
|
cl_channel_order image_channel_order;
|
|
} cmFormatXlateParams;
|
|
|
|
// relates full range of cm surface formats to those supported by CAL
|
|
static const cmFormatXlateParams cmFormatXlateTable[] = {
|
|
{ CM_SURF_FMT_LUMINANCE8, CL_UNORM_INT8, CL_LUMINANCE },
|
|
{ CM_SURF_FMT_LUMINANCE16, CL_UNORM_INT16, CL_LUMINANCE },
|
|
{ CM_SURF_FMT_LUMINANCE16F, CL_HALF_FLOAT, CL_LUMINANCE },
|
|
{ CM_SURF_FMT_LUMINANCE32F, CL_FLOAT, CL_LUMINANCE },
|
|
{ CM_SURF_FMT_INTENSITY8, CL_UNORM_INT8, CL_INTENSITY },
|
|
{ CM_SURF_FMT_INTENSITY16, CL_UNORM_INT16, CL_INTENSITY },
|
|
{ CM_SURF_FMT_INTENSITY16F, CL_HALF_FLOAT, CL_INTENSITY },
|
|
{ CM_SURF_FMT_INTENSITY32F, CL_FLOAT, CL_INTENSITY },
|
|
{ CM_SURF_FMT_ALPHA8, CL_UNSIGNED_INT8, CL_A },
|
|
{ CM_SURF_FMT_ALPHA16, CL_UNORM_INT16, CL_A },
|
|
{ CM_SURF_FMT_ALPHA16F, CL_HALF_FLOAT, CL_A },
|
|
{ CM_SURF_FMT_ALPHA32F, CL_FLOAT, CL_A },
|
|
{ CM_SURF_FMT_LUMINANCE8_ALPHA8, CL_UNSIGNED_INT8, CL_RG },
|
|
{ CM_SURF_FMT_LUMINANCE16_ALPHA16, CL_UNSIGNED_INT16, CL_RG },
|
|
{ CM_SURF_FMT_LUMINANCE16F_ALPHA16F, CL_HALF_FLOAT, CL_RG },
|
|
{ CM_SURF_FMT_LUMINANCE32F_ALPHA32F, CL_FLOAT, CL_RG },
|
|
{ CM_SURF_FMT_B2_G3_R3, 500, CL_R },
|
|
{ CM_SURF_FMT_B5_G6_R5, CL_UNSIGNED_INT16, CL_RGB },
|
|
{ CM_SURF_FMT_BGRX4, 500, CL_BGRA },
|
|
{ CM_SURF_FMT_BGR5_X1, CL_UNSIGNED_INT16, CL_RGB },
|
|
{ CM_SURF_FMT_BGRX8, CL_UNORM_INT8, CL_BGRA },
|
|
{ CM_SURF_FMT_BGR10_X2, CL_UNORM_INT_101010, CL_RGB },
|
|
{ CM_SURF_FMT_BGRX16, CL_UNORM_INT16, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRX16F, CL_HALF_FLOAT, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRX32F, CL_FLOAT, CL_BGRA },
|
|
{ CM_SURF_FMT_RGBX4, 500, CL_RGB },
|
|
{ CM_SURF_FMT_RGB5_X1, CL_UNORM_INT16, CL_BGRA },
|
|
{ CM_SURF_FMT_RGBX8, CL_UNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB10_X2, CL_UNORM_INT_101010, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX16, CL_UNORM_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX16F, CL_HALF_FLOAT, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX32F, CL_FLOAT, CL_RGBA },
|
|
{ CM_SURF_FMT_BGRA4, 500, CL_BGRA },
|
|
{ CM_SURF_FMT_BGR5_A1, CL_UNSIGNED_INT16, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRA8, CL_UNORM_INT8, CL_BGRA },
|
|
{ CM_SURF_FMT_BGR10_A2, CL_UNORM_INT_101010, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRA16, CL_UNORM_INT16, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRA16F, CL_UNORM_INT16, CL_BGRA },
|
|
{ CM_SURF_FMT_BGRA32F, CL_FLOAT, CL_BGRA },
|
|
{ CM_SURF_FMT_RGBA4, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB5_A1, CL_UNSIGNED_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8, CL_UNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB10_A2, CL_UNORM_INT_101010, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA16, CL_UNORM_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA16F, CL_HALF_FLOAT, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA32I, CL_UNSIGNED_INT32, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA32F, CL_FLOAT, CL_RGBA },
|
|
{ CM_SURF_FMT_DUDV8, CL_UNSIGNED_INT8, CL_RG },
|
|
{ CM_SURF_FMT_DXT1, 500, CL_R },
|
|
{ CM_SURF_FMT_DXT2_3, 500, CL_R },
|
|
{ CM_SURF_FMT_DXT4_5, 500, CL_R },
|
|
{ CM_SURF_FMT_ATI1N, 500, CL_R },
|
|
{ CM_SURF_FMT_ATI2N, 500, CL_R },
|
|
{ CM_SURF_FMT_DEPTH16, CL_UNORM_INT16, CL_DEPTH },
|
|
{ CM_SURF_FMT_DEPTH16F, CL_HALF_FLOAT, CL_DEPTH },
|
|
{ CM_SURF_FMT_DEPTH24_X8, 500, CL_DEPTH },
|
|
{ CM_SURF_FMT_DEPTH24F_X8, 500, CL_DEPTH },
|
|
{ CM_SURF_FMT_DEPTH24_STEN8, CL_UNORM_INT24, CL_DEPTH_STENCIL },
|
|
{ CM_SURF_FMT_DEPTH24F_STEN8, 500, CL_DEPTH_STENCIL },
|
|
{ CM_SURF_FMT_DEPTH32F_X24_STEN8, CL_FLOAT, CL_DEPTH_STENCIL },
|
|
{ CM_SURF_FMT_DEPTH32F, CL_FLOAT, CL_DEPTH },
|
|
{ CM_SURF_FMT_sR11_sG11_sB10, 500, CL_R },
|
|
{ CM_SURF_FMT_sU16, CL_SNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_sUV16, CL_SNORM_INT16, CL_RG },
|
|
{ CM_SURF_FMT_sUVWQ16, CL_SNORM_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RG16, CL_UNORM_INT16, CL_RG },
|
|
{ CM_SURF_FMT_RG16F, CL_HALF_FLOAT, CL_RG },
|
|
{ CM_SURF_FMT_RG32F, CL_FLOAT, CL_RG },
|
|
{ CM_SURF_FMT_ABGR4, 500, CL_ARGB },
|
|
{ CM_SURF_FMT_A1_BGR5, CL_UNSIGNED_INT16, CL_ARGB },
|
|
{ CM_SURF_FMT_ABGR8, CL_UNORM_INT8, CL_ARGB },
|
|
{ CM_SURF_FMT_A2_BGR10, CL_UNORM_INT_101010, CL_ARGB },
|
|
{ CM_SURF_FMT_ABGR16, CL_UNORM_INT16, CL_ARGB },
|
|
{ CM_SURF_FMT_ABGR16F, CL_HALF_FLOAT, CL_ARGB },
|
|
{ CM_SURF_FMT_ABGR32F, CL_FLOAT, CL_ARGB },
|
|
{ CM_SURF_FMT_DXT1A, 500, CL_R },
|
|
{ CM_SURF_FMT_sRGB10_A2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_sR8, CL_SNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_sRG8, CL_SNORM_INT8, CL_RG },
|
|
{ CM_SURF_FMT_sR32I, CL_SIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_sRG32I, CL_SIGNED_INT32, CL_RG },
|
|
{ CM_SURF_FMT_sRGBA32I, CL_SIGNED_INT32, CL_RGBA },
|
|
{ CM_SURF_FMT_R32I, CL_UNSIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_RG32I, CL_UNSIGNED_INT32, CL_RG },
|
|
{ CM_SURF_FMT_RG8, CL_UNORM_INT8, CL_RG },
|
|
{ CM_SURF_FMT_sRGBA8, CL_SNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_R11F_G11F_B10F, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB9_E5, CL_UNORM_INT8, CL_ARGB },
|
|
{ CM_SURF_FMT_LUMINANCE_LATC1, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SIGNED_LUMINANCE_LATC1,500, CL_RGBA },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA_LATC2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SIGNED_LUMINANCE_ALPHA_LATC2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RED_RGTC1, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SIGNED_RED_RGTC1, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RED_GREEN_RGTC2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SIGNED_RED_GREEN_RGTC2,500, CL_RGBA },
|
|
{ CM_SURF_FMT_R8, CL_UNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_R16, CL_UNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_R16F, CL_HALF_FLOAT, CL_R },
|
|
{ CM_SURF_FMT_R32F, CL_FLOAT, CL_R },
|
|
{ CM_SURF_FMT_R8I, CL_UNSIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_sR8I, CL_SIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_RG8I, CL_UNSIGNED_INT8, CL_RG },
|
|
{ CM_SURF_FMT_sRG8I, CL_SIGNED_INT8, CL_RG },
|
|
{ CM_SURF_FMT_R16I, CL_UNSIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_sR16I, CL_SIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_RG16I, CL_UNSIGNED_INT16, CL_RG },
|
|
{ CM_SURF_FMT_sRG16I, CL_SIGNED_INT16, CL_RG },
|
|
{ CM_SURF_FMT_RGBA32UI, CL_UNSIGNED_INT32, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX32UI, CL_UNSIGNED_INT32, CL_RGBA },
|
|
{ CM_SURF_FMT_ALPHA32UI, CL_UNSIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_INTENSITY32UI, CL_UNSIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE32UI, CL_UNSIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA32UI, CL_UNSIGNED_INT32, CL_RG },
|
|
{ CM_SURF_FMT_RGBA16UI, CL_UNSIGNED_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX16UI, CL_UNSIGNED_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_ALPHA16UI, CL_UNSIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_INTENSITY16UI, CL_UNSIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE16UI, CL_UNSIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA16UI, CL_UNSIGNED_INT32, CL_RG },
|
|
{ CM_SURF_FMT_RGBA8UI, CL_UNSIGNED_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX8UI, CL_UNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_ALPHA8UI, CL_UNSIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_INTENSITY8UI, CL_UNSIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE8UI, CL_UNSIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA8UI, CL_UNSIGNED_INT8, CL_RG },
|
|
{ CM_SURF_FMT_sRGBX32I, CL_SIGNED_INT32, CL_RGBA },
|
|
{ CM_SURF_FMT_sALPHA32I, CL_SIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_sINTENSITY32I, CL_SIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE32I, CL_SIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE_ALPHA32I, CL_SIGNED_INT32, CL_RG },
|
|
{ CM_SURF_FMT_sRGBA16I, CL_SIGNED_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_sRGBX16I, CL_SIGNED_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_sALPHA16I, CL_SIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_sINTENSITY16I, CL_SIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE16I, CL_SIGNED_INT16, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE_ALPHA16I, CL_SIGNED_INT16, CL_RG },
|
|
{ CM_SURF_FMT_sRGBA8I, CL_SIGNED_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_sRGBX8I, CL_SIGNED_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_sALPHA8I, CL_SIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_sINTENSITY8I, CL_SIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE8I, CL_SIGNED_INT8, CL_R },
|
|
{ CM_SURF_FMT_sLUMINANCE_ALPHA8I, CM_SURF_FMT_sRG8I, CL_RG },
|
|
{ CM_SURF_FMT_sDXT6, 500, CL_R },
|
|
{ CM_SURF_FMT_DXT6, 500, CL_R },
|
|
{ CM_SURF_FMT_DXT7, 500, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE8_SNORM, CL_SNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE16_SNORM, CL_SNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_INTENSITY8_SNORM, CL_SNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_INTENSITY16_SNORM, CL_SNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_ALPHA8_SNORM, CL_SNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_ALPHA16_SNORM, CL_SNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA8_SNORM,CL_SNORM_INT8, CL_RG },
|
|
{ CM_SURF_FMT_LUMINANCE_ALPHA16_SNORM,CL_SNORM_INT16, CL_RG },
|
|
{ CM_SURF_FMT_R8_SNORM, CL_SNORM_INT8, CL_R },
|
|
{ CM_SURF_FMT_R16_SNORM, CL_SNORM_INT16, CL_R },
|
|
{ CM_SURF_FMT_RG8_SNORM, CL_SNORM_INT8, CL_RG },
|
|
{ CM_SURF_FMT_RG16_SNORM, CL_SNORM_INT16, CL_RG },
|
|
{ CM_SURF_FMT_RGBX8_SNORM, CL_SNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX16_SNORM, CL_SNORM_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_SNORM, CL_SNORM_INT8, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA16_SNORM, CL_SNORM_INT16, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB10_A2UI, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB32F, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB32I, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB32UI, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBX8_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DXT1_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DXT1A_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DXT2_3_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DXT4_5_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DXT7_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGB8_ETC2, 500, CL_RGB },
|
|
{ CM_SURF_FMT_SRGB8_ETC2, 500, CL_RGB },
|
|
{ CM_SURF_FMT_RGB8_PT_ALPHA1_ETC2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGB8_PT_ALPHA1_ETC2, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ETC2_EAC, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGB8_ALPHA8_ETC2_EAC, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_R11_EAC, 500, CL_R },
|
|
{ CM_SURF_FMT_SIGNED_R11_EAC, 500, CL_R },
|
|
{ CM_SURF_FMT_RG11_EAC, 500, CL_RG },
|
|
{ CM_SURF_FMT_SIGNED_RG11_EAC, 500, CL_RG },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_4x4, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_5x4, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_5x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_6x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_6x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_8x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_8x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_8x8, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_10x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_10x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_10x8, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_10x10, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_12x10, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_RGBA8_ASTC_12x12, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_4x4, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_5x4, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_5x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_6x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_6x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_8x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_8x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_8x8, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_10x5, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_10x6, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_10x8, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_10x10, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_12x10, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_SRGBA8_ASTC_12x12, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_BGR10_A2UI, 500, CL_BGRA },
|
|
{ CM_SURF_FMT_A2_BGR10UI, 500, CL_ARGB },
|
|
{ CM_SURF_FMT_A2_RGB10UI, 500, CL_ABGR },
|
|
{ CM_SURF_FMT_B5_G6_R5UI, 500, CL_BGRA },
|
|
{ CM_SURF_FMT_R5_G6_B5UI, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_DEPTH32F_X24_STEN8_UNCLAMPED,CL_UNSIGNED_INT32, CL_R },
|
|
{ CM_SURF_FMT_DEPTH32F_UNCLAMPED, CL_FLOAT, CL_R },
|
|
{ CM_SURF_FMT_L8_X16_A8_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_L8_X24_SRGB, 500, CL_RGBA },
|
|
{ CM_SURF_FMT_STENCIL8, CL_UNSIGNED_INT8, CL_R },
|
|
};
|
|
|
|
bool Device::initGLInteropPrivateExt(void* GLplatformContext, void* GLdeviceContext) const {
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
void* pModule = dlopen("libGL.so.1", RTLD_NOW);
|
|
|
|
if (NULL == pModule) {
|
|
return false;
|
|
}
|
|
pfnGlxGetProcAddress = (PFNGlxGetProcAddress)dlsym(pModule, "glXGetProcAddress");
|
|
|
|
if (NULL == pfnGlxGetProcAddress) {
|
|
return false;
|
|
}
|
|
|
|
if (!glXBeginCLInteropAMD || !glXEndCLInteropAMD || !glXResourceAttachAMD ||
|
|
!glXResourceDetachAMD || !glXGetContextMVPUInfoAMD) {
|
|
glXBeginCLInteropAMD = (PFNGLXBEGINCLINTEROPAMD)pfnGlxGetProcAddress(
|
|
(const GLubyte*)"glXBeginCLInteroperabilityAMD");
|
|
glXEndCLInteropAMD =
|
|
(PFNGLXENDCLINTEROPAMD)pfnGlxGetProcAddress((const GLubyte*)"glXEndCLInteroperabilityAMD");
|
|
glXResourceAttachAMD =
|
|
(PFNGLXRESOURCEATTACHAMD)pfnGlxGetProcAddress((const GLubyte*)"glXResourceAttachAMD");
|
|
glxResourceAcquireAMD =
|
|
(PFNGLXRESOURCEDETACHAMD)pfnGlxGetProcAddress((const GLubyte*)"glXResourceAcquireAMD");
|
|
glxResourceReleaseAMD =
|
|
(PFNGLXRESOURCEDETACHAMD)pfnGlxGetProcAddress((const GLubyte*)"glXResourceReleaseAMD");
|
|
glXResourceDetachAMD =
|
|
(PFNGLXRESOURCEDETACHAMD)pfnGlxGetProcAddress((const GLubyte*)"glXResourceDetachAMD");
|
|
glXGetContextMVPUInfoAMD = (PFNGLXGETCONTEXTMVPUINFOAMD)pfnGlxGetProcAddress(
|
|
(const GLubyte*)"glXGetContextMVPUInfoAMD");
|
|
}
|
|
|
|
if (!glXBeginCLInteropAMD || !glXEndCLInteropAMD || !glXResourceAttachAMD ||
|
|
!glXResourceDetachAMD) {
|
|
return false;
|
|
}
|
|
#else
|
|
if (!wglBeginCLInteropAMD || !wglEndCLInteropAMD || !wglResourceAttachAMD ||
|
|
!wglResourceDetachAMD || !wglGetContextGPUInfoAMD) {
|
|
HGLRC fakeRC = NULL;
|
|
|
|
if (!wglGetCurrentContext()) {
|
|
fakeRC = wglCreateContext((HDC)GLdeviceContext);
|
|
wglMakeCurrent((HDC)GLdeviceContext, fakeRC);
|
|
}
|
|
|
|
wglBeginCLInteropAMD =
|
|
(PFNWGLBEGINCLINTEROPAMD)wglGetProcAddress("wglBeginCLInteroperabilityAMD");
|
|
wglEndCLInteropAMD = (PFNWGLENDCLINTEROPAMD)wglGetProcAddress("wglEndCLInteroperabilityAMD");
|
|
wglResourceAttachAMD = (PFNWGLRESOURCEATTACHAMD)wglGetProcAddress("wglResourceAttachAMD");
|
|
wglResourceAcquireAMD = (PFNWGLRESOURCEDETACHAMD)wglGetProcAddress("wglResourceAcquireAMD");
|
|
wglResourceReleaseAMD = (PFNWGLRESOURCEDETACHAMD)wglGetProcAddress("wglResourceReleaseAMD");
|
|
wglResourceDetachAMD = (PFNWGLRESOURCEDETACHAMD)wglGetProcAddress("wglResourceDetachAMD");
|
|
wglGetContextGPUInfoAMD =
|
|
(PFNWGLGETCONTEXTGPUINFOAMD)wglGetProcAddress("wglGetContextGPUInfoAMD");
|
|
|
|
if (fakeRC) {
|
|
wglMakeCurrent(NULL, NULL);
|
|
wglDeleteContext(fakeRC);
|
|
}
|
|
}
|
|
if (!wglBeginCLInteropAMD || !wglEndCLInteropAMD || !wglResourceAttachAMD ||
|
|
!wglResourceDetachAMD || !wglGetContextGPUInfoAMD) {
|
|
return false;
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
|
|
bool Device::glCanInterop(void* GLplatformContext, void* GLdeviceContext) const {
|
|
bool canInteroperate = false;
|
|
|
|
#ifdef ATI_OS_WIN
|
|
LUID glAdapterLuid = {0, 0};
|
|
UINT glChainBitMask = 0;
|
|
HGLRC hRC = (HGLRC)GLplatformContext;
|
|
|
|
// get GL context's LUID and chainBitMask from UGL
|
|
if (wglGetContextGPUInfoAMD(hRC, &glAdapterLuid, &glChainBitMask)) {
|
|
// match the adapter
|
|
canInteroperate = (properties().osProperties.luidHighPart == glAdapterLuid.HighPart) &&
|
|
(properties().osProperties.luidLowPart == glAdapterLuid.LowPart) &&
|
|
((1 << properties().gpuIndex) == glChainBitMask);
|
|
}
|
|
#else
|
|
canInteroperate = true;
|
|
#endif
|
|
return canInteroperate;
|
|
}
|
|
|
|
bool Device::glAssociate(void* GLplatformContext, void* GLdeviceContext) const {
|
|
// initialize pointers to the gl extension that supports interoperability
|
|
if (!initGLInteropPrivateExt(GLplatformContext, GLdeviceContext) ||
|
|
!glCanInterop(GLplatformContext, GLdeviceContext)) {
|
|
return false;
|
|
}
|
|
|
|
int flags = 0;
|
|
/*
|
|
if (m_adp->pAsicInfo->svmFineGrainSystem)
|
|
{
|
|
flags = GL_INTEROP_SVM;
|
|
}
|
|
*/
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
return (glXBeginCLInteropAMD(ctx, 0)) ? true : false;
|
|
#else
|
|
HGLRC hRC = (HGLRC)GLplatformContext;
|
|
return (wglBeginCLInteropAMD(hRC, flags)) ? true : false;
|
|
#endif
|
|
}
|
|
|
|
bool Device::glDissociate(void* GLplatformContext, void* GLdeviceContext) const {
|
|
int flags = 0;
|
|
/*
|
|
if (m_adp->pAsicInfo->svmFineGrainSystem)
|
|
{
|
|
flags = GL_INTEROP_SVM;
|
|
}
|
|
*/
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
return (glXEndCLInteropAMD(ctx, 0)) ? true : false;
|
|
#else
|
|
HGLRC hRC = (HGLRC)GLplatformContext;
|
|
return (wglEndCLInteropAMD(hRC, flags)) ? true : false;
|
|
#endif
|
|
}
|
|
|
|
bool Device::resGLAssociate(void* GLContext, uint name, uint type, void** handle,
|
|
void** mbResHandle, size_t* offset, cl_image_format& newClFormat
|
|
#ifdef ATI_OS_WIN
|
|
,
|
|
Pal::DoppDesktopInfo& doppDesktopInfo
|
|
#endif
|
|
) const {
|
|
amd::ScopedLock lk(lockPAL());
|
|
|
|
GLResource hRes = {};
|
|
GLResourceData hData = {};
|
|
|
|
bool status = false;
|
|
|
|
hRes.type = type;
|
|
hRes.name = name;
|
|
|
|
hData.version = GL_RESOURCE_DATA_VERSION;
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLContext;
|
|
if (glXResourceAttachAMD(ctx, &hRes, &hData)) {
|
|
// attribs.dynamicSharedBufferID = hData->sharedBufferID;
|
|
status = true;
|
|
}
|
|
#else
|
|
HGLRC hRC = (HGLRC)GLContext;
|
|
if (wglResourceAttachAMD(hRC, &hRes, &hData)) {
|
|
status = true;
|
|
}
|
|
#endif
|
|
|
|
if (!status) {
|
|
return false;
|
|
}
|
|
|
|
*handle = reinterpret_cast<void*>(hData.handle);
|
|
*mbResHandle = reinterpret_cast<void*>(hData.mbResHandle);
|
|
*offset = static_cast<size_t>(hData.offset);
|
|
#ifdef ATI_OS_WIN
|
|
if (hData.isDoppDesktopTexture) {
|
|
doppDesktopInfo.gpuVirtAddr = hData.cardAddr;
|
|
doppDesktopInfo.vidPnSourceId = hData.vidpnSourceId;
|
|
} else {
|
|
doppDesktopInfo.gpuVirtAddr = 0;
|
|
doppDesktopInfo.vidPnSourceId = 0;
|
|
}
|
|
#endif
|
|
|
|
// OCL supports only a limited number of cm_surf formats, so we
|
|
// have to translate incoming cm_surf formats
|
|
uint index = hData.format - (uint)CM_SURF_FMT_LUMINANCE8;
|
|
if (index >= sizeof(cmFormatXlateTable) / sizeof(cmFormatXlateParams)) {
|
|
LogError("\nInvalid GL surface reported in hData\n");
|
|
return status;
|
|
}
|
|
assert(static_cast<cmSurfFmt>(hData.format) == cmFormatXlateTable[index].raw_cmFormat);
|
|
cl_channel_type imageDataType;
|
|
imageDataType = cmFormatXlateTable[index].image_channel_data_type;
|
|
if (imageDataType == 500) {
|
|
LogError("\nGL surface is not supported by OCL\n");
|
|
return status;
|
|
}
|
|
|
|
newClFormat.image_channel_data_type = cmFormatXlateTable[index].image_channel_data_type;
|
|
newClFormat.image_channel_order = cmFormatXlateTable[index].image_channel_order;
|
|
|
|
|
|
return status;
|
|
}
|
|
|
|
bool Device::resGLAcquire(void* GLplatformContext, void* mbResHandle, uint type) const {
|
|
amd::ScopedLock lk(lockPAL());
|
|
|
|
GLResource hRes = {};
|
|
hRes.mbResHandle = (GLuintp)mbResHandle;
|
|
hRes.type = type;
|
|
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
return (glxResourceAcquireAMD(ctx, &hRes)) ? true : false;
|
|
#else
|
|
HGLRC hRC = wglGetCurrentContext();
|
|
//! @todo A temporary workaround for MT issue in conformance fence_sync
|
|
if (0 == hRC) {
|
|
return true;
|
|
}
|
|
return (wglResourceAcquireAMD(hRC, &hRes)) ? true : false;
|
|
#endif
|
|
}
|
|
|
|
bool Device::resGLRelease(void* GLplatformContext, void* mbResHandle, uint type) const {
|
|
amd::ScopedLock lk(lockPAL());
|
|
|
|
GLResource hRes = {};
|
|
hRes.mbResHandle = (GLuintp)mbResHandle;
|
|
hRes.type = type;
|
|
#ifdef ATI_OS_LINUX
|
|
// TODO : make sure the application GL context is current. if not no
|
|
// point calling into the GL RT.
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
return (glxResourceReleaseAMD(ctx, &hRes)) ? true : false;
|
|
#else
|
|
// Make the call into the GL driver only if the application GL context is current
|
|
HGLRC hRC = wglGetCurrentContext();
|
|
//! @todo A temporary workaround for MT issue in conformance fence_sync
|
|
if (0 == hRC) {
|
|
return true;
|
|
}
|
|
return (wglResourceReleaseAMD(hRC, &hRes)) ? true : false;
|
|
#endif
|
|
}
|
|
|
|
bool Device::resGLFree(void* GLplatformContext, void* mbResHandle, uint type) const {
|
|
amd::ScopedLock lk(lockPAL());
|
|
|
|
GLResource hRes = {};
|
|
hRes.mbResHandle = (GLuintp)mbResHandle;
|
|
hRes.type = type;
|
|
#ifdef ATI_OS_LINUX
|
|
GLXContext ctx = (GLXContext)GLplatformContext;
|
|
return (glXResourceDetachAMD(ctx, &hRes)) ? true : false;
|
|
#else
|
|
HGLRC hRC = (HGLRC)GLplatformContext;
|
|
return (wglResourceDetachAMD(hRC, &hRes)) ? true : false;
|
|
#endif
|
|
}
|
|
|
|
} // pal
|