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,
stateManager->setPixelConstantBuffer(0, &mConstantBuffer);
// Bind IL & VB if needed
stateManager->setIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0, false);
stateManager->setIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0);
stateManager->setInputLayout(il);
if (useVertexBuffer())
......
......@@ -263,8 +263,7 @@ gl::Error InputLayoutCache::applyVertexBuffers(
// 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
// rendering path will contain the correct index buffers.
stateManager->setIndexBuffer(mPointSpriteIndexBuffer.get(), DXGI_FORMAT_R16_UINT, 0,
false);
stateManager->setIndexBuffer(mPointSpriteIndexBuffer.get(), DXGI_FORMAT_R16_UINT, 0);
}
}
......
......@@ -1639,9 +1639,7 @@ gl::Error Renderer11::drawElements(const gl::Context *context,
return gl::NoError();
}
const gl::IndexRange &indexRange =
context->getParams<gl::HasIndexRange>().getIndexRange().value();
indexInfo.indexRange = indexRange;
indexInfo.indexRange = context->getParams<gl::HasIndexRange>().getIndexRange().value();
ANGLE_TRY(mStateManager.applyIndexBuffer(context, indices, count, type, &indexInfo));
size_t vertexCount = indexInfo.indexRange.vertexCount();
......@@ -1902,7 +1900,7 @@ gl::Error Renderer11::drawLineLoop(const gl::Context *context,
const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer();
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());
......@@ -1985,7 +1983,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::Context *context,
const d3d11::Buffer &d3dIndexBuffer = indexBuffer->getBuffer();
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());
......
......@@ -2490,12 +2490,6 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context,
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)
{
mLastFirstVertex = first;
......@@ -2586,16 +2580,16 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context,
buffer = indexBuffer->getBuffer().get();
}
mAppliedIBChanged = false;
setIndexBuffer(buffer, bufferFormat, indexInfo->startOffset, true);
// Track dirty indices in the index range cache.
indexInfo->srcIndexData.srcIndicesChanged =
setIndexBuffer(buffer, bufferFormat, indexInfo->startOffset);
return gl::NoError();
}
void StateManager11::setIndexBuffer(ID3D11Buffer *buffer,
bool StateManager11::setIndexBuffer(ID3D11Buffer *buffer,
DXGI_FORMAT indexFormat,
unsigned int offset,
bool indicesChanged)
unsigned int offset)
{
if (buffer != mAppliedIB || indexFormat != mAppliedIBFormat || offset != mAppliedIBOffset)
{
......@@ -2604,12 +2598,10 @@ void StateManager11::setIndexBuffer(ID3D11Buffer *buffer,
mAppliedIB = buffer;
mAppliedIBFormat = indexFormat;
mAppliedIBOffset = offset;
if (indicesChanged)
{
mAppliedIBChanged = true;
}
return true;
}
return false;
}
// Vertex buffer is invalidated outside this function.
......
......@@ -244,10 +244,7 @@ class StateManager11 final : angle::NonCopyable
GLenum type,
TranslatedIndexData *indexInfo);
void setIndexBuffer(ID3D11Buffer *buffer,
DXGI_FORMAT indexFormat,
unsigned int offset,
bool indicesChanged);
bool setIndexBuffer(ID3D11Buffer *buffer, DXGI_FORMAT indexFormat, unsigned int offset);
gl::Error updateVertexOffsetsForPointSpritesEmulation(GLint startVertex,
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