| Index: src/gpu/vk/GrVkPipelineState.cpp
|
| diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp
|
| index ab9cff8d1b73459b413abb6deb5c1926f50f92fe..5b3fa8f0568321cdbfc7724f287af350699e8000 100644
|
| --- a/src/gpu/vk/GrVkPipelineState.cpp
|
| +++ b/src/gpu/vk/GrVkPipelineState.cpp
|
| @@ -29,7 +29,7 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
|
| const GrVkPipelineState::Desc& desc,
|
| GrVkPipeline* pipeline,
|
| VkPipelineLayout layout,
|
| - VkDescriptorSetLayout dsSamplerLayout,
|
| + const GrVkDescriptorSetManager::Handle& samplerDSHandle,
|
| const BuiltinUniformHandles& builtinUniformHandles,
|
| const UniformInfoArray& uniforms,
|
| uint32_t vertexUniformSize,
|
| @@ -41,6 +41,8 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
|
| : fPipeline(pipeline)
|
| , fPipelineLayout(layout)
|
| , fUniformDescriptorSet(nullptr)
|
| + , fSamplerDescriptorSet(nullptr)
|
| + , fSamplerDSHandle(samplerDSHandle)
|
| , fStartDS(SK_MaxS32)
|
| , fDSCount(0)
|
| , fBuiltinUniformHandles(builtinUniformHandles)
|
| @@ -48,9 +50,7 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
|
| , fXferProcessor(xferProcessor)
|
| , fFragmentProcessors(fragmentProcessors)
|
| , fDesc(desc)
|
| - , fDataManager(uniforms, vertexUniformSize, fragmentUniformSize)
|
| - , fSamplerPoolManager(dsSamplerLayout, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
| - numSamplers, gpu) {
|
| + , fDataManager(uniforms, vertexUniformSize, fragmentUniformSize) {
|
| fSamplers.setReserve(numSamplers);
|
| fTextureViews.setReserve(numSamplers);
|
| fTextures.setReserve(numSamplers);
|
| @@ -124,13 +124,16 @@ void GrVkPipelineState::freeGPUResources(const GrVkGpu* gpu) {
|
| fFragmentUniformBuffer->release(gpu);
|
| }
|
|
|
| - fSamplerPoolManager.freeGPUResources(gpu);
|
| -
|
| if (fUniformDescriptorSet) {
|
| fUniformDescriptorSet->recycle(const_cast<GrVkGpu*>(gpu));
|
| fUniformDescriptorSet = nullptr;
|
| }
|
|
|
| + if (fSamplerDescriptorSet) {
|
| + fSamplerDescriptorSet->recycle(const_cast<GrVkGpu*>(gpu));
|
| + fSamplerDescriptorSet = nullptr;
|
| + }
|
| +
|
| this->freeTempResources(gpu);
|
| }
|
|
|
| @@ -158,12 +161,15 @@ void GrVkPipelineState::abandonGPUResources() {
|
| }
|
| fTextures.rewind();
|
|
|
| - fSamplerPoolManager.abandonGPUResources();
|
| -
|
| if (fUniformDescriptorSet) {
|
| fUniformDescriptorSet->unrefAndAbandon();
|
| fUniformDescriptorSet = nullptr;
|
| }
|
| +
|
| + if (fSamplerDescriptorSet) {
|
| + fSamplerDescriptorSet->unrefAndAbandon();
|
| + fSamplerDescriptorSet = nullptr;
|
| + }
|
| }
|
|
|
| static void append_texture_bindings(const GrProcessor& processor,
|
| @@ -204,8 +210,12 @@ void GrVkPipelineState::setData(GrVkGpu* gpu,
|
|
|
| // Get new descriptor sets
|
| if (fNumSamplers) {
|
| - fSamplerPoolManager.getNewDescriptorSet(gpu,
|
| - &fDescriptorSets[GrVkUniformHandler::kSamplerDescSet]);
|
| + if (fSamplerDescriptorSet) {
|
| + fSamplerDescriptorSet->recycle(gpu);
|
| + }
|
| + fSamplerDescriptorSet = gpu->resourceProvider().getSamplerDescriptorSet(fSamplerDSHandle);
|
| + int samplerDSIdx = GrVkUniformHandler::kSamplerDescSet;
|
| + fDescriptorSets[samplerDSIdx] = fSamplerDescriptorSet->descriptorSet();
|
| this->writeSamplers(gpu, textureBindings, pipeline.getAllowSRGBInputs());
|
| }
|
|
|
| @@ -365,13 +375,13 @@ void GrVkPipelineState::bind(const GrVkGpu* gpu, GrVkCommandBuffer* commandBuffe
|
| }
|
|
|
| void GrVkPipelineState::addUniformResources(GrVkCommandBuffer& commandBuffer) {
|
| - if (fSamplerPoolManager.fPool) {
|
| - commandBuffer.addResource(fSamplerPoolManager.fPool);
|
| - }
|
| -
|
| if (fUniformDescriptorSet) {
|
| commandBuffer.addRecycledResource(fUniformDescriptorSet);
|
| }
|
| + if (fSamplerDescriptorSet) {
|
| + commandBuffer.addRecycledResource(fSamplerDescriptorSet);
|
| + }
|
| +
|
|
|
| if (fVertexUniformBuffer.get()) {
|
| commandBuffer.addResource(fVertexUniformBuffer->resource());
|
|
|