Commit f1581583 by Jamie Madill Committed by Commit Bot

Minor cleanup to setIndexBuffer.

This cleans up the point sprites dirtying logic into applyIndexBuffer. This series of small optimizations gives about a 15% improvement on the draw call benchmark for the D3D11 backend with the null driver. BUG=angleproject:1155 Change-Id: I210dd408d11ef5a0b58b0ad32d1255c787a55fba Reviewed-on: https://chromium-review.googlesource.com/666047Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 74b30e46
...@@ -796,7 +796,7 @@ gl::Error Clear11::clearFramebuffer(const gl::Context *context, ...@@ -796,7 +796,7 @@ gl::Error Clear11::clearFramebuffer(const gl::Context *context,
stateManager->setPixelConstantBuffer(0, &mConstantBuffer); stateManager->setPixelConstantBuffer(0, &mConstantBuffer);
// Bind IL & VB if needed // Bind IL & VB if needed
stateManager->setIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0, false); stateManager->setIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0);
stateManager->setInputLayout(il); stateManager->setInputLayout(il);
if (useVertexBuffer()) if (useVertexBuffer())
......
...@@ -263,8 +263,7 @@ gl::Error InputLayoutCache::applyVertexBuffers( ...@@ -263,8 +263,7 @@ gl::Error InputLayoutCache::applyVertexBuffers(
// non-indexed rendering path in ANGLE (DrawArrays). This means that applyIndexBuffer() // non-indexed rendering path in ANGLE (DrawArrays). This means that applyIndexBuffer()
// on the renderer will not be called and setting this buffer here ensures that the // on the renderer will not be called and setting this buffer here ensures that the
// rendering path will contain the correct index buffers. // rendering path will contain the correct index buffers.
stateManager->setIndexBuffer(mPointSpriteIndexBuffer.get(), DXGI_FORMAT_R16_UINT, 0, stateManager->setIndexBuffer(mPointSpriteIndexBuffer.get(), DXGI_FORMAT_R16_UINT, 0);
false);
} }
} }
......
...@@ -1639,9 +1639,7 @@ gl::Error Renderer11::drawElements(const gl::Context *context, ...@@ -1639,9 +1639,7 @@ gl::Error Renderer11::drawElements(const gl::Context *context,
return gl::NoError(); return gl::NoError();
} }
const gl::IndexRange &indexRange = indexInfo.indexRange = context->getParams<gl::HasIndexRange>().getIndexRange().value();
context->getParams<gl::HasIndexRange>().getIndexRange().value();
indexInfo.indexRange = indexRange;
ANGLE_TRY(mStateManager.applyIndexBuffer(context, indices, count, type, &indexInfo)); ANGLE_TRY(mStateManager.applyIndexBuffer(context, indices, count, type, &indexInfo));
size_t vertexCount = indexInfo.indexRange.vertexCount(); size_t vertexCount = indexInfo.indexRange.vertexCount();
...@@ -1902,7 +1900,7 @@ gl::Error Renderer11::drawLineLoop(const gl::Context *context, ...@@ -1902,7 +1900,7 @@ gl::Error Renderer11::drawLineLoop(const gl::Context *context,
const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer(); const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer();
DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat(); DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
mStateManager.setIndexBuffer(d3dIndexBuffer.get(), indexFormat, offset, false); mStateManager.setIndexBuffer(d3dIndexBuffer.get(), indexFormat, offset);
UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size()); UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size());
...@@ -1985,7 +1983,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::Context *context, ...@@ -1985,7 +1983,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::Context *context,
const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer(); const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer();
DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat(); DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
mStateManager.setIndexBuffer(d3dIndexBuffer.get(), indexFormat, offset, false); mStateManager.setIndexBuffer(d3dIndexBuffer.get(), indexFormat, offset);
UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size()); UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size());
......
...@@ -2490,12 +2490,6 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context, ...@@ -2490,12 +2490,6 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context,
ANGLE_TRY(syncCurrentValueAttribs(state)); ANGLE_TRY(syncCurrentValueAttribs(state));
// If index information is passed, mark it with the current changed status.
if (indexInfo)
{
indexInfo->srcIndexData.srcIndicesChanged = mAppliedIBChanged;
}
if (!mLastFirstVertex.valid() || mLastFirstVertex.value() != first) if (!mLastFirstVertex.valid() || mLastFirstVertex.value() != first)
{ {
mLastFirstVertex = first; mLastFirstVertex = first;
...@@ -2586,16 +2580,16 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context, ...@@ -2586,16 +2580,16 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context,
buffer = indexBuffer->getBuffer().get(); buffer = indexBuffer->getBuffer().get();
} }
mAppliedIBChanged = false; // Track dirty indices in the index range cache.
setIndexBuffer(buffer, bufferFormat, indexInfo->startOffset, true); indexInfo->srcIndexData.srcIndicesChanged =
setIndexBuffer(buffer, bufferFormat, indexInfo->startOffset);
return gl::NoError(); return gl::NoError();
} }
void StateManager11::setIndexBuffer(ID3D11Buffer *buffer, bool StateManager11::setIndexBuffer(ID3D11Buffer *buffer,
DXGI_FORMAT indexFormat, DXGI_FORMAT indexFormat,
unsigned int offset, unsigned int offset)
bool indicesChanged)
{ {
if (buffer != mAppliedIB || indexFormat != mAppliedIBFormat || offset != mAppliedIBOffset) if (buffer != mAppliedIB || indexFormat != mAppliedIBFormat || offset != mAppliedIBOffset)
{ {
...@@ -2604,12 +2598,10 @@ void StateManager11::setIndexBuffer(ID3D11Buffer *buffer, ...@@ -2604,12 +2598,10 @@ void StateManager11::setIndexBuffer(ID3D11Buffer *buffer,
mAppliedIB = buffer; mAppliedIB = buffer;
mAppliedIBFormat = indexFormat; mAppliedIBFormat = indexFormat;
mAppliedIBOffset = offset; mAppliedIBOffset = offset;
return true;
if (indicesChanged)
{
mAppliedIBChanged = true;
}
} }
return false;
} }
// Vertex buffer is invalidated outside this function. // Vertex buffer is invalidated outside this function.
......
...@@ -244,10 +244,7 @@ class StateManager11 final : angle::NonCopyable ...@@ -244,10 +244,7 @@ class StateManager11 final : angle::NonCopyable
GLenum type, GLenum type,
TranslatedIndexData *indexInfo); TranslatedIndexData *indexInfo);
void setIndexBuffer(ID3D11Buffer *buffer, bool setIndexBuffer(ID3D11Buffer *buffer, DXGI_FORMAT indexFormat, unsigned int offset);
DXGI_FORMAT indexFormat,
unsigned int offset,
bool indicesChanged);
gl::Error updateVertexOffsetsForPointSpritesEmulation(GLint startVertex, gl::Error updateVertexOffsetsForPointSpritesEmulation(GLint startVertex,
GLsizei emulatedInstanceId); GLsizei emulatedInstanceId);
......
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