Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Unified Diff: src/gpu/vk/GrVkResourceProvider.h

Issue 2163673002: Setup system in Vulkan to reuse VkDescriptorSet allocations. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nit Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/vk/GrVkResource.h ('k') | src/gpu/vk/GrVkResourceProvider.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/vk/GrVkResourceProvider.h
diff --git a/src/gpu/vk/GrVkResourceProvider.h b/src/gpu/vk/GrVkResourceProvider.h
index 3891539b0cada8101a6cf40a85c0d74f0d7d1e21..cd0411b83b96a2b953b3a4f53438034502f25b2a 100644
--- a/src/gpu/vk/GrVkResourceProvider.h
+++ b/src/gpu/vk/GrVkResourceProvider.h
@@ -11,6 +11,7 @@
#include "GrGpu.h"
#include "GrResourceHandle.h"
#include "GrVkDescriptorPool.h"
+#include "GrVkDescriptorSetManager.h"
#include "GrVkPipelineState.h"
#include "GrVkRenderPass.h"
#include "GrVkResource.h"
@@ -100,18 +101,33 @@ public:
GrPrimitiveType,
const GrVkRenderPass& renderPass);
- // For all our GrVkPipelineState objects, we require a layout where the first set contains two
- // uniform buffers, one for the vertex shader and one for the fragment shader. Thus it is
- // possible for us to use a shadered descriptor pool to allocate all these similar descriptor
- // sets. The caller is responsible for reffing the outPool for as long as the returned
- // VkDescriptor set is in use.
- void getUniformDescriptorSet(VkDescriptorSet*, const GrVkDescriptorPool** outPool);
+ // Returns a handle which the GrVkResourceProvider uses to know which compatible
+ // GrVkDescriptorSetManager to use when getting or recycling a GrVkDescriptorSet. Passing in a
+ // value of 0 for numSamplers is used to signal this is for the uniform descriptor set.
+ void getDescSetHandle(uint32_t numSamplers, VkDescriptorSetLayout layout,
+ GrVkDescriptorSetManager::Handle* handle);
+
+ // Returns a GrVkDescriptorSet that can be used for uniform buffers. The GrVkDescriptorSet
+ // is already reffed for the caller.
+ const GrVkDescriptorSet* getUniformDescriptorSet();
+
+ // Returns a GrVkDescriptorSet that can be used for sampler descriptors that are compatible with
+ // the GrVkDescriptorSetManager::Handle passed int.. The GrVkDescriptorSet is already reffed for
+ // the caller.
+ // TODO: Move samplers in GrVkPipelineState to use the GrVkResourceProvider to allocate
+ // descriptor sets from.
+ const GrVkDescriptorSet* getSamplerDescriptorSet(const GrVkDescriptorSetManager::Handle&);
// Returns the compatible VkDescriptorSetLayout to use for uniform buffers. The caller does not
// own the VkDescriptorSetLayout and thus should not delete it. This function should be used
// when the caller needs the layout to create a VkPipelineLayout.
VkDescriptorSetLayout getUniDSLayout() const { return fUniformDescLayout; }
+ // Signals that the descriptor set passed it, which is compatible with the passed in handle,
+ // can be reused by the next allocation request.
+ void recycleDescriptorSet(const GrVkDescriptorSet* descSet,
+ const GrVkDescriptorSetManager::Handle&);
+
// Destroy any cached resources. To be called before destroying the VkDevice.
// The assumption is that all queues are idle and all command buffers are finished.
// For resource tracing to work properly, this should be called after unrefing all other
@@ -163,7 +179,6 @@ private:
#endif
};
-
class CompatibleRenderPassSet {
public:
// This will always construct the basic load store render pass (all attachments load and
@@ -218,8 +233,11 @@ private:
// Cache of GrVkPipelineStates
PipelineStateCache* fPipelineStateCache;
+ SkSTArray<4, GrVkDescriptorSetManager> fDescriptorSetManagers;
+
+ GrVkDescriptorSetManager::Handle fUniformDSHandle;
+
// Current pool to allocate uniform descriptor sets from
- const GrVkDescriptorPool* fUniformDescPool;
VkDescriptorSetLayout fUniformDescLayout;
//Curent number of uniform descriptors allocated from the pool
int fCurrentUniformDescCount;
« no previous file with comments | « src/gpu/vk/GrVkResource.h ('k') | src/gpu/vk/GrVkResourceProvider.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698