Changeset 293317 in webkit
- Timestamp:
- Apr 25, 2022, 12:04:37 AM (4 years ago)
- Location:
- trunk/Source/ThirdParty/ANGLE
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
src/libANGLE/renderer/metal/BufferMtl.h (modified) (2 diffs)
-
src/libANGLE/renderer/metal/BufferMtl.mm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/ThirdParty/ANGLE/ChangeLog
r292959 r293317 1 2022-04-25 Kimmo Kinnunen <kkinnunen@apple.com> 2 3 REGRESSION (Safari 15.4) Performance regression after uploading WebGL buffers 4 https://bugs.webkit.org/show_bug.cgi?id=239015 5 6 Reviewed by Dean Jackson. 7 8 BufferMtl::getRestartIndices() would recalculate restart indices on each 9 draw because RestartRangeCache::operator bool() would return m_isDirty 10 instead of the intended !m_isDirty. 11 12 Use std::optional to hold the RestartRangeCache instead of 13 maintaining m_isDirty. This allows the type system to contribute to the 14 correctness of the code. Dirty restart range cache is not useful and takes 15 up memory. 16 17 Re-apply hunks from r281550 "ANGLE Metal index buffer left mapped when building primitive restart ranges". 18 19 These were overwritten in r286638 "Roll ANGLE to include upstreamed Metal backend". 20 21 * src/libANGLE/renderer/metal/BufferMtl.h: 22 (rx::BufferMtl::RestartRangeCache::RestartRangeCache): 23 * src/libANGLE/renderer/metal/BufferMtl.mm: 24 (rx::BufferMtl::markConversionBuffersDirty): 25 (rx::BufferMtl::clearConversionBuffers): 26 (rx::BufferMtl::getRestartIndices): 27 1 28 2022-04-18 Elliott Williams <emw@apple.com> 2 29 -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/BufferMtl.h
r287068 r293317 13 13 #import <Metal/Metal.h> 14 14 15 #include <optional> 15 16 #include <utility> 16 17 … … 216 217 struct RestartRangeCache 217 218 { 218 RestartRangeCache() : indexType(gl::DrawElementsType::InvalidEnum) { isDirty = true; }219 219 RestartRangeCache(std::vector<IndexRange> &&ranges_, gl::DrawElementsType indexType_) 220 : ranges(ranges_), indexType(indexType_) , isDirty(false)220 : ranges(ranges_), indexType(indexType_) 221 221 {} 222 void markDirty() { isDirty = true; } 223 operator bool() const { return isDirty; } 224 std::vector<IndexRange> ranges; 225 gl::DrawElementsType indexType; 226 bool isDirty; 222 const std::vector<IndexRange> ranges; 223 const gl::DrawElementsType indexType; 227 224 }; 228 RestartRangeCachemRestartRangeCache;225 std::optional<RestartRangeCache> mRestartRangeCache; 229 226 std::vector<IndexRange> mRestartIndices; 230 227 }; -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/BufferMtl.mm
r287068 r293317 396 396 buffer.convertedOffset = 0; 397 397 } 398 mRestartRangeCache. markDirty();398 mRestartRangeCache.reset(); 399 399 } 400 400 … … 404 404 mIndexConversionBuffers.clear(); 405 405 mUniformConversionBuffers.clear(); 406 mRestartRangeCache. markDirty();406 mRestartRangeCache.reset(); 407 407 } 408 408 … … 434 434 gl::DrawElementsType indexType) 435 435 { 436 if (!mRestartRangeCache || mRestartRangeCache .indexType != indexType)437 { 438 mRestartRangeCache. markDirty();436 if (!mRestartRangeCache || mRestartRangeCache->indexType != indexType) 437 { 438 mRestartRangeCache.reset(); 439 439 std::vector<IndexRange> ranges; 440 440 switch (indexType) … … 452 452 ASSERT(false); 453 453 } 454 mRestartRangeCache = RestartRangeCache(std::move(ranges), indexType);455 } 456 return mRestartRangeCache .ranges;454 mRestartRangeCache.emplace(std::move(ranges), indexType); 455 } 456 return mRestartRangeCache->ranges; 457 457 } 458 458
Note:
See TracChangeset
for help on using the changeset viewer.