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 ...@@ -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 ...@@ -100,11 +100,6 @@ class StaticIndexBufferInterface : public IndexBufferInterface
~StaticIndexBufferInterface(); ~StaticIndexBufferInterface();
virtual gl::Error reserveBufferSpace(unsigned int size, GLenum indexType); 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 ...@@ -117,26 +117,13 @@ gl::Error IndexDataManager::prepareIndexData(GLenum type, GLsizei count, gl::Buf
if (directStorage) if (directStorage)
{ {
streamOffset = offset; 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) else if (staticBuffer && staticBuffer->getBufferSize() != 0 && staticBuffer->getIndexType() == type && alignedOffset)
{ {
indexBuffer = staticBuffer; 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;
// 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);
}
} }
// Avoid D3D11's primitive restart index value // Avoid D3D11's primitive restart index value
...@@ -219,7 +206,6 @@ gl::Error IndexDataManager::prepareIndexData(GLenum type, GLsizei count, gl::Buf ...@@ -219,7 +206,6 @@ gl::Error IndexDataManager::prepareIndexData(GLenum type, GLsizei count, gl::Buf
{ {
// Using bit-shift here is faster than using division. // Using bit-shift here is faster than using division.
streamOffset = (offset >> typeInfo.bytesShift) << destTypeInfo.bytesShift; 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 ...@@ -1557,7 +1557,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t
} }
const gl::VertexArray *vao = state.getVertexArray(); const gl::VertexArray *vao = state.getVertexArray();
const gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer();
if (!indices && !elementArrayBuffer) if (!indices && !elementArrayBuffer)
{ {
context->recordError(Error(GL_INVALID_OPERATION)); context->recordError(Error(GL_INVALID_OPERATION));
...@@ -1612,6 +1612,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t ...@@ -1612,6 +1612,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t
const uint8_t *offsetPointer = dataPointer + offset; const uint8_t *offsetPointer = dataPointer + offset;
*indexRangeOut = rx::IndexRangeCache::ComputeRange(type, offsetPointer, count); *indexRangeOut = rx::IndexRangeCache::ComputeRange(type, offsetPointer, count);
elementArrayBuffer->getIndexRangeCache()->addRange(type, offset, count, *indexRangeOut, offset);
} }
} }
else 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