Vulkan: Optimize for multiple TexSubImage calls in the same level Based on app traces, some apps make glTexSubImage call for the same level multiple times in a row. One extreme example is lumino_city, which it creates a 2D texture with nullptr data, and then calls glTexSubImage2D many times back to back for each row of the texture to update the data. Because we uses std::vector to store the per level update struct (SubresourceUpdate), it means we copy these data structures every time it grows 2x, until it hit the max size 1081. The other common case we get into is app update some area of the texture (like google map and gacha_life) which also end up with a few texSubImage calls back to back. The other more common case is we staged a clear first and then glTexSubImage which end up with vector size of 2. This CL changes to use std::deque instead of std::vector to store the staged update for a given level, which allows it to grow without extra penalty. Bug: b/293297177 Change-Id: Iabbc143074ad9d6fcf47abbddee09ecf7f78d1a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6271964 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>