P4 to Git Change 1551967 by gandryey@gera-w8 on 2018/05/08 14:11:14
SWDEV-151981 - Removal of CPU support on Windows - Part 4. Remove CPU specific logic for CL-GL interop Affected files ... ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d10.cpp#17 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d10_amd.hpp#10 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d11.cpp#26 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d11_amd.hpp#14 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d9.cpp#35 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d9_amd.hpp#18 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_gl.cpp#58 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_gl_amd.hpp#21 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/interop.hpp#13 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/memory.hpp#103 edit
このコミットが含まれているのは:
@@ -1404,99 +1404,6 @@ void BufferD3D10::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool BufferD3D10::mapExtObjectInCQThread() {
|
||||
void* pCpuMem = NULL;
|
||||
HRESULT hr;
|
||||
D3D10_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D10_MAP_READ_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D10_MAP_READ;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D10_MAP_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getUsage() == D3D10_USAGE_STAGING) {
|
||||
// Can map directly
|
||||
hr = reinterpret_cast<ID3D10Buffer*>(getD3D10Resource())->Map(gpuMap, 0, &pCpuMem);
|
||||
if (hr != S_OK || !pCpuMem) {
|
||||
LogError("Cannot map ID3D10Buffer object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The buffer need to be mapped indirectly
|
||||
// Create auxiliary buffer
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10Resource()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
D3D10_BUFFER_DESC bufDesc = {getResourceByteSize(), D3D10_USAGE_STAGING, 0, cpuAccess, 0};
|
||||
ID3D10Buffer* pAuxBuf;
|
||||
hr = pD3D10Dev->CreateBuffer(&bufDesc, NULL, &pAuxBuf);
|
||||
if (hr != S_OK || !pAuxBuf) {
|
||||
LogError("\nCannot create auxiliary buffer");
|
||||
return false;
|
||||
}
|
||||
setD3D10AuxRes(pAuxBuf);
|
||||
// Copy contents of original buffer to auxiliary
|
||||
pD3D10Dev->CopyResource(pAuxBuf, getD3D10Resource());
|
||||
// Now map the aux buffer
|
||||
hr = pAuxBuf->Map(gpuMap, 0, &pCpuMem);
|
||||
if (hr != S_OK || !pCpuMem) {
|
||||
LogError("Cannot map D3D10 auxiliary buffer to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(pCpuMem);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BufferD3D10::unmapExtObjectInCQThread() {
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D10AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
reinterpret_cast<ID3D10Buffer*>(getD3D10AuxRes())->Unmap();
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10AuxRes()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
pD3D10Dev->CopyResource(getD3D10Resource(), getD3D10AuxRes());
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Buffer*>(getD3D10Resource())->Unmap();
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D10AuxRes()) {
|
||||
reinterpret_cast<ID3D10Buffer*>(getD3D10AuxRes())->Unmap();
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Buffer*>(getD3D10Resource())->Unmap();
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image1DD3D10 implementation
|
||||
//
|
||||
@@ -1507,16 +1414,6 @@ void Image1DD3D10::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image1DD3D10::mapExtObjectInCQThread() {
|
||||
LogError("\nImage1DD3D10::mapExtObjectInCQThread() is not implemented yet\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Image1DD3D10::unmapExtObjectInCQThread() {
|
||||
LogError("\nImage1DD3D10::unmapExtObjectInCQThread() is not implemented yet\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image2DD3D10 implementation
|
||||
//
|
||||
@@ -1527,106 +1424,6 @@ void Image2DD3D10::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image2DD3D10::mapExtObjectInCQThread() {
|
||||
D3D10_MAPPED_TEXTURE2D texture2D;
|
||||
HRESULT hr;
|
||||
D3D10_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D10_MAP_READ_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D10_MAP_READ;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D10_MAP_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getUsage() == D3D10_USAGE_STAGING) {
|
||||
// Can map directly
|
||||
hr = reinterpret_cast<ID3D10Texture2D*>(getD3D10Resource())
|
||||
->Map(getSubresource(), gpuMap, 0, &texture2D);
|
||||
if (hr != S_OK || !texture2D.pData) {
|
||||
LogError("Cannot map ID3D10Texture2D object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The texture needs to be mapped indirectly.
|
||||
// Create auxiliary texture.
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10Resource()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
D3D10_TEXTURE2D_DESC texDesc;
|
||||
reinterpret_cast<ID3D10Texture2D*>(getD3D10Resource())->GetDesc(&texDesc);
|
||||
texDesc.Usage = D3D10_USAGE_STAGING;
|
||||
texDesc.MipLevels = 1;
|
||||
texDesc.BindFlags = 0;
|
||||
texDesc.CPUAccessFlags = cpuAccess;
|
||||
texDesc.MiscFlags = 0;
|
||||
ID3D10Texture2D* pAuxTex;
|
||||
hr = pD3D10Dev->CreateTexture2D(&texDesc, NULL, &pAuxTex);
|
||||
if (hr != S_OK) {
|
||||
LogError("\nCannot create auxiliary 2D texture");
|
||||
return false;
|
||||
}
|
||||
setD3D10AuxRes(pAuxTex);
|
||||
// Copy contents of original texture to auxiliary
|
||||
pD3D10Dev->CopyResource(pAuxTex, getD3D10Resource());
|
||||
// Now map the aux texture
|
||||
hr = pAuxTex->Map(0, gpuMap, 0, &texture2D);
|
||||
if (hr != S_OK || !texture2D.pData) {
|
||||
LogError("Cannot map D3D10 auxiliary 2D texture to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(texture2D.pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Image2DD3D10::unmapExtObjectInCQThread() {
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D10AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
reinterpret_cast<ID3D10Texture2D*>(getD3D10AuxRes())->Unmap(0);
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10AuxRes()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
pD3D10Dev->CopyResource(getD3D10Resource(), getD3D10AuxRes());
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Texture2D*>(getD3D10Resource())->Unmap(getSubresource());
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D10AuxRes()) {
|
||||
reinterpret_cast<ID3D10Texture2D*>(getD3D10AuxRes())->Unmap(0);
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Texture2D*>(getD3D10Resource())->Unmap(getSubresource());
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image3DD3D10 implementation
|
||||
//
|
||||
@@ -1636,107 +1433,6 @@ void Image3DD3D10::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
|
||||
bool Image3DD3D10::mapExtObjectInCQThread() {
|
||||
D3D10_MAPPED_TEXTURE3D texture3D;
|
||||
HRESULT hr;
|
||||
D3D10_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D10_MAP_READ_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D10_MAP_READ;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D10_MAP_WRITE;
|
||||
cpuAccess = D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getUsage() == D3D10_USAGE_STAGING) {
|
||||
// Can map directly
|
||||
hr = reinterpret_cast<ID3D10Texture3D*>(getD3D10Resource())
|
||||
->Map(getSubresource(), gpuMap, 0, &texture3D);
|
||||
if (hr != S_OK || !texture3D.pData) {
|
||||
LogError("Cannot map ID3D10Texture3D object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The texture needs to be mapped indirectly.
|
||||
// Create auxiliary texture.
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10Resource()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
D3D10_TEXTURE3D_DESC texDesc;
|
||||
reinterpret_cast<ID3D10Texture3D*>(getD3D10Resource())->GetDesc(&texDesc);
|
||||
texDesc.Usage = D3D10_USAGE_STAGING;
|
||||
texDesc.MipLevels = 1;
|
||||
texDesc.BindFlags = 0;
|
||||
texDesc.CPUAccessFlags = cpuAccess;
|
||||
texDesc.MiscFlags = 0;
|
||||
ID3D10Texture3D* pAuxTex;
|
||||
hr = pD3D10Dev->CreateTexture3D(&texDesc, NULL, &pAuxTex);
|
||||
if (hr != S_OK) {
|
||||
LogError("\nCannot create auxiliary 3D texture");
|
||||
return false;
|
||||
}
|
||||
setD3D10AuxRes(pAuxTex);
|
||||
// Copy contents of original texture to auxiliary
|
||||
pD3D10Dev->CopyResource(pAuxTex, getD3D10Resource());
|
||||
// Now map the aux texture
|
||||
hr = pAuxTex->Map(0, gpuMap, 0, &texture3D);
|
||||
if (hr != S_OK || !texture3D.pData) {
|
||||
LogError("Cannot map D3D10 auxiliary 3D texture to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(texture3D.pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Image3DD3D10::unmapExtObjectInCQThread() {
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D10AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
reinterpret_cast<ID3D10Texture3D*>(getD3D10AuxRes())->Unmap(0);
|
||||
ID3D10Device* pD3D10Dev;
|
||||
getD3D10AuxRes()->GetDevice(&pD3D10Dev);
|
||||
if (!pD3D10Dev) {
|
||||
LogError("\nCannot get D3D10 device");
|
||||
return false;
|
||||
}
|
||||
pD3D10Dev->Release();
|
||||
pD3D10Dev->CopyResource(getD3D10Resource(), getD3D10AuxRes());
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Texture3D*>(getD3D10Resource())->Unmap(getSubresource());
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D10AuxRes()) {
|
||||
reinterpret_cast<ID3D10Texture3D*>(getD3D10AuxRes())->Unmap(0);
|
||||
getD3D10AuxRes()->Release();
|
||||
setD3D10AuxRes(NULL);
|
||||
} else {
|
||||
reinterpret_cast<ID3D10Texture3D*>(getD3D10Resource())->Unmap(getSubresource());
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace amd
|
||||
|
||||
#endif //_WIN32
|
||||
|
||||
@@ -240,10 +240,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~BufferD3D10() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image1DD3D10 is derived from classes Image1D and D3D10Object
|
||||
@@ -278,10 +274,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image1DD3D10() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image2DD3D10 is derived from classes Image2D and D3D10Object
|
||||
@@ -316,10 +308,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image2DD3D10() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image3DD3D10 is derived from classes Image3D and D3D10Object
|
||||
@@ -354,10 +342,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image3DD3D10() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Functions for executing the D3D10 related stuff
|
||||
|
||||
@@ -962,114 +962,6 @@ void BufferD3D11::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool BufferD3D11::mapExtObjectInCQThread() {
|
||||
D3D11_MAPPED_SUBRESOURCE mappedResource;
|
||||
HRESULT hr;
|
||||
D3D11_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D11_MAP_READ_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D11_MAP_READ;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D11_MAP_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11Resource()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getUsage() == D3D11_USAGE_STAGING) {
|
||||
// XXX Christophe: Use DeviceContext to map
|
||||
//// Can map directly
|
||||
hr = pImmediateContext->Map(getD3D11Resource(), 0, gpuMap, 0, &mappedResource);
|
||||
if (hr != S_OK || !mappedResource.pData) {
|
||||
LogError("Cannot map ID3D11Buffer object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The buffer need to be mapped indirectly
|
||||
// Create auxiliary buffer
|
||||
D3D11_BUFFER_DESC bufDesc = {getResourceByteSize(), D3D11_USAGE_STAGING, 0, cpuAccess, 0};
|
||||
ID3D11Buffer* pAuxBuf;
|
||||
hr = pD3D11Dev->CreateBuffer(&bufDesc, NULL, &pAuxBuf);
|
||||
if (hr != S_OK || !pAuxBuf) {
|
||||
LogError("\nCannot create auxiliary buffer");
|
||||
return false;
|
||||
}
|
||||
setD3D11AuxRes(pAuxBuf);
|
||||
// Copy contents of original buffer to auxiliary
|
||||
pImmediateContext->CopyResource(pAuxBuf, getD3D11Resource());
|
||||
// Now map the aux buffer
|
||||
hr = pImmediateContext->Map(pAuxBuf, 0, gpuMap, 0, &mappedResource);
|
||||
if (hr != S_OK || !mappedResource.pData) {
|
||||
LogError("Cannot map D3D11 auxiliary buffer to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(mappedResource.pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BufferD3D11::unmapExtObjectInCQThread() {
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11AuxRes()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D11AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
pImmediateContext->CopyResource(getD3D11Resource(), getD3D11AuxRes());
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), 0);
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D11AuxRes()) {
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), 0);
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image1DD3D11 implementation
|
||||
//
|
||||
@@ -1079,16 +971,6 @@ void Image1DD3D11::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image1DD3D11::mapExtObjectInCQThread() {
|
||||
LogError("\nImage1DD3D11::mapExtObjectInCQThread() is not implemented yet\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Image1DD3D11::unmapExtObjectInCQThread() {
|
||||
LogError("\nImage1DD3D11::unmapExtObjectInCQThread() is not implemented yet\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image2DD3D11 implementation
|
||||
//
|
||||
@@ -1099,119 +981,6 @@ void Image2DD3D11::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image2DD3D11::mapExtObjectInCQThread() {
|
||||
D3D11_MAPPED_SUBRESOURCE texture2D;
|
||||
HRESULT hr;
|
||||
D3D11_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D11_MAP_READ_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D11_MAP_READ;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D11_MAP_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11Resource()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getUsage() == D3D11_USAGE_STAGING) {
|
||||
// Can map directly
|
||||
hr = pImmediateContext->Map(getD3D11Resource(), getSubresource(), gpuMap, 0, &texture2D);
|
||||
if (hr != S_OK || !texture2D.pData) {
|
||||
LogError("Cannot map ID3D11Texture2D object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The texture needs to be mapped indirectly.
|
||||
// Create auxiliary texture.
|
||||
D3D11_TEXTURE2D_DESC texDesc;
|
||||
reinterpret_cast<ID3D11Texture2D*>(getD3D11Resource())->GetDesc(&texDesc);
|
||||
texDesc.Usage = D3D11_USAGE_STAGING;
|
||||
texDesc.MipLevels = 1;
|
||||
texDesc.BindFlags = 0;
|
||||
texDesc.CPUAccessFlags = cpuAccess;
|
||||
texDesc.MiscFlags = 0;
|
||||
ID3D11Texture2D* pAuxTex;
|
||||
hr = pD3D11Dev->CreateTexture2D(&texDesc, NULL, &pAuxTex);
|
||||
if (hr != S_OK) {
|
||||
LogError("\nCannot create auxiliary 2D texture");
|
||||
return false;
|
||||
}
|
||||
setD3D11AuxRes(pAuxTex);
|
||||
// Copy contents of original texture to auxiliary
|
||||
pImmediateContext->CopyResource(pAuxTex, getD3D11Resource());
|
||||
// Now map the aux texture
|
||||
hr = pImmediateContext->Map(pAuxTex, 0, gpuMap, 0, &texture2D);
|
||||
if (hr != S_OK || !texture2D.pData) {
|
||||
LogError("Cannot map D3D11 auxiliary 2D texture to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(texture2D.pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Image2DD3D11::unmapExtObjectInCQThread() {
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11AuxRes()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D11AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
pImmediateContext->CopyResource(getD3D11Resource(), getD3D11AuxRes());
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), getSubresource());
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D11AuxRes()) {
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), getSubresource());
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Class Image3DD3D11 implementation
|
||||
//
|
||||
@@ -1221,119 +990,6 @@ void Image3DD3D11::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image3DD3D11::mapExtObjectInCQThread() {
|
||||
D3D11_MAPPED_SUBRESOURCE texture3D;
|
||||
HRESULT hr;
|
||||
D3D11_MAP gpuMap;
|
||||
UINT cpuAccess;
|
||||
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
gpuMap = D3D11_MAP_READ_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
gpuMap = D3D11_MAP_READ;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
gpuMap = D3D11_MAP_WRITE;
|
||||
cpuAccess = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11AuxRes()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getUsage() == D3D11_USAGE_STAGING) {
|
||||
// Can map directly
|
||||
hr = pImmediateContext->Map(getD3D11Resource(), getSubresource(), gpuMap, 0, &texture3D);
|
||||
if (hr != S_OK || !texture3D.pData) {
|
||||
LogError("Cannot map ID3D11Texture3D object to CPU memory");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The texture needs to be mapped indirectly.
|
||||
// Create auxiliary texture.
|
||||
D3D11_TEXTURE3D_DESC texDesc;
|
||||
reinterpret_cast<ID3D11Texture3D*>(getD3D11Resource())->GetDesc(&texDesc);
|
||||
texDesc.Usage = D3D11_USAGE_STAGING;
|
||||
texDesc.MipLevels = 1;
|
||||
texDesc.BindFlags = 0;
|
||||
texDesc.CPUAccessFlags = cpuAccess;
|
||||
texDesc.MiscFlags = 0;
|
||||
ID3D11Texture3D* pAuxTex;
|
||||
hr = pD3D11Dev->CreateTexture3D(&texDesc, NULL, &pAuxTex);
|
||||
if (hr != S_OK) {
|
||||
LogError("\nCannot create auxiliary 3D texture");
|
||||
return false;
|
||||
}
|
||||
setD3D11AuxRes(pAuxTex);
|
||||
// Copy contents of original texture to auxiliary
|
||||
pImmediateContext->CopyResource(pAuxTex, getD3D11Resource());
|
||||
// Now map the aux texture
|
||||
hr = pImmediateContext->Map(pAuxTex, 0, gpuMap, 0, &texture3D);
|
||||
if (hr != S_OK || !texture3D.pData) {
|
||||
LogError("Cannot map D3D11 auxiliary 3D texture to CPU memory");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
setHostMem(texture3D.pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Image3DD3D11::unmapExtObjectInCQThread() {
|
||||
ID3D11Device* pD3D11Dev;
|
||||
getD3D11AuxRes()->GetDevice(&pD3D11Dev);
|
||||
if (!pD3D11Dev) {
|
||||
LogError("\nCannot get D3D11 device");
|
||||
return false;
|
||||
}
|
||||
pD3D11Dev->Release();
|
||||
ID3D11DeviceContext* pImmediateContext = NULL;
|
||||
pD3D11Dev->GetImmediateContext(&pImmediateContext);
|
||||
if (!pImmediateContext) {
|
||||
LogError("\nCannot get D3D11 device context");
|
||||
return false;
|
||||
}
|
||||
pImmediateContext->Release();
|
||||
if (getMemFlags() & (CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY)) {
|
||||
if (getD3D11AuxRes()) {
|
||||
// Need to copy data from aux to original
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
pImmediateContext->CopyResource(getD3D11Resource(), getD3D11AuxRes());
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), getSubresource());
|
||||
}
|
||||
} else {
|
||||
// Just unmap everything, no need to copy contents
|
||||
if (getD3D11AuxRes()) {
|
||||
pImmediateContext->Unmap(getD3D11AuxRes(), 0);
|
||||
getD3D11AuxRes()->Release();
|
||||
setD3D11AuxRes(NULL);
|
||||
} else {
|
||||
pImmediateContext->Unmap(getD3D11Resource(), getSubresource());
|
||||
}
|
||||
}
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Helper function SyncD3D11Objects
|
||||
//
|
||||
|
||||
@@ -251,10 +251,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~BufferD3D11() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image1DD3D11 is derived from classes Image1D and D3D11Object
|
||||
@@ -289,10 +285,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image1DD3D11() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image2DD3D11 is derived from classes Image2D and D3D11Object
|
||||
@@ -327,10 +319,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image2DD3D11() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Class Image3DD3D11 is derived from classes Image3D and D3D11Object
|
||||
@@ -365,10 +353,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image3DD3D11() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
//! Functions for executing the D3D11 related stuff
|
||||
|
||||
@@ -816,48 +816,6 @@ void Image2DD3D9::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool Image2DD3D9::mapExtObjectInCQThread() {
|
||||
void* pCpuMem = NULL;
|
||||
HRESULT hr;
|
||||
DWORD lockFlags = 0;
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_WRITE) {
|
||||
lockFlags = 0;
|
||||
} else if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
lockFlags = D3DLOCK_READONLY;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
lockFlags = D3DLOCK_DISCARD;
|
||||
} else {
|
||||
// Should not get here, the flags had been checked before
|
||||
LogError("\nInvalid memrory flags");
|
||||
return false;
|
||||
}
|
||||
ScopedLock sl(getResLock());
|
||||
|
||||
D3DLOCKED_RECT lockedRect;
|
||||
hr = getD3D9Resource()->LockRect(&lockedRect, NULL, lockFlags);
|
||||
if ((hr != D3D_OK) || !lockedRect.pBits) {
|
||||
LogError("Cannot lock D3D9 surface for CPU access");
|
||||
return false;
|
||||
}
|
||||
|
||||
setHostMem(lockedRect.pBits);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Image2DD3D9::unmapExtObjectInCQThread() {
|
||||
HRESULT hr;
|
||||
ScopedLock sl(getResLock());
|
||||
hr = getD3D9Resource()->UnlockRect();
|
||||
if (hr != D3D_OK) {
|
||||
LogError("Cannot unlock D3D9 surface");
|
||||
return false;
|
||||
}
|
||||
|
||||
setHostMem(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace amd
|
||||
|
||||
#endif //_WIN32
|
||||
|
||||
@@ -311,10 +311,6 @@ public:
|
||||
setInteropObj(this);
|
||||
}
|
||||
virtual ~Image2DD3D9() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
cl_mem clCreateImage2DFromD3D9ResourceAMD(
|
||||
|
||||
@@ -814,9 +814,7 @@ RUNTIME_ENTRY(cl_int, clGetGLContextInfoKHR,
|
||||
size_t param_value_size, void* param_value, size_t* param_value_size_ret)) {
|
||||
cl_int errcode;
|
||||
cl_device_id* gpu_devices;
|
||||
cl_device_id* cpu_devices;
|
||||
cl_uint num_gpu_devices = 0;
|
||||
cl_uint num_cpu_devices = 0;
|
||||
amd::Context::Info info;
|
||||
static const bool VALIDATE_ONLY = true;
|
||||
|
||||
@@ -835,12 +833,8 @@ RUNTIME_ENTRY(cl_int, clGetGLContextInfoKHR,
|
||||
if (errcode != CL_SUCCESS && errcode != CL_DEVICE_NOT_FOUND) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
errcode = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, 0, NULL, &num_cpu_devices);
|
||||
if (errcode != CL_SUCCESS && errcode != CL_DEVICE_NOT_FOUND) {
|
||||
return CL_INVALID_VALUE;
|
||||
}
|
||||
|
||||
if (!num_gpu_devices && !num_cpu_devices) {
|
||||
if (!num_gpu_devices) {
|
||||
return CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR;
|
||||
}
|
||||
|
||||
@@ -865,25 +859,17 @@ RUNTIME_ENTRY(cl_int, clGetGLContextInfoKHR,
|
||||
}
|
||||
|
||||
*not_null(param_value_size_ret) = 0;
|
||||
} else {
|
||||
cpu_devices = (cl_device_id*)alloca(num_cpu_devices * sizeof(cl_device_id));
|
||||
|
||||
errcode = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, num_cpu_devices, cpu_devices, NULL);
|
||||
if (errcode != CL_SUCCESS) {
|
||||
return errcode;
|
||||
}
|
||||
return amd::clGetInfo(cpu_devices[0], param_value_size, param_value, param_value_size_ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case CL_DEVICES_FOR_GL_CONTEXT_KHR: {
|
||||
// List of all CL devices that can be associated with the specified OpenGL context.
|
||||
cl_uint total_devices = num_gpu_devices + num_cpu_devices;
|
||||
cl_uint total_devices = num_gpu_devices;
|
||||
size_t size = total_devices * sizeof(cl_device_id);
|
||||
|
||||
cl_device_id* devices = (cl_device_id*)alloca(size);
|
||||
|
||||
errcode = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU | CL_DEVICE_TYPE_CPU, total_devices,
|
||||
errcode = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, total_devices,
|
||||
devices, NULL);
|
||||
if (errcode != CL_SUCCESS) {
|
||||
return errcode;
|
||||
@@ -1310,58 +1296,6 @@ void BufferGL::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool BufferGL::mapExtObjectInCQThread() {
|
||||
assert(!context_().glenv()->isEGL());
|
||||
GLFunctions::SetIntEnv ie(context_().glenv());
|
||||
if (!ie.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GLenum glAccess = GL_READ_WRITE; // Default
|
||||
if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
glAccess = GL_READ_ONLY;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
glAccess = GL_WRITE_ONLY;
|
||||
}
|
||||
clearGLErrors(context_());
|
||||
context_().glenv()->glBindBuffer_(GL_ARRAY_BUFFER, gluiName_);
|
||||
|
||||
void* pCpuMem = context_().glenv()->glMapBuffer_(GL_ARRAY_BUFFER, glAccess);
|
||||
|
||||
if (checkForGLError(context_()) != GL_NO_ERROR || !pCpuMem) {
|
||||
LogError("cannot map GL buffer");
|
||||
return false;
|
||||
}
|
||||
|
||||
setHostMem(pCpuMem);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BufferGL::unmapExtObjectInCQThread() {
|
||||
assert(!context_().glenv()->isEGL());
|
||||
GLFunctions::SetIntEnv ie(context_().glenv());
|
||||
if (!ie.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
clearGLErrors(context_());
|
||||
context_().glenv()->glBindBuffer_(GL_ARRAY_BUFFER, gluiName_);
|
||||
|
||||
if (GL_FALSE == context_().glenv()->glUnmapBuffer_(GL_ARRAY_BUFFER)) {
|
||||
LogError("context_().glenv()->glUnmapBuffer_ returned GL_FALSE - buffer may be corrupted");
|
||||
return false;
|
||||
}
|
||||
if (checkForGLError(context_()) != GL_NO_ERROR) {
|
||||
LogWarning("Error unmapping GL buffer");
|
||||
return false;
|
||||
}
|
||||
|
||||
setHostMem(NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static GLenum clChannelDataTypeToGlType(cl_channel_type channel_type) {
|
||||
// Pick
|
||||
// GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT,
|
||||
@@ -1433,92 +1367,6 @@ void ImageGL::initDeviceMemory() {
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
bool ImageGL::mapExtObjectInCQThread() {
|
||||
assert(!context_().glenv()->isEGL());
|
||||
GLFunctions::SetIntEnv ie(context_().glenv());
|
||||
if (!ie.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GLenum glAccess = GL_READ_WRITE; // Default
|
||||
|
||||
if (getMemFlags() & CL_MEM_READ_ONLY) {
|
||||
glAccess = GL_READ_ONLY;
|
||||
} else if (getMemFlags() & CL_MEM_WRITE_ONLY) {
|
||||
glAccess = GL_WRITE_ONLY;
|
||||
}
|
||||
clearGLErrors(context_());
|
||||
context_().glenv()->glBindTexture_(getGLTarget(), gluiName_);
|
||||
|
||||
size_t mem_size = getSize();
|
||||
|
||||
char* pCpuMem = new char[mem_size];
|
||||
if (pCpuMem == NULL) {
|
||||
LogError("Cannot alloc host memory for ImageGL");
|
||||
return false;
|
||||
}
|
||||
|
||||
context_().glenv()->glGetTexImage_(
|
||||
getGLTarget(), gliMipLevel_, glInternalFormatToGlFormat(glInternalFormat_),
|
||||
clChannelDataTypeToGlType(getImageFormat().image_channel_data_type), pCpuMem);
|
||||
|
||||
if (checkForGLError(context_()) != GL_NO_ERROR) {
|
||||
LogError("cannot map GL texture");
|
||||
delete[] pCpuMem;
|
||||
return false;
|
||||
}
|
||||
|
||||
setHostMem(pCpuMem);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ImageGL::unmapExtObjectInCQThread() {
|
||||
assert(!context_().glenv()->isEGL());
|
||||
GLFunctions::SetIntEnv ie(context_().glenv());
|
||||
if (!ie.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool status = true;
|
||||
|
||||
clearGLErrors(context_());
|
||||
context_().glenv()->glBindTexture_(getGLTarget(), gluiName_);
|
||||
|
||||
char* pCpuMem = (char*)getHostMem();
|
||||
|
||||
if (checkForGLError(context_()) != GL_NO_ERROR) {
|
||||
LogError("Cannot map GL texture");
|
||||
status = false;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
context_().glenv()->glTexImage2D_(
|
||||
getGLTarget(), // target
|
||||
gliMipLevel_, // miplevel
|
||||
glInternalFormat_, // internalFormat or bytes per pixel
|
||||
gliWidth_, // width
|
||||
gliHeight_, // height
|
||||
0, // border
|
||||
// format
|
||||
glInternalFormatToGlFormat(glInternalFormat_),
|
||||
// type
|
||||
clChannelDataTypeToGlType(getImageFormat().image_channel_data_type),
|
||||
pCpuMem); // data
|
||||
|
||||
if (checkForGLError(context_()) != GL_NO_ERROR) {
|
||||
LogError("Cannot update GL texture");
|
||||
status = false;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
delete[] pCpuMem;
|
||||
setHostMem(NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
//*******************************************************************
|
||||
//
|
||||
// Internal implementation of CL API functions
|
||||
@@ -1615,15 +1463,13 @@ cl_mem clCreateFromGLBufferAMD(Context& amdContext, cl_mem_flags flags, GLuint b
|
||||
const auto it = amdContext.devices().cbegin();
|
||||
const amd::Device& dev = *(*it);
|
||||
|
||||
if (dev.type() != CL_DEVICE_TYPE_CPU) {
|
||||
device::Memory* mem = pBufferGL->getDeviceMemory(dev);
|
||||
if (NULL == mem) {
|
||||
LogPrintfError("Can't allocate memory size - 0x%08X bytes!", pBufferGL->getSize());
|
||||
*not_null(errcode_ret) = CL_INVALID_GL_OBJECT;
|
||||
return (cl_mem)0;
|
||||
}
|
||||
mem->processGLResource(device::Memory::GLDecompressResource);
|
||||
device::Memory* mem = pBufferGL->getDeviceMemory(dev);
|
||||
if (NULL == mem) {
|
||||
LogPrintfError("Can't allocate memory size - 0x%08X bytes!", pBufferGL->getSize());
|
||||
*not_null(errcode_ret) = CL_INVALID_GL_OBJECT;
|
||||
return (cl_mem)0;
|
||||
}
|
||||
mem->processGLResource(device::Memory::GLDecompressResource);
|
||||
|
||||
return as_cl<Memory>(pBufferGL);
|
||||
}
|
||||
|
||||
@@ -131,10 +131,6 @@ public:
|
||||
virtual ~BufferGL() {}
|
||||
|
||||
virtual BufferGL* asBufferGL() { return this; }
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
};
|
||||
|
||||
|
||||
@@ -173,10 +169,6 @@ public:
|
||||
|
||||
virtual ~ImageGL() {}
|
||||
|
||||
//! For CPU device only!
|
||||
virtual bool mapExtObjectInCQThread(void);
|
||||
virtual bool unmapExtObjectInCQThread(void);
|
||||
|
||||
protected:
|
||||
//! Initializes the device memory array which is nested
|
||||
// after'BufferGL' object in memory layout.
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする