Handle copy cases where the uses pases a bad ptr
Change-Id: I4490b8519e4d0dde25b845f9ca7e81c1d80d4f28
This commit is contained in:
committed by
Vladislav Sytchenko
orang tua
b75b602601
melakukan
cf52b5fca4
+24
-17
@@ -911,13 +911,13 @@ hipError_t ihipMemcpyAtoD(hipArray* srcArray,
|
|||||||
hipStream_t stream,
|
hipStream_t stream,
|
||||||
bool isAsync = false) {
|
bool isAsync = false) {
|
||||||
cl_mem srcMemObj = reinterpret_cast<cl_mem>(srcArray->data);
|
cl_mem srcMemObj = reinterpret_cast<cl_mem>(srcArray->data);
|
||||||
if (is_valid(srcMemObj) == false) {
|
size_t dstOffset = 0;
|
||||||
|
amd::Memory* dstMemory = getMemoryObject(dstDevice, dstOffset);
|
||||||
|
if (!is_valid(srcMemObj) || (dstMemory == nullptr)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
amd::Image* srcImage = as_amd(srcMemObj)->asImage();
|
amd::Image* srcImage = as_amd(srcMemObj)->asImage();
|
||||||
size_t dstOffset = 0;
|
|
||||||
amd::Memory* dstMemory = getMemoryObject(dstDevice, dstOffset);
|
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcImage->getRowPitch(), srcImage->getSlicePitch())) {
|
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcImage->getRowPitch(), srcImage->getSlicePitch())) {
|
||||||
@@ -970,13 +970,13 @@ hipError_t ihipMemcpyDtoA(void* srcDevice,
|
|||||||
size_t srcSlicePitch,
|
size_t srcSlicePitch,
|
||||||
hipStream_t stream,
|
hipStream_t stream,
|
||||||
bool isAsync = false) {
|
bool isAsync = false) {
|
||||||
|
size_t srcOffset = 0;
|
||||||
|
amd::Memory* srcMemory = getMemoryObject(srcDevice, srcOffset);
|
||||||
cl_mem dstMemObj = reinterpret_cast<cl_mem>(dstArray->data);
|
cl_mem dstMemObj = reinterpret_cast<cl_mem>(dstArray->data);
|
||||||
if (is_valid(dstMemObj) == false) {
|
if ((srcMemory == nullptr) || !is_valid(dstMemObj)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t srcOffset = 0;
|
|
||||||
amd::Memory* srcMemory = getMemoryObject(srcDevice, srcOffset);
|
|
||||||
amd::Image* dstImage = as_amd(dstMemObj)->asImage();
|
amd::Image* dstImage = as_amd(dstMemObj)->asImage();
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
@@ -1037,6 +1037,10 @@ hipError_t ihipMemcpyDtoD(void* srcDevice,
|
|||||||
size_t dstOffset = 0;
|
size_t dstOffset = 0;
|
||||||
amd::Memory *dstMemory = getMemoryObject(dstDevice, dstOffset);
|
amd::Memory *dstMemory = getMemoryObject(dstDevice, dstOffset);
|
||||||
|
|
||||||
|
if ((srcMemory == nullptr) || (dstMemory == nullptr)) {
|
||||||
|
return hipErrorInvalidValue;
|
||||||
|
}
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
@@ -1101,6 +1105,10 @@ hipError_t ihipMemcpyDtoH(void* srcDevice,
|
|||||||
size_t srcOffset = 0;
|
size_t srcOffset = 0;
|
||||||
amd::Memory *srcMemory = getMemoryObject(srcDevice, srcOffset);
|
amd::Memory *srcMemory = getMemoryObject(srcDevice, srcOffset);
|
||||||
|
|
||||||
|
if ((srcMemory == nullptr) || (dstHost == nullptr)) {
|
||||||
|
return hipErrorInvalidValue;
|
||||||
|
}
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
@@ -1156,6 +1164,10 @@ hipError_t ihipMemcpyHtoD(const void* srcHost,
|
|||||||
size_t dstOffset = 0;
|
size_t dstOffset = 0;
|
||||||
amd::Memory *dstMemory = getMemoryObject(dstDevice, dstOffset);
|
amd::Memory *dstMemory = getMemoryObject(dstDevice, dstOffset);
|
||||||
|
|
||||||
|
if ((srcHost == nullptr) || (dstMemory == nullptr)) {
|
||||||
|
return hipErrorInvalidValue;
|
||||||
|
}
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
@@ -1206,6 +1218,10 @@ hipError_t ihipMemcpyHtoH(const void* srcHost,
|
|||||||
size_t srcSlicePitch,
|
size_t srcSlicePitch,
|
||||||
size_t dstRowPitch,
|
size_t dstRowPitch,
|
||||||
size_t dstSlicePitch) {
|
size_t dstSlicePitch) {
|
||||||
|
if ((srcHost == nullptr) || (dstHost == nullptr)) {
|
||||||
|
return hipErrorInvalidValue;
|
||||||
|
}
|
||||||
|
|
||||||
amd::BufferRect srcRect;
|
amd::BufferRect srcRect;
|
||||||
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
if (!srcRect.create(static_cast<size_t*>(srcOrigin), static_cast<size_t*>(copyRegion), srcRowPitch, srcSlicePitch)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
@@ -1287,12 +1303,8 @@ hipError_t ihipMemcpyHtoA(const void* srcHost,
|
|||||||
size_t srcSlicePitch,
|
size_t srcSlicePitch,
|
||||||
hipStream_t stream,
|
hipStream_t stream,
|
||||||
bool isAsync = false) {
|
bool isAsync = false) {
|
||||||
if (srcHost == nullptr) {
|
|
||||||
return hipErrorInvalidValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
cl_mem dstMemObj = reinterpret_cast<cl_mem>(dstArray->data);
|
cl_mem dstMemObj = reinterpret_cast<cl_mem>(dstArray->data);
|
||||||
if (is_valid(dstMemObj) == false) {
|
if ((srcHost == nullptr) || !is_valid(dstMemObj)) {
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1344,11 +1356,7 @@ hipError_t ihipMemcpyAtoH(hipArray* srcArray,
|
|||||||
hipStream_t stream,
|
hipStream_t stream,
|
||||||
bool isAsync = false) {
|
bool isAsync = false) {
|
||||||
cl_mem srcMemObj = reinterpret_cast<cl_mem>(srcArray->data);
|
cl_mem srcMemObj = reinterpret_cast<cl_mem>(srcArray->data);
|
||||||
if (!is_valid(srcMemObj)) {
|
if (!is_valid(srcMemObj) || (dstHost == nullptr)) {
|
||||||
return hipErrorInvalidValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dstHost == nullptr) {
|
|
||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1357,7 +1365,6 @@ hipError_t ihipMemcpyAtoH(hipArray* srcArray,
|
|||||||
return hipErrorInvalidValue;
|
return hipErrorInvalidValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
amd::Image* srcImage = as_amd(srcMemObj)->asImage();
|
amd::Image* srcImage = as_amd(srcMemObj)->asImage();
|
||||||
// HIP assumes the width is in bytes, but OCL assumes it's in pixels.
|
// HIP assumes the width is in bytes, but OCL assumes it's in pixels.
|
||||||
const size_t elementSize = srcImage->getImageFormat().getElementSize();
|
const size_t elementSize = srcImage->getImageFormat().getElementSize();
|
||||||
|
|||||||
Reference in New Issue
Block a user