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

Side by Side Diff: src/gpu/vk/GrVkResourceProvider.cpp

Issue 1916563002: Add automatic generation of mipmaps to Vulkan (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkResourceProvider.h ('k') | src/gpu/vk/GrVkSampler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrVkResourceProvider.h" 8 #include "GrVkResourceProvider.h"
9 9
10 #include "GrTextureParams.h" 10 #include "GrTextureParams.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 fSimpleRenderPasses.push_back(renderPass); 78 fSimpleRenderPasses.push_back(renderPass);
79 renderPass->ref(); 79 renderPass->ref();
80 return renderPass; 80 return renderPass;
81 } 81 }
82 82
83 GrVkDescriptorPool* GrVkResourceProvider::findOrCreateCompatibleDescriptorPool( 83 GrVkDescriptorPool* GrVkResourceProvider::findOrCreateCompatibleDescriptorPool(
84 VkDescriptorType typ e, uint32_t count) { 84 VkDescriptorType typ e, uint32_t count) {
85 return new GrVkDescriptorPool(fGpu, type, count); 85 return new GrVkDescriptorPool(fGpu, type, count);
86 } 86 }
87 87
88 GrVkSampler* GrVkResourceProvider::findOrCreateCompatibleSampler(const GrTexture Params& params) { 88 GrVkSampler* GrVkResourceProvider::findOrCreateCompatibleSampler(const GrTexture Params& params,
89 GrVkSampler* sampler = fSamplers.find(GrVkSampler::GenerateKey(params)); 89 uint32_t mipLev els) {
90 GrVkSampler* sampler = fSamplers.find(GrVkSampler::GenerateKey(params, mipLe vels));
90 if (!sampler) { 91 if (!sampler) {
91 sampler = GrVkSampler::Create(fGpu, params); 92 sampler = GrVkSampler::Create(fGpu, params, mipLevels);
92 fSamplers.add(sampler); 93 fSamplers.add(sampler);
93 } 94 }
94 SkASSERT(sampler); 95 SkASSERT(sampler);
95 sampler->ref(); 96 sampler->ref();
96 return sampler; 97 return sampler;
97 } 98 }
98 99
99 sk_sp<GrVkPipelineState> GrVkResourceProvider::findOrCreateCompatiblePipelineSta te( 100 sk_sp<GrVkPipelineState> GrVkResourceProvider::findOrCreateCompatiblePipelineSta te(
100 const GrPipelin e& pipeline, 101 const GrPipelin e& pipeline,
101 const GrPrimiti veProcessor& proc, 102 const GrPrimiti veProcessor& proc,
(...skipping 27 matching lines...) Expand all
129 } 130 }
130 fActiveCommandBuffers.reset(); 131 fActiveCommandBuffers.reset();
131 132
132 // loop over all render passes to make sure we destroy all the internal VkRe nderPasses 133 // loop over all render passes to make sure we destroy all the internal VkRe nderPasses
133 for (int i = 0; i < fSimpleRenderPasses.count(); ++i) { 134 for (int i = 0; i < fSimpleRenderPasses.count(); ++i) {
134 fSimpleRenderPasses[i]->unref(fGpu); 135 fSimpleRenderPasses[i]->unref(fGpu);
135 } 136 }
136 fSimpleRenderPasses.reset(); 137 fSimpleRenderPasses.reset();
137 138
138 // Iterate through all store GrVkSamplers and unref them before resetting th e hash. 139 // Iterate through all store GrVkSamplers and unref them before resetting th e hash.
139 SkTDynamicHash<GrVkSampler, uint8_t>::Iter iter(&fSamplers); 140 SkTDynamicHash<GrVkSampler, uint16_t>::Iter iter(&fSamplers);
140 for (; !iter.done(); ++iter) { 141 for (; !iter.done(); ++iter) {
141 (*iter).unref(fGpu); 142 (*iter).unref(fGpu);
142 } 143 }
143 fSamplers.reset(); 144 fSamplers.reset();
144 145
145 fPipelineStateCache->release(); 146 fPipelineStateCache->release();
146 147
147 #ifdef SK_TRACE_VK_RESOURCES 148 #ifdef SK_TRACE_VK_RESOURCES
148 SkASSERT(0 == GrVkResource::fTrace.count()); 149 SkASSERT(0 == GrVkResource::fTrace.count());
149 #endif 150 #endif
150 151
151 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineCache(fGpu->device(), fPipeli neCache, nullptr)); 152 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineCache(fGpu->device(), fPipeli neCache, nullptr));
152 fPipelineCache = VK_NULL_HANDLE; 153 fPipelineCache = VK_NULL_HANDLE;
153 } 154 }
154 155
155 void GrVkResourceProvider::abandonResources() { 156 void GrVkResourceProvider::abandonResources() {
156 // release our current command buffers 157 // release our current command buffers
157 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) { 158 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) {
158 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu)); 159 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu));
159 fActiveCommandBuffers[i]->unrefAndAbandon(); 160 fActiveCommandBuffers[i]->unrefAndAbandon();
160 } 161 }
161 fActiveCommandBuffers.reset(); 162 fActiveCommandBuffers.reset();
162 163
163 for (int i = 0; i < fSimpleRenderPasses.count(); ++i) { 164 for (int i = 0; i < fSimpleRenderPasses.count(); ++i) {
164 fSimpleRenderPasses[i]->unrefAndAbandon(); 165 fSimpleRenderPasses[i]->unrefAndAbandon();
165 } 166 }
166 fSimpleRenderPasses.reset(); 167 fSimpleRenderPasses.reset();
167 168
168 // Iterate through all store GrVkSamplers and unrefAndAbandon them before re setting the hash. 169 // Iterate through all store GrVkSamplers and unrefAndAbandon them before re setting the hash.
169 SkTDynamicHash<GrVkSampler, uint8_t>::Iter iter(&fSamplers); 170 SkTDynamicHash<GrVkSampler, uint16_t>::Iter iter(&fSamplers);
170 for (; !iter.done(); ++iter) { 171 for (; !iter.done(); ++iter) {
171 (*iter).unrefAndAbandon(); 172 (*iter).unrefAndAbandon();
172 } 173 }
173 fSamplers.reset(); 174 fSamplers.reset();
174 175
175 fPipelineStateCache->abandon(); 176 fPipelineStateCache->abandon();
176 177
177 #ifdef SK_TRACE_VK_RESOURCES 178 #ifdef SK_TRACE_VK_RESOURCES
178 SkASSERT(0 == GrVkResource::fTrace.count()); 179 SkASSERT(0 == GrVkResource::fTrace.count());
179 #endif 180 #endif
180 fPipelineCache = VK_NULL_HANDLE; 181 fPipelineCache = VK_NULL_HANDLE;
181 } 182 }
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkResourceProvider.h ('k') | src/gpu/vk/GrVkSampler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698