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)
std::size_t height = header.dwHeight;
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);
oss << "// Automatically generated header from " << inputFile << ", a " << width << "x" << height;
......@@ -197,8 +197,8 @@ int main(int argc, char **argv)
for (std::size_t i = 0; i < levels; ++i)
{
std::size_t widthAtLevel = std::max(width >> i, 1U);
std::size_t heightAtLevel = std::max(height >> i, 1U);
std::size_t widthAtLevel = std::max<size_t>(width >> i, 1);
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::ceil(heightAtLevel / static_cast<float>(blockHeight))) *
blockSize;
......
......@@ -77,21 +77,15 @@
[
'ANGLE_ENABLE_D3D11',
],
'configurations':
'msvs_settings':
{
'Debug':
'VCLinkerTool':
{
'msvs_settings':
{
'VCLinkerTool':
{
'AdditionalDependencies':
[
'dxguid.lib',
]
}
},
}
'AdditionalDependencies':
[
'dxguid.lib',
],
},
},
}],
],
......
......@@ -644,7 +644,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
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);
}
......
......@@ -22,12 +22,11 @@ class BufferStorage
// The data returned is only guaranteed valid until next non-const method.
virtual void *getData() = 0;
virtual void setData(const void* data, unsigned int size, unsigned int offset) = 0;
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset) = 0;
virtual void setData(const void* data, size_t size, size_t offset) = 0;
virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset) = 0;
virtual void clear() = 0;
virtual void markTransformFeedbackUsage() = 0;
virtual unsigned int getSize() const = 0;
virtual size_t getSize() const = 0;
virtual bool supportsDirectBinding() const = 0;
unsigned int getSerial() const;
......
......@@ -177,7 +177,7 @@ bool VertexBufferInterface::directStoragePossible(const gl::VertexAttribute &att
unsigned int 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;
}
......
......@@ -204,7 +204,7 @@ void *BufferStorage11::getData()
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;
mSize = std::max(mSize, requiredSize);
......@@ -239,8 +239,7 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int
}
}
void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset)
void BufferStorage11::copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset)
{
BufferStorage11* sourceStorage11 = makeBufferStorage11(sourceStorage);
if (sourceStorage11)
......@@ -258,7 +257,7 @@ void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size,
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()
transformFeedbackStorage->setDataRevision(transformFeedbackStorage->getDataRevision() + 1);
}
unsigned int BufferStorage11::getSize() const
size_t BufferStorage11::getSize() const
{
return mSize;
}
......
......@@ -53,12 +53,11 @@ class BufferStorage11 : public BufferStorage
static BufferStorage11 *makeBufferStorage11(BufferStorage *bufferStorage);
virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset);
virtual void setData(const void* data, size_t size, size_t offset);
virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset);
virtual void clear();
virtual void markTransformFeedbackUsage();
virtual unsigned int getSize() const;
virtual size_t getSize() const;
virtual bool supportsDirectBinding() const;
ID3D11Buffer *getBuffer(BufferUsage usage);
......
......@@ -14,15 +14,12 @@ namespace rx
{
BufferStorage9::BufferStorage9()
: mSize(0)
{
mMemory = NULL;
mAllocatedSize = 0;
mSize = 0;
}
BufferStorage9::~BufferStorage9()
{
SafeDeleteArray(mMemory);
}
BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
......@@ -33,43 +30,29 @@ BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
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;
void *newMemory = new char[newAllocatedSize];
if (offset > 0 && mMemory && mAllocatedSize > 0)
{
memcpy(newMemory, mMemory, std::min(offset, mAllocatedSize));
}
delete[] mMemory;
mMemory = newMemory;
mAllocatedSize = newAllocatedSize;
mMemory.resize(offset + size);
}
mSize = std::max(mSize, offset + size);
if (data)
{
memcpy(reinterpret_cast<char*>(mMemory) + offset, data, size);
memcpy(mMemory.data() + offset, data, size);
}
}
void BufferStorage9::copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset)
void BufferStorage9::copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset)
{
BufferStorage9* source = makeBufferStorage9(sourceStorage);
if (source)
{
void* sourceMemory = reinterpret_cast<char*>(source->mMemory) + sourceOffset;
void* destMemory = reinterpret_cast<char*>(mMemory) + destOffset;
memcpy(destMemory, sourceMemory, size);
memcpy(mMemory.data() + destOffset, source->mMemory.data() + sourceOffset, size);
}
}
......@@ -83,7 +66,7 @@ void BufferStorage9::markTransformFeedbackUsage()
UNREACHABLE();
}
unsigned int BufferStorage9::getSize() const
size_t BufferStorage9::getSize() const
{
return mSize;
}
......
......@@ -23,12 +23,11 @@ class BufferStorage9 : public BufferStorage
static BufferStorage9 *makeBufferStorage9(BufferStorage *bufferStorage);
virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset);
virtual void setData(const void* data, size_t size, size_t offset);
virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset);
virtual void clear();
virtual void markTransformFeedbackUsage();
virtual unsigned int getSize() const;
virtual size_t getSize() const;
virtual bool supportsDirectBinding() const;
virtual bool isMapped() const;
......@@ -38,10 +37,8 @@ class BufferStorage9 : public BufferStorage
private:
DISALLOW_COPY_AND_ASSIGN(BufferStorage9);
void *mMemory;
unsigned int mAllocatedSize;
unsigned int mSize;
std::vector<char> mMemory;
size_t 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