summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp94
1 files changed, 24 insertions, 70 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp
index bfdf137126..c0b80a847c 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp
@@ -19,7 +19,7 @@ namespace rx
VertexBuffer9::VertexBuffer9(Renderer9 *renderer) : mRenderer(renderer)
{
- mVertexBuffer = NULL;
+ mVertexBuffer = nullptr;
mBufferSize = 0;
mDynamicUsage = false;
}
@@ -47,16 +47,18 @@ gl::Error VertexBuffer9::initialize(unsigned int size, bool dynamicUsage)
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to allocate internal vertex buffer of size, %lu.", size);
+ return gl::OutOfMemory()
+ << "Failed to allocate internal vertex buffer of size " << size;
}
}
mBufferSize = size;
mDynamicUsage = dynamicUsage;
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
gl::Error VertexBuffer9::storeVertexAttributes(const gl::VertexAttribute &attrib,
+ const gl::VertexBinding &binding,
GLenum currentValueType,
GLint start,
GLsizei count,
@@ -66,32 +68,33 @@ gl::Error VertexBuffer9::storeVertexAttributes(const gl::VertexAttribute &attrib
{
if (!mVertexBuffer)
{
- return gl::Error(GL_OUT_OF_MEMORY, "Internal vertex buffer is not initialized.");
+ return gl::OutOfMemory() << "Internal vertex buffer is not initialized.";
}
- int inputStride = static_cast<int>(gl::ComputeVertexAttributeStride(attrib));
+ int inputStride = static_cast<int>(gl::ComputeVertexAttributeStride(attrib, binding));
int elementSize = static_cast<int>(gl::ComputeVertexAttributeTypeSize(attrib));
DWORD lockFlags = mDynamicUsage ? D3DLOCK_NOOVERWRITE : 0;
- uint8_t *mapPtr = NULL;
+ uint8_t *mapPtr = nullptr;
- unsigned int mapSize;
- gl::Error error = spaceRequired(attrib, count, instances, &mapSize);
- if (error.isError())
+ auto errorOrMapSize = mRenderer->getVertexSpaceRequired(attrib, binding, count, instances);
+ if (errorOrMapSize.isError())
{
- return error;
+ return errorOrMapSize.getError();
}
+ unsigned int mapSize = errorOrMapSize.getResult();
+
HRESULT result = mVertexBuffer->Lock(offset, mapSize, reinterpret_cast<void**>(&mapPtr), lockFlags);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to lock internal vertex buffer, HRESULT: 0x%08x.", result);
+ return gl::OutOfMemory() << "Failed to lock internal vertex buffer, " << gl::FmtHR(result);
}
const uint8_t *input = sourceData;
- if (instances == 0 || attrib.divisor == 0)
+ if (instances == 0 || binding.getDivisor() == 0)
{
input += inputStride * start;
}
@@ -112,13 +115,7 @@ gl::Error VertexBuffer9::storeVertexAttributes(const gl::VertexAttribute &attrib
mVertexBuffer->Unlock();
- return gl::Error(GL_NO_ERROR);
-}
-
-gl::Error VertexBuffer9::getSpaceRequired(const gl::VertexAttribute &attrib, GLsizei count, GLsizei instances,
- unsigned int *outSpaceRequired) const
-{
- return spaceRequired(attrib, count, instances, outSpaceRequired);
+ return gl::NoError();
}
unsigned int VertexBuffer9::getBufferSize() const
@@ -134,7 +131,7 @@ gl::Error VertexBuffer9::setBufferSize(unsigned int size)
}
else
{
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
}
@@ -142,7 +139,7 @@ gl::Error VertexBuffer9::discard()
{
if (!mVertexBuffer)
{
- return gl::Error(GL_OUT_OF_MEMORY, "Internal vertex buffer is not initialized.");
+ return gl::OutOfMemory() << "Internal vertex buffer is not initialized.";
}
void *dummy;
@@ -151,65 +148,22 @@ gl::Error VertexBuffer9::discard()
result = mVertexBuffer->Lock(0, 1, &dummy, D3DLOCK_DISCARD);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to lock internal buffer for discarding, HRESULT: 0x%08x", result);
+ return gl::OutOfMemory() << "Failed to lock internal buffer for discarding, "
+ << gl::FmtHR(result);
}
result = mVertexBuffer->Unlock();
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to unlock internal buffer for discarding, HRESULT: 0x%08x", result);
+ return gl::OutOfMemory() << "Failed to unlock internal buffer for discarding, "
+ << gl::FmtHR(result);
}
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
IDirect3DVertexBuffer9 * VertexBuffer9::getBuffer() const
{
return mVertexBuffer;
}
-
-gl::Error VertexBuffer9::spaceRequired(const gl::VertexAttribute &attrib, std::size_t count, GLsizei instances,
- unsigned int *outSpaceRequired) const
-{
- gl::VertexFormatType vertexFormatType = gl::GetVertexFormatType(attrib, GL_FLOAT);
- const d3d9::VertexFormat &d3d9VertexInfo = d3d9::GetVertexFormatInfo(mRenderer->getCapsDeclTypes(), vertexFormatType);
-
- if (attrib.enabled)
- {
- unsigned int elementCount = 0;
- if (instances == 0 || attrib.divisor == 0)
- {
- elementCount = static_cast<unsigned int>(count);
- }
- else
- {
- // Round up to divisor, if possible
- elementCount = UnsignedCeilDivide(static_cast<unsigned int>(instances), attrib.divisor);
- }
-
- if (d3d9VertexInfo.outputElementSize <= std::numeric_limits<unsigned int>::max() / elementCount)
- {
- if (outSpaceRequired)
- {
- *outSpaceRequired =
- static_cast<unsigned int>(d3d9VertexInfo.outputElementSize) * elementCount;
- }
- return gl::Error(GL_NO_ERROR);
- }
- else
- {
- return gl::Error(GL_OUT_OF_MEMORY, "New vertex buffer size would result in an overflow.");
- }
- }
- else
- {
- const unsigned int elementSize = 4;
- if (outSpaceRequired)
- {
- *outSpaceRequired = elementSize * 4;
- }
- return gl::Error(GL_NO_ERROR);
- }
-}
-
-}
+} // namespace rx