P4 to Git Change 1264764 by wchau@wchau_WIN_OCL_HSA on 2016/05/03 16:46:02
SWDEV-93075 - [OCL] Access violation in clCreateContext() in amdocl.dll when DX9 and DX11 devices are used. Add support for multiple external devices for context creation to make sure the devices are initialized with proper type.
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_context.cpp#50 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d10.cpp#12 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d11.cpp#19 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d9.cpp#29 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpudevice.hpp#95 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#274 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.cpp#547 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.hpp#160 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpumemory.cpp#128 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hsa_foundation/hsadevice.cpp#62 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hsa_foundation/hsadevice.hpp#30 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/context.cpp#41 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/context.hpp#25 edit
[ROCm/clr commit: 6a5cdbf60c]
Этот коммит содержится в:
@@ -122,12 +122,12 @@ public:
|
||||
//! Needed for OpenGL objects on CPU device
|
||||
|
||||
//! Return true if initialized interoperability, otherwise false
|
||||
virtual bool bindExternalDevice(uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
virtual bool bindExternalDevice(uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
return true; // On CPU always avail if pD3DDevice is not NULL
|
||||
}
|
||||
|
||||
virtual bool unbindExternalDevice(uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
virtual bool unbindExternalDevice(uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1657,14 +1657,14 @@ public:
|
||||
//! Return true if initialized external API interop, otherwise false
|
||||
virtual bool bindExternalDevice(
|
||||
uint flags, //!< Enum val. for ext.API type: GL, D3D10, etc.
|
||||
void* pDevice, //!< D3D device do D3D, HDC/Display handle of X Window for GL
|
||||
void* const pDevice[], //!< D3D device do D3D, HDC/Display handle of X Window for GL
|
||||
void* pContext, //!< HGLRC/GLXContext handle
|
||||
bool validateOnly //! Only validate if the device can inter-operate with pDevice/pContext, do not bind.
|
||||
) = 0;
|
||||
|
||||
virtual bool unbindExternalDevice(
|
||||
uint flags, //!< Enum val. for ext.API type: GL, D3D10, etc.
|
||||
void* pDevice, //!< D3D device do D3D, HDC/Display handle of X Window for GL
|
||||
void* const pDevice[], //!< D3D device do D3D, HDC/Display handle of X Window for GL
|
||||
void* pContext, //!< HGLRC/GLXContext handle
|
||||
bool validateOnly //! Only validate if the device can inter-operate with pDevice/pContext, do not bind.
|
||||
) = 0;
|
||||
|
||||
@@ -1769,7 +1769,7 @@ Device::createView(amd::Memory& owner, const device::Memory& parent) const
|
||||
//! Attempt to bind with external graphics API's device/context
|
||||
bool
|
||||
Device::bindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
assert(pDevice);
|
||||
|
||||
@@ -1781,15 +1781,16 @@ Device::bindExternalDevice(
|
||||
PerformAdapterInitialization();
|
||||
|
||||
// Attempt to associate GSL-OGL
|
||||
if (!glAssociate((CALvoid*)pContext, pDevice)) {
|
||||
if (!glAssociate((CALvoid*)pContext, pDevice[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx])) {
|
||||
if (!validateOnly) {
|
||||
LogError("Failed gslGLAssociate()");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
else if (flags & amd::Context::Flags::D3D10DeviceKhr) {
|
||||
if (flags & amd::Context::Flags::D3D10DeviceKhr) {
|
||||
// There is no need to perform full initialization here
|
||||
// if the GSLDevice is still uninitialized.
|
||||
// Only adapter initialization is required
|
||||
@@ -1798,12 +1799,13 @@ Device::bindExternalDevice(
|
||||
|
||||
// Associate GSL-D3D
|
||||
if (!associateD3D10Device(
|
||||
reinterpret_cast<ID3D10Device*>(pDevice))) {
|
||||
reinterpret_cast<ID3D10Device*>(pDevice[amd::Context::DeviceFlagIdx::D3D10DeviceKhrIdx]))) {
|
||||
LogError("Failed gslD3D10Associate()");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D11DeviceKhr) {
|
||||
|
||||
if (flags & amd::Context::Flags::D3D11DeviceKhr) {
|
||||
// There is no need to perform full initialization here
|
||||
// if the GSLDevice is still uninitialized.
|
||||
// Only adapter initialization is required to validate
|
||||
@@ -1812,47 +1814,51 @@ Device::bindExternalDevice(
|
||||
|
||||
// Associate GSL-D3D
|
||||
if (!associateD3D11Device(
|
||||
reinterpret_cast<ID3D11Device*>(pDevice))) {
|
||||
reinterpret_cast<ID3D11Device*>(pDevice[amd::Context::DeviceFlagIdx::D3D11DeviceKhrIdx]))) {
|
||||
LogError("Failed gslD3D11Associate()");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D9DeviceKhr) {
|
||||
|
||||
if (flags & amd::Context::Flags::D3D9DeviceKhr) {
|
||||
PerformAdapterInitialization();
|
||||
|
||||
// Associate GSL-D3D
|
||||
if (!associateD3D9Device(
|
||||
reinterpret_cast<IDirect3DDevice9*>(pDevice))) {
|
||||
reinterpret_cast<IDirect3DDevice9*>(pDevice[amd::Context::DeviceFlagIdx::D3D9DeviceKhrIdx]))) {
|
||||
LogWarning("D3D9<->OpenCL adapter mismatch or D3D9Associate() failure");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D9DeviceEXKhr) {
|
||||
|
||||
if (flags & amd::Context::Flags::D3D9DeviceEXKhr) {
|
||||
PerformAdapterInitialization();
|
||||
|
||||
// Associate GSL-D3D
|
||||
if (!associateD3D9Device(
|
||||
reinterpret_cast<IDirect3DDevice9Ex*>(pDevice))) {
|
||||
reinterpret_cast<IDirect3DDevice9Ex*>(pDevice[amd::Context::DeviceFlagIdx::D3D9DeviceEXKhrIdx]))) {
|
||||
LogWarning("D3D9<->OpenCL adapter mismatch or D3D9Associate() failure");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D9DeviceVAKhr) {
|
||||
|
||||
if (flags & amd::Context::Flags::D3D9DeviceVAKhr) {
|
||||
}
|
||||
#endif //_WIN32
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Device::unbindExternalDevice(uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
Device::unbindExternalDevice(uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
if ((flags & amd::Context::Flags::GLDeviceKhr) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pDevice != NULL) {
|
||||
void * glDevice = pDevice[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx];
|
||||
if (glDevice != NULL) {
|
||||
// Dissociate GSL-OGL
|
||||
if (true != glDissociate(pContext, pDevice)) {
|
||||
if (true != glDissociate(pContext, glDevice)) {
|
||||
if (validateOnly) {
|
||||
LogWarning("Failed gslGLDiassociate()");
|
||||
}
|
||||
|
||||
@@ -95,10 +95,10 @@ public:
|
||||
//! Needed for OpenGL objects on CPU device
|
||||
|
||||
virtual bool bindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly) { return true; }
|
||||
uint flags, void* const pDevice[], void* pContext, bool validateOnly) { return true; }
|
||||
|
||||
virtual bool unbindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly) { return true; }
|
||||
uint flags, void* const pDevice[], void* pContext, bool validateOnly) { return true; }
|
||||
|
||||
//! Releases non-blocking map target memory
|
||||
virtual void freeMapTarget(amd::Memory& mem, void* target) {}
|
||||
@@ -429,14 +429,14 @@ public:
|
||||
//! Attempt to bind with external graphics API's device/context
|
||||
virtual bool bindExternalDevice(
|
||||
uint flags,
|
||||
void* pDevice,
|
||||
void* const pDevice[],
|
||||
void* pContext,
|
||||
bool validateOnly);
|
||||
|
||||
//! Attempt to unbind with external graphics API's device/context
|
||||
virtual bool unbindExternalDevice(
|
||||
uint flags,
|
||||
void* pDevice,
|
||||
void* const pDevice[],
|
||||
void* pContext,
|
||||
bool validateOnly);
|
||||
|
||||
|
||||
@@ -268,6 +268,7 @@ Memory::createInterop(InteropType type)
|
||||
assert((interop != NULL) && "An invalid interop object is impossible!");
|
||||
|
||||
amd::GLObject* glObject = interop->asGLObject();
|
||||
|
||||
#ifdef _WIN32
|
||||
amd::D3D10Object* d3d10Object = interop->asD3D10Object();
|
||||
amd::D3D11Object* d3d11Object = interop->asD3D11Object();
|
||||
@@ -442,14 +443,15 @@ Memory::createInterop(InteropType type)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
oglRes.glPlatformContext_ = owner()->getContext().info().hCtx_;
|
||||
oglRes.glDeviceContext_ = owner()->getContext().info().hDev_[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx];
|
||||
// We dont pass any flags here for the GL Resource.
|
||||
oglRes.flags_ = 0;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
oglRes.glPlatformContext_ = owner()->getContext().info().hCtx_;
|
||||
oglRes.glDeviceContext_ = owner()->getContext().info().hDev_;
|
||||
// We dont pass any flags here for the GL Resource.
|
||||
oglRes.flags_ = 0;
|
||||
|
||||
// Get the interop settings
|
||||
if (type == InteropDirectAccess) {
|
||||
|
||||
@@ -1529,36 +1529,37 @@ Device::createView(amd::Memory& owner, const device::Memory& parent) const
|
||||
|
||||
//! Attempt to bind with external graphics API's device/context
|
||||
bool
|
||||
Device::bindExternalDevice(uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
Device::bindExternalDevice(uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
assert(pDevice);
|
||||
|
||||
#ifdef _WIN32
|
||||
if (flags & amd::Context::Flags::D3D10DeviceKhr) {
|
||||
if (!associateD3D10Device(pDevice)) {
|
||||
if (!associateD3D10Device(pDevice[amd::Context::DeviceFlagIdx::D3D10DeviceKhrIdx]));
|
||||
LogError("Failed gslD3D10Associate()");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D11DeviceKhr) {
|
||||
if (!associateD3D11Device(pDevice)) {
|
||||
|
||||
if (flags & amd::Context::Flags::D3D11DeviceKhr) {
|
||||
if (!associateD3D11Device(pDevice[amd::Context::DeviceFlagIdx::D3D11DeviceKhrIdx])) {
|
||||
LogError("Failed gslD3D11Associate()");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & (amd::Context::Flags::D3D9DeviceKhr |
|
||||
|
||||
if (flags & (amd::Context::Flags::D3D9DeviceKhr |
|
||||
amd::Context::Flags::D3D9DeviceEXKhr)) {
|
||||
if (!associateD3D9Device(pDevice)) {
|
||||
if (!associateD3D9Device(pDevice[amd::Context::DeviceFlagIdx::D3D9DeviceKhrIdx])) {
|
||||
LogWarning("D3D9<->OpenCL adapter mismatch or D3D9Associate() failure");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (flags & amd::Context::Flags::D3D9DeviceVAKhr) {
|
||||
}
|
||||
#endif //_WIN32
|
||||
|
||||
if (flags & amd::Context::Flags::GLDeviceKhr) {
|
||||
// Attempt to associate GSL-OGL
|
||||
if (!glAssociate(pContext, pDevice)) {
|
||||
if (!glAssociate(pContext, pDevice[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx])) {
|
||||
if (!validateOnly) {
|
||||
LogError("Failed gslGLAssociate()");
|
||||
}
|
||||
@@ -1570,15 +1571,16 @@ Device::bindExternalDevice(uint flags, void* pDevice, void* pContext, bool valid
|
||||
}
|
||||
|
||||
bool
|
||||
Device::unbindExternalDevice(uint flags, void* pDevice, void* pContext, bool validateOnly)
|
||||
Device::unbindExternalDevice(uint flags, void* const pDevice[], void* pContext, bool validateOnly)
|
||||
{
|
||||
if ((flags & amd::Context::Flags::GLDeviceKhr) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pDevice != nullptr) {
|
||||
void * glDevice = pDevice[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx];
|
||||
if (glDevice != nullptr) {
|
||||
// Dissociate GSL-OGL
|
||||
if (!glDissociate(pContext, pDevice)) {
|
||||
if (!glDissociate(pContext, glDevice)) {
|
||||
if (validateOnly) {
|
||||
LogWarning("Failed gslGLDiassociate()");
|
||||
}
|
||||
|
||||
@@ -89,10 +89,10 @@ public:
|
||||
//! Needed for OpenGL objects on CPU device
|
||||
|
||||
virtual bool bindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly) { return true; }
|
||||
uint flags, void* const pDevice[], void* pContext, bool validateOnly) { return true; }
|
||||
|
||||
virtual bool unbindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly) { return true; }
|
||||
uint flags, void* const pDevice[], void* pContext, bool validateOnly) { return true; }
|
||||
|
||||
//! Releases non-blocking map target memory
|
||||
virtual void freeMapTarget(amd::Memory& mem, void* target) {}
|
||||
@@ -348,11 +348,11 @@ public:
|
||||
|
||||
//! Attempt to bind with external graphics API's device/context
|
||||
virtual bool bindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly);
|
||||
uint flags, void* pDevice[], void* pContext, bool validateOnly);
|
||||
|
||||
//! Attempt to unbind with external graphics API's device/context
|
||||
virtual bool unbindExternalDevice(
|
||||
uint flags, void* pDevice, void* pContext, bool validateOnly);
|
||||
uint flags, void* pDevice[], void* pContext, bool validateOnly);
|
||||
|
||||
//! Validates kernel before execution
|
||||
virtual bool validateKernel(
|
||||
|
||||
@@ -399,14 +399,15 @@ Memory::createInterop(InteropType type)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
oglRes.glPlatformContext_ = owner()->getContext().info().hCtx_;
|
||||
oglRes.glDeviceContext_ = owner()->getContext().info().hDev_[amd::Context::DeviceFlagIdx::GLDeviceKhrIdx];
|
||||
// We dont pass any flags here for the GL Resource.
|
||||
oglRes.flags_ = 0;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
oglRes.glPlatformContext_ = owner()->getContext().info().hCtx_;
|
||||
oglRes.glDeviceContext_ = owner()->getContext().info().hDev_;
|
||||
// We dont pass any flags here for the GL Resource.
|
||||
oglRes.flags_ = 0;
|
||||
|
||||
// Get the interop settings
|
||||
if (type == InteropDirectAccess) {
|
||||
|
||||
@@ -118,52 +118,50 @@ Context::checkProperties(
|
||||
if (p->ptr == NULL) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
info->hDev_ = p->ptr;
|
||||
info->hDev_[D3D10DeviceKhrIdx] = p->ptr;
|
||||
info->flags_ |= D3D10DeviceKhr;
|
||||
break;
|
||||
case CL_CONTEXT_D3D11_DEVICE_KHR:
|
||||
if (p->ptr == NULL) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
info->hDev_ = p->ptr;
|
||||
info->hDev_[D3D11DeviceKhrIdx] = p->ptr;
|
||||
info->flags_ |= D3D11DeviceKhr;
|
||||
break;
|
||||
case CL_CONTEXT_ADAPTER_D3D9_KHR:
|
||||
if (p->ptr == NULL) { //not supported for xp
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
info->hDev_ = p->ptr;
|
||||
info->hDev_[D3D9DeviceKhrIdx] = p->ptr;
|
||||
info->flags_ |= D3D9DeviceKhr;
|
||||
break;
|
||||
case CL_CONTEXT_ADAPTER_D3D9EX_KHR:
|
||||
if (p->ptr == NULL) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
info->hDev_ = p->ptr;
|
||||
info->hDev_[D3D9DeviceEXKhrIdx] = p->ptr;
|
||||
info->flags_ |= D3D9DeviceEXKhr;
|
||||
break;
|
||||
case CL_CONTEXT_ADAPTER_DXVA_KHR:
|
||||
if (p->ptr == NULL) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
info->hDev_ = p->ptr;
|
||||
info->hDev_[D3D9DeviceVAKhrIdx] = p->ptr;
|
||||
info->flags_ |= D3D9DeviceVAKhr;
|
||||
break;
|
||||
#endif //_WIN32
|
||||
|
||||
case CL_EGL_DISPLAY_KHR:
|
||||
info->hDev_ = p->ptr;
|
||||
info->flags_ |= EGLDeviceKhr;
|
||||
|
||||
#ifdef _WIN32
|
||||
case CL_WGL_HDC_KHR:
|
||||
info->hDev_ = p->ptr;
|
||||
#endif //_WIN32
|
||||
|
||||
#if defined(__linux__)
|
||||
case CL_GLX_DISPLAY_KHR:
|
||||
info->hDev_ = p->ptr;
|
||||
#endif //linux
|
||||
info->hDev_[GLDeviceKhrIdx] = p->ptr;
|
||||
|
||||
#if defined(__APPLE__) || defined(__MACOSX)
|
||||
case CL_CGL_SHAREGROUP_KHR:
|
||||
@@ -267,7 +265,7 @@ Context::create(const intptr_t* properties)
|
||||
);
|
||||
|
||||
if (h && (glenv_ = new GLFunctions(h, (info_.flags_ & Flags::EGLDeviceKhr) != 0))) {
|
||||
if (!glenv_->init(reinterpret_cast<intptr_t>(info_.hDev_),
|
||||
if (!glenv_->init(reinterpret_cast<intptr_t>(info_.hDev_[GLDeviceKhrIdx]),
|
||||
reinterpret_cast<intptr_t>(info_.hCtx_))) {
|
||||
delete glenv_;
|
||||
glenv_ = NULL;
|
||||
|
||||
@@ -30,25 +30,40 @@ class Context : public RuntimeObject
|
||||
std::vector<Device*> devices_;
|
||||
|
||||
public:
|
||||
enum DeviceFlagIdx
|
||||
{
|
||||
GLDeviceKhrIdx = 0, //!< GL
|
||||
D3D10DeviceKhrIdx, //!< D3D10
|
||||
OfflineDevicesIdx, //!< Offline devices
|
||||
CommandInterceptIdx, //!< Command intercept
|
||||
D3D11DeviceKhrIdx, //!< D3D11
|
||||
InteropUserSyncIdx, //!< Interop user sync enabled
|
||||
D3D9DeviceKhrIdx, //!< d3d9 device
|
||||
D3D9DeviceEXKhrIdx, //!< d3d9EX device
|
||||
D3D9DeviceVAKhrIdx, //!< d3d9VA device
|
||||
EGLDeviceKhrIdx, //!< EGL device
|
||||
LastDeviceFlagIdx
|
||||
};
|
||||
|
||||
enum Flags
|
||||
{
|
||||
GLDeviceKhr = 1<<0, //!< GL
|
||||
D3D10DeviceKhr = 1<<1, //!< D3D10
|
||||
OfflineDevices = 1<<2, //!< Offline devices
|
||||
CommandIntercept = 1<<3, //!< Command intercept
|
||||
D3D11DeviceKhr = 1<<4, //!< D3D11
|
||||
InteropUserSync = 1<<5, //!< Interop user sync enabled
|
||||
D3D9DeviceKhr = 1<<6, //!< d3d9 device
|
||||
D3D9DeviceEXKhr = 1<<7, //!< d3d9EX device
|
||||
D3D9DeviceVAKhr = 1<<8, //!< d3d9VA device
|
||||
EGLDeviceKhr = 1<<9, //!< EGL device
|
||||
GLDeviceKhr = 1 << GLDeviceKhrIdx, //!< GL
|
||||
D3D10DeviceKhr = 1 << D3D10DeviceKhrIdx, //!< D3D10
|
||||
OfflineDevices = 1 << OfflineDevicesIdx, //!< Offline devices
|
||||
CommandIntercept = 1 << CommandInterceptIdx, //!< Command intercept
|
||||
D3D11DeviceKhr = 1 << D3D11DeviceKhrIdx, //!< D3D11
|
||||
InteropUserSync = 1 << InteropUserSyncIdx, //!< Interop user sync enabled
|
||||
D3D9DeviceKhr = 1 << D3D9DeviceKhrIdx, //!< d3d9 device
|
||||
D3D9DeviceEXKhr = 1 << D3D9DeviceEXKhrIdx, //!< d3d9EX device
|
||||
D3D9DeviceVAKhr = 1 << D3D9DeviceVAKhrIdx, //!< d3d9VA device
|
||||
EGLDeviceKhr = 1 << EGLDeviceKhrIdx, //!< EGL device
|
||||
};
|
||||
|
||||
//! Context info structure
|
||||
struct Info
|
||||
{
|
||||
uint flags_; //!< Context info flags
|
||||
void* hDev_; //!< Device object reference
|
||||
void* hDev_[LastDeviceFlagIdx]; //!< Device object reference
|
||||
void* hCtx_; //!< Context object reference
|
||||
size_t propertiesSize_;//!< Size of the original properties in bytes
|
||||
cl_int (CL_CALLBACK * commandIntercept_)(cl_event, cl_int *);
|
||||
|
||||
Ссылка в новой задаче
Block a user