Chromium Code Reviews| Index: src/gpu/vk/GrVkCommandBuffer.h |
| diff --git a/src/gpu/vk/GrVkCommandBuffer.h b/src/gpu/vk/GrVkCommandBuffer.h |
| index 67b09c7a8272c72175ce92c79f3c1d9d4df8677f..830817e4e66af6237b90d0d3227b9c37f9fb8ed4 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 kMaxNumberofRewindResets = 8; |
|
egdaniel
2016/09/14 18:02:55
also if anyone has any better guesses of what this
Brian Osman
2016/09/19 18:51:04
kNumRewindResetsBeforeFullReset ?
egdaniel
2016/09/19 19:52:37
Done.
|
| + int fNumResets; |
| + |
| // Cached values used for dynamic state updates |
| VkViewport fCachedViewport; |
| VkRect2D fCachedScissor; |