Commit 876dc724 by Geoff Lang

Fix 64-bit build failures.

Update the BufferStorage classes to use size_t for all sizes and offsets. BufferStorage9 now uses a std::vector to manage its memory. BUG=angle:631 Change-Id: Iea4e7b33ede59a5b9c6a1245690c4b7865096fc3 Reviewed-on: https://chromium-review.googlesource.com/197819Reviewed-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent a18299c9
...@@ -180,7 +180,7 @@ int main(int argc, char **argv) ...@@ -180,7 +180,7 @@ int main(int argc, char **argv)
std::size_t height = header.dwHeight; std::size_t height = header.dwHeight;
std::size_t width = header.dwWidth; std::size_t width = header.dwWidth;
std::size_t levels = std::max(1U, static_cast<std::size_t>(header.dwMipMapCount)); std::size_t levels = std::max<size_t>(1, header.dwMipMapCount);
std::ofstream oss(outputFile); std::ofstream oss(outputFile);
oss << "// Automatically generated header from " << inputFile << ", a " << width << "x" << height; oss << "// Automatically generated header from " << inputFile << ", a " << width << "x" << height;
...@@ -197,8 +197,8 @@ int main(int argc, char **argv) ...@@ -197,8 +197,8 @@ int main(int argc, char **argv)
for (std::size_t i = 0; i < levels; ++i) for (std::size_t i = 0; i < levels; ++i)
{ {
std::size_t widthAtLevel = std::max(width >> i, 1U); std::size_t widthAtLevel = std::max<size_t>(width >> i, 1);
std::size_t heightAtLevel = std::max(height >> i, 1U); std::size_t heightAtLevel = std::max<size_t>(height >> i, 1);
std::size_t sizeAtLevel = static_cast<std::size_t>(std::ceil(widthAtLevel / static_cast<float>(blockWidth)) * std::size_t sizeAtLevel = static_cast<std::size_t>(std::ceil(widthAtLevel / static_cast<float>(blockWidth)) *
std::ceil(heightAtLevel / static_cast<float>(blockHeight))) * std::ceil(heightAtLevel / static_cast<float>(blockHeight))) *
blockSize; blockSize;
......
...@@ -77,21 +77,15 @@ ...@@ -77,21 +77,15 @@
[ [
'ANGLE_ENABLE_D3D11', 'ANGLE_ENABLE_D3D11',
], ],
'configurations': 'msvs_settings':
{ {
'Debug': 'VCLinkerTool':
{ {
'msvs_settings': 'AdditionalDependencies':
{ [
'VCLinkerTool': 'dxguid.lib',
{ ],
'AdditionalDependencies': },
[
'dxguid.lib',
]
}
},
}
}, },
}], }],
], ],
......
...@@ -644,7 +644,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, ...@@ -644,7 +644,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
if ((size_t)size + offset > buffer->size()) // Check for possible overflow of size + offset
if (!rx::IsUnsignedAdditionSafe<size_t>(size, offset))
{
return gl::error(GL_OUT_OF_MEMORY);
}
if (size + offset > buffer->size())
{ {
return gl::error(GL_INVALID_VALUE); return gl::error(GL_INVALID_VALUE);
} }
......
...@@ -22,12 +22,11 @@ class BufferStorage ...@@ -22,12 +22,11 @@ class BufferStorage
// The data returned is only guaranteed valid until next non-const method. // The data returned is only guaranteed valid until next non-const method.
virtual void *getData() = 0; virtual void *getData() = 0;
virtual void setData(const void* data, unsigned int size, unsigned int offset) = 0; virtual void setData(const void* data, size_t size, size_t offset) = 0;
virtual void copyData(BufferStorage* sourceStorage, unsigned int size, virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset) = 0;
unsigned int sourceOffset, unsigned int destOffset) = 0;
virtual void clear() = 0; virtual void clear() = 0;
virtual void markTransformFeedbackUsage() = 0; virtual void markTransformFeedbackUsage() = 0;
virtual unsigned int getSize() const = 0; virtual size_t getSize() const = 0;
virtual bool supportsDirectBinding() const = 0; virtual bool supportsDirectBinding() const = 0;
unsigned int getSerial() const; unsigned int getSerial() const;
......
...@@ -177,7 +177,7 @@ bool VertexBufferInterface::directStoragePossible(const gl::VertexAttribute &att ...@@ -177,7 +177,7 @@ bool VertexBufferInterface::directStoragePossible(const gl::VertexAttribute &att
unsigned int outputElementSize; unsigned int outputElementSize;
getVertexBuffer()->getSpaceRequired(attrib, 1, 0, &outputElementSize); getVertexBuffer()->getSpaceRequired(attrib, 1, 0, &outputElementSize);
alignment = std::min(static_cast<size_t>(outputElementSize), 4u); alignment = std::min<size_t>(outputElementSize, 4);
requiresConversion = (mRenderer->getVertexConversionType(vertexFormat) & VERTEX_CONVERT_CPU) != 0; requiresConversion = (mRenderer->getVertexConversionType(vertexFormat) & VERTEX_CONVERT_CPU) != 0;
} }
......
...@@ -204,7 +204,7 @@ void *BufferStorage11::getData() ...@@ -204,7 +204,7 @@ void *BufferStorage11::getData()
return mResolvedData.data(); return mResolvedData.data();
} }
void BufferStorage11::setData(const void* data, unsigned int size, unsigned int offset) void BufferStorage11::setData(const void* data, size_t size, size_t offset)
{ {
size_t requiredSize = size + offset; size_t requiredSize = size + offset;
mSize = std::max(mSize, requiredSize); mSize = std::max(mSize, requiredSize);
...@@ -239,8 +239,7 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int ...@@ -239,8 +239,7 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int
} }
} }
void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size, void BufferStorage11::copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset)
unsigned int sourceOffset, unsigned int destOffset)
{ {
BufferStorage11* sourceStorage11 = makeBufferStorage11(sourceStorage); BufferStorage11* sourceStorage11 = makeBufferStorage11(sourceStorage);
if (sourceStorage11) if (sourceStorage11)
...@@ -258,7 +257,7 @@ void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size, ...@@ -258,7 +257,7 @@ void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size,
dest->setDataRevision(dest->getDataRevision() + 1); dest->setDataRevision(dest->getDataRevision() + 1);
} }
mSize = std::max(mSize, destOffset + size); mSize = std::max<size_t>(mSize, destOffset + size);
} }
} }
...@@ -274,7 +273,7 @@ void BufferStorage11::markTransformFeedbackUsage() ...@@ -274,7 +273,7 @@ void BufferStorage11::markTransformFeedbackUsage()
transformFeedbackStorage->setDataRevision(transformFeedbackStorage->getDataRevision() + 1); transformFeedbackStorage->setDataRevision(transformFeedbackStorage->getDataRevision() + 1);
} }
unsigned int BufferStorage11::getSize() const size_t BufferStorage11::getSize() const
{ {
return mSize; return mSize;
} }
......
...@@ -53,12 +53,11 @@ class BufferStorage11 : public BufferStorage ...@@ -53,12 +53,11 @@ class BufferStorage11 : public BufferStorage
static BufferStorage11 *makeBufferStorage11(BufferStorage *bufferStorage); static BufferStorage11 *makeBufferStorage11(BufferStorage *bufferStorage);
virtual void *getData(); virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset); virtual void setData(const void* data, size_t size, size_t offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size, virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset);
unsigned int sourceOffset, unsigned int destOffset);
virtual void clear(); virtual void clear();
virtual void markTransformFeedbackUsage(); virtual void markTransformFeedbackUsage();
virtual unsigned int getSize() const; virtual size_t getSize() const;
virtual bool supportsDirectBinding() const; virtual bool supportsDirectBinding() const;
ID3D11Buffer *getBuffer(BufferUsage usage); ID3D11Buffer *getBuffer(BufferUsage usage);
......
...@@ -14,15 +14,12 @@ namespace rx ...@@ -14,15 +14,12 @@ namespace rx
{ {
BufferStorage9::BufferStorage9() BufferStorage9::BufferStorage9()
: mSize(0)
{ {
mMemory = NULL;
mAllocatedSize = 0;
mSize = 0;
} }
BufferStorage9::~BufferStorage9() BufferStorage9::~BufferStorage9()
{ {
SafeDeleteArray(mMemory);
} }
BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage) BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
...@@ -33,43 +30,29 @@ BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage) ...@@ -33,43 +30,29 @@ BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
void *BufferStorage9::getData() void *BufferStorage9::getData()
{ {
return mMemory; return mMemory.data();
} }
void BufferStorage9::setData(const void* data, unsigned int size, unsigned int offset) void BufferStorage9::setData(const void* data, size_t size, size_t offset)
{ {
if (!mMemory || offset + size > mAllocatedSize) if (offset + size > mMemory.size())
{ {
unsigned int newAllocatedSize = offset + size; mMemory.resize(offset + size);
void *newMemory = new char[newAllocatedSize];
if (offset > 0 && mMemory && mAllocatedSize > 0)
{
memcpy(newMemory, mMemory, std::min(offset, mAllocatedSize));
}
delete[] mMemory;
mMemory = newMemory;
mAllocatedSize = newAllocatedSize;
} }
mSize = std::max(mSize, offset + size); mSize = std::max(mSize, offset + size);
if (data) if (data)
{ {
memcpy(reinterpret_cast<char*>(mMemory) + offset, data, size); memcpy(mMemory.data() + offset, data, size);
} }
} }
void BufferStorage9::copyData(BufferStorage* sourceStorage, unsigned int size, void BufferStorage9::copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset)
unsigned int sourceOffset, unsigned int destOffset)
{ {
BufferStorage9* source = makeBufferStorage9(sourceStorage); BufferStorage9* source = makeBufferStorage9(sourceStorage);
if (source) if (source)
{ {
void* sourceMemory = reinterpret_cast<char*>(source->mMemory) + sourceOffset; memcpy(mMemory.data() + destOffset, source->mMemory.data() + sourceOffset, size);
void* destMemory = reinterpret_cast<char*>(mMemory) + destOffset;
memcpy(destMemory, sourceMemory, size);
} }
} }
...@@ -83,7 +66,7 @@ void BufferStorage9::markTransformFeedbackUsage() ...@@ -83,7 +66,7 @@ void BufferStorage9::markTransformFeedbackUsage()
UNREACHABLE(); UNREACHABLE();
} }
unsigned int BufferStorage9::getSize() const size_t BufferStorage9::getSize() const
{ {
return mSize; return mSize;
} }
......
...@@ -23,12 +23,11 @@ class BufferStorage9 : public BufferStorage ...@@ -23,12 +23,11 @@ class BufferStorage9 : public BufferStorage
static BufferStorage9 *makeBufferStorage9(BufferStorage *bufferStorage); static BufferStorage9 *makeBufferStorage9(BufferStorage *bufferStorage);
virtual void *getData(); virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset); virtual void setData(const void* data, size_t size, size_t offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size, virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset);
unsigned int sourceOffset, unsigned int destOffset);
virtual void clear(); virtual void clear();
virtual void markTransformFeedbackUsage(); virtual void markTransformFeedbackUsage();
virtual unsigned int getSize() const; virtual size_t getSize() const;
virtual bool supportsDirectBinding() const; virtual bool supportsDirectBinding() const;
virtual bool isMapped() const; virtual bool isMapped() const;
...@@ -38,10 +37,8 @@ class BufferStorage9 : public BufferStorage ...@@ -38,10 +37,8 @@ class BufferStorage9 : public BufferStorage
private: private:
DISALLOW_COPY_AND_ASSIGN(BufferStorage9); DISALLOW_COPY_AND_ASSIGN(BufferStorage9);
void *mMemory; std::vector<char> mMemory;
unsigned int mAllocatedSize; size_t mSize;
unsigned int mSize;
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment