| Index: src/gpu/vk/GrVkCommandBuffer.h
|
| diff --git a/src/gpu/vk/GrVkCommandBuffer.h b/src/gpu/vk/GrVkCommandBuffer.h
|
| index 67b09c7a8272c72175ce92c79f3c1d9d4df8677f..e593b2d542d7da2cae733279136b3abd64bf172c 100644
|
| --- a/src/gpu/vk/GrVkCommandBuffer.h
|
| +++ b/src/gpu/vk/GrVkCommandBuffer.h
|
| @@ -114,31 +114,33 @@ public:
|
| // command buffer finishes execution
|
| void addResource(const GrVkResource* resource) {
|
| resource->ref();
|
| - fTrackedResources.push_back(resource);
|
| + fTrackedResources.append(1, &resource);
|
| }
|
|
|
| // Add ref-counted resource that will be tracked and released when this command buffer finishes
|
| // execution. When it is released, it will signal that the resource can be recycled for reuse.
|
| void addRecycledResource(const GrVkRecycledResource* resource) {
|
| resource->ref();
|
| - fTrackedRecycledResources.push_back(resource);
|
| + fTrackedRecycledResources.append(1, &resource);
|
| }
|
|
|
| void reset(GrVkGpu* gpu);
|
|
|
| protected:
|
| GrVkCommandBuffer(VkCommandBuffer cmdBuffer, const GrVkRenderPass* rp = VK_NULL_HANDLE)
|
| - : fTrackedResources(kInitialTrackedResourcesCount)
|
| - , fTrackedRecycledResources(kInitialTrackedResourcesCount)
|
| - , fIsActive(false)
|
| + : fIsActive(false)
|
| , fActiveRenderPass(rp)
|
| , fCmdBuffer(cmdBuffer)
|
| , fBoundVertexBufferIsValid(false)
|
| - , fBoundIndexBufferIsValid(false) {
|
| + , fBoundIndexBufferIsValid(false)
|
| + , fNumResets(0) {
|
| + fTrackedResources.setReserve(kInitialTrackedResourcesCount);
|
| + fTrackedRecycledResources.setReserve(kInitialTrackedResourcesCount);
|
| this->invalidateState();
|
| }
|
| - SkTArray<const GrVkResource*, true> fTrackedResources;
|
| - SkTArray<const GrVkRecycledResource*, true> fTrackedRecycledResources;
|
| +
|
| + SkTDArray<const GrVkResource*> fTrackedResources;
|
| + SkTDArray<const GrVkRecycledResource*> fTrackedRecycledResources;
|
|
|
| // Tracks whether we are in the middle of a command buffer begin/end calls and thus can add
|
| // new commands to the buffer;
|
| @@ -166,6 +168,13 @@ private:
|
| VkBuffer fBoundIndexBuffer;
|
| bool fBoundIndexBufferIsValid;
|
|
|
| + // When resetting the command buffer, we remove the tracked resources from their arrays, and
|
| + // we prefer to not free all the memory every time so usually we just rewind. However, to avoid
|
| + // all arrays growing to the max size, after so many resets we'll do a full reset of the tracked
|
| + // resource arrays.
|
| + static const int kNumRewindResetsBeforeFullReset = 8;
|
| + int fNumResets;
|
| +
|
| // Cached values used for dynamic state updates
|
| VkViewport fCachedViewport;
|
| VkRect2D fCachedScissor;
|
|
|