Commit ff5e7374 by Olli Etuaho

Recompute stream offset instead of fetching a cached value

Recomputing the stream offset is relatively cheap now after recent changes. Remove caching it to make the code less complex. TEST=angle_end2end_tests BUG=angleproject:956 Change-Id: Icb9cc4e4ffd685a78b7f8a45958992a471ebb0f5 Reviewed-on: https://chromium-review.googlesource.com/262422Reviewed-by: 's avatarNicolas Capens <capn@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarOlli Etuaho <oetuaho@nvidia.com>
parent 5f3f372a
......@@ -191,9 +191,4 @@ gl::Error StaticIndexBufferInterface::reserveBufferSpace(unsigned int size, GLen
}
}
IndexRangeCache *StaticIndexBufferInterface::getIndexRangeCache()
{
return &mIndexRangeCache;
}
}
......@@ -100,11 +100,6 @@ class StaticIndexBufferInterface : public IndexBufferInterface
~StaticIndexBufferInterface();
virtual gl::Error reserveBufferSpace(unsigned int size, GLenum indexType);
IndexRangeCache *getIndexRangeCache();
private:
IndexRangeCache mIndexRangeCache;
};
}
......
......@@ -117,26 +117,13 @@ gl::Error IndexDataManager::prepareIndexData(GLenum type, GLsizei count, gl::Buf
if (directStorage)
{
streamOffset = offset;
if (!buffer->getIndexRangeCache()->findRange(type, offset, count, NULL, NULL))
{
buffer->getIndexRangeCache()->addRange(type, offset, count, translated->indexRange, offset);
}
}
else if (staticBuffer && staticBuffer->getBufferSize() != 0 && staticBuffer->getIndexType() == type && alignedOffset)
{
indexBuffer = staticBuffer;
if (!staticBuffer->getIndexRangeCache()->findRange(type, offset, count, NULL, &streamOffset))
{
// Using bit-shift here is faster than using division.
streamOffset = (offset >> typeInfo.bytesShift) << gl::GetTypeInfo(destinationIndexType).bytesShift;
staticBuffer->getIndexRangeCache()->addRange(type, offset, count, translated->indexRange, streamOffset);
}
if (!buffer->getIndexRangeCache()->findRange(type, offset, count, nullptr, nullptr))
{
buffer->getIndexRangeCache()->addRange(type, offset, count, translated->indexRange, offset);
}
// Using bit-shift here is faster than using division.
streamOffset = (offset >> typeInfo.bytesShift) << gl::GetTypeInfo(destinationIndexType).bytesShift;
}
// Avoid D3D11's primitive restart index value
......@@ -219,7 +206,6 @@ gl::Error IndexDataManager::prepareIndexData(GLenum type, GLsizei count, gl::Buf
{
// Using bit-shift here is faster than using division.
streamOffset = (offset >> typeInfo.bytesShift) << destTypeInfo.bytesShift;
staticBuffer->getIndexRangeCache()->addRange(type, offset, count, translated->indexRange, streamOffset);
}
}
......
......@@ -1557,7 +1557,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t
}
const gl::VertexArray *vao = state.getVertexArray();
const gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer();
if (!indices && !elementArrayBuffer)
{
context->recordError(Error(GL_INVALID_OPERATION));
......@@ -1612,6 +1612,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t
const uint8_t *offsetPointer = dataPointer + offset;
*indexRangeOut = rx::IndexRangeCache::ComputeRange(type, offsetPointer, count);
elementArrayBuffer->getIndexRangeCache()->addRange(type, offset, count, *indexRangeOut, offset);
}
}
else
......
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