| Index: src/image/SkImage_Gpu.cpp
|
| diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
|
| index f8e3b94aff877dad13287ab1dc7f8c60fe5d7576..b769e0a68409d9e6f7678602134a18a643885a5c 100644
|
| --- a/src/image/SkImage_Gpu.cpp
|
| +++ b/src/image/SkImage_Gpu.cpp
|
| @@ -409,16 +409,16 @@ namespace {
|
| class DTIBufferFiller
|
| {
|
| public:
|
| - explicit DTIBufferFiller(uintptr_t bufferAsInt)
|
| - : bufferAsInt_(bufferAsInt) {}
|
| + explicit DTIBufferFiller(char* bufferAsCharPtr)
|
| + : bufferAsCharPtr_(bufferAsCharPtr) {}
|
|
|
| void fillMember(const void* source, size_t memberOffset, size_t size) {
|
| - memcpy(reinterpret_cast<void*>(bufferAsInt_ + memberOffset), source, size);
|
| + memcpy(bufferAsCharPtr_ + memberOffset, source, size);
|
| }
|
|
|
| private:
|
|
|
| - uintptr_t bufferAsInt_;
|
| + char* bufferAsCharPtr_;
|
| };
|
| }
|
|
|
| @@ -552,15 +552,16 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox
|
| if (!fillMode) {
|
| return size;
|
| }
|
| - uintptr_t bufferAsInt = reinterpret_cast<uintptr_t>(buffer);
|
| - uintptr_t pixelsAsInt = bufferAsInt + pixelOffset;
|
| - void* pixels = reinterpret_cast<void*>(pixelsAsInt);
|
| + char* bufferAsCharPtr = reinterpret_cast<char*>(buffer);
|
| + char* pixelsAsCharPtr = bufferAsCharPtr + pixelOffset;
|
| + void* pixels = pixelsAsCharPtr;
|
| void* ct = nullptr;
|
| if (ctSize) {
|
| - ct = reinterpret_cast<void*>(bufferAsInt + ctOffset);
|
| + ct = bufferAsCharPtr + ctOffset;
|
| }
|
|
|
| - memcpy(reinterpret_cast<void*>(SkAlign8(pixelsAsInt)), pixmap.addr(), pixmap.getSafeSize());
|
| + memcpy(reinterpret_cast<void*>(SkAlign8(reinterpret_cast<uintptr_t>(pixelsAsCharPtr))),
|
| + pixmap.addr(), pixmap.getSafeSize());
|
| if (ctSize) {
|
| memcpy(ct, pixmap.ctable()->readColors(), ctSize);
|
| }
|
| @@ -569,7 +570,7 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox
|
| size_t rowBytes = pixmap.rowBytes();
|
| static_assert(std::is_standard_layout<DeferredTextureImage>::value,
|
| "offsetof, which we use below, requires the type have standard layout");
|
| - auto dtiBufferFiller = DTIBufferFiller{bufferAsInt};
|
| + auto dtiBufferFiller = DTIBufferFiller{bufferAsCharPtr};
|
| FILL_MEMBER(dtiBufferFiller, fGammaTreatment, &gammaTreatment);
|
| FILL_MEMBER(dtiBufferFiller, fContextUniqueID, &proxy.fContextUniqueID);
|
| int width = info.width();
|
| @@ -583,28 +584,24 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox
|
| FILL_MEMBER(dtiBufferFiller, fColorTableCnt, &ctCount);
|
| FILL_MEMBER(dtiBufferFiller, fColorTableData, &ct);
|
| FILL_MEMBER(dtiBufferFiller, fMipMapLevelCount, &mipMapLevelCount);
|
| - memcpy(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fMipMapLevelData[0].fPixelData)),
|
| + memcpy(bufferAsCharPtr + offsetof(DeferredTextureImage, fMipMapLevelData[0].fPixelData),
|
| &pixels, sizeof(pixels));
|
| - memcpy(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fMipMapLevelData[0].fRowBytes)),
|
| + memcpy(bufferAsCharPtr + offsetof(DeferredTextureImage, fMipMapLevelData[0].fRowBytes),
|
| &rowBytes, sizeof(rowBytes));
|
| if (colorSpaceSize) {
|
| - void* colorSpace = reinterpret_cast<void*>(bufferAsInt + colorSpaceOffset);
|
| + void* colorSpace = bufferAsCharPtr + colorSpaceOffset;
|
| FILL_MEMBER(dtiBufferFiller, fColorSpace, &colorSpace);
|
| FILL_MEMBER(dtiBufferFiller, fColorSpaceSize, &colorSpaceSize);
|
| - info.colorSpace()->writeToMemory(reinterpret_cast<void*>(bufferAsInt + colorSpaceOffset));
|
| + info.colorSpace()->writeToMemory(bufferAsCharPtr + colorSpaceOffset);
|
| } else {
|
| - memset(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fColorSpace)),
|
| + memset(bufferAsCharPtr + offsetof(DeferredTextureImage, fColorSpace),
|
| 0, sizeof(DeferredTextureImage::fColorSpace));
|
| - memset(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fColorSpaceSize)),
|
| + memset(bufferAsCharPtr + offsetof(DeferredTextureImage, fColorSpaceSize),
|
| 0, sizeof(DeferredTextureImage::fColorSpaceSize));
|
| }
|
|
|
| // Fill in the mipmap levels if they exist
|
| - uintptr_t mipLevelPtr = pixelsAsInt + SkAlign8(pixmap.getSafeSize());
|
| + char* mipLevelPtr = pixelsAsCharPtr + SkAlign8(pixmap.getSafeSize());
|
|
|
| if (useMipMaps) {
|
| static_assert(std::is_standard_layout<MipMapLevelData>::value,
|
| @@ -625,30 +622,25 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox
|
| mipmaps->getLevel(generatedMipLevelIndex, &mipLevel);
|
|
|
| // Make sure the mipmap data is after the start of the buffer
|
| - SkASSERT(mipLevelPtr > bufferAsInt);
|
| + SkASSERT(mipLevelPtr > bufferAsCharPtr);
|
| // Make sure the mipmap data starts before the end of the buffer
|
| - SkASSERT(static_cast<size_t>(mipLevelPtr) < bufferAsInt + pixelOffset + pixelSize);
|
| + SkASSERT(mipLevelPtr < bufferAsCharPtr + pixelOffset + pixelSize);
|
| // Make sure the mipmap data ends before the end of the buffer
|
| SkASSERT(mipLevelPtr + mipLevel.fPixmap.getSafeSize() <=
|
| - bufferAsInt + pixelOffset + pixelSize);
|
| + bufferAsCharPtr + pixelOffset + pixelSize);
|
|
|
| // getSafeSize includes rowbyte padding except for the last row,
|
| // right?
|
|
|
| - memcpy(reinterpret_cast<void*>(mipLevelPtr), mipLevel.fPixmap.addr(),
|
| - mipLevel.fPixmap.getSafeSize());
|
| + memcpy(mipLevelPtr, mipLevel.fPixmap.addr(), mipLevel.fPixmap.getSafeSize());
|
|
|
| - memcpy(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fMipMapLevelData) +
|
| - sizeof(MipMapLevelData) * (generatedMipLevelIndex + 1) +
|
| - offsetof(MipMapLevelData, fPixelData)),
|
| - &mipLevelPtr, sizeof(void*));
|
| + memcpy(bufferAsCharPtr + offsetof(DeferredTextureImage, fMipMapLevelData) +
|
| + sizeof(MipMapLevelData) * (generatedMipLevelIndex + 1) +
|
| + offsetof(MipMapLevelData, fPixelData), &mipLevelPtr, sizeof(void*));
|
| size_t rowBytes = mipLevel.fPixmap.rowBytes();
|
| - memcpy(reinterpret_cast<void*>(bufferAsInt +
|
| - offsetof(DeferredTextureImage, fMipMapLevelData) +
|
| - sizeof(MipMapLevelData) * (generatedMipLevelIndex + 1) +
|
| - offsetof(MipMapLevelData, fRowBytes)),
|
| - &rowBytes, sizeof(rowBytes));
|
| + memcpy(bufferAsCharPtr + offsetof(DeferredTextureImage, fMipMapLevelData) +
|
| + sizeof(MipMapLevelData) * (generatedMipLevelIndex + 1) +
|
| + offsetof(MipMapLevelData, fRowBytes), &rowBytes, sizeof(rowBytes));
|
|
|
| mipLevelPtr += SkAlign8(mipLevel.fPixmap.getSafeSize());
|
| }
|
|
|