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

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

Issue 1816153002: Set up cache in vulkan to reuse GrVkPrograms (aka VkPipelines) (Closed) Base URL: https://skia.googlesource.com/skia.git@progSamplers
Patch Set: cleanup Created 4 years, 9 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
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 "vk/GrVkProgramBuilder.h" 8 #include "vk/GrVkProgramBuilder.h"
9 9
10 #include "vk/GrVkGpu.h" 10 #include "vk/GrVkGpu.h"
11 #include "vk/GrVkRenderPass.h" 11 #include "vk/GrVkRenderPass.h"
12 #include "vk/GrVkProgram.h"
13 12
14 GrVkProgram* GrVkProgramBuilder::CreateProgram(GrVkGpu* gpu, 13 GrVkProgram* GrVkProgramBuilder::CreateProgram(GrVkGpu* gpu,
15 const GrPipeline& pipeline, 14 const GrPipeline& pipeline,
16 const GrPrimitiveProcessor& primP roc, 15 const GrPrimitiveProcessor& primP roc,
17 GrPrimitiveType primitiveType, 16 GrPrimitiveType primitiveType,
18 const GrVkProgramDesc& desc, 17 const GrVkProgram::PipelineDesc& desc,
19 const GrVkRenderPass& renderPass) { 18 const GrVkRenderPass& renderPass) {
20 // create a builder. This will be handed off to effects so they can use it to add 19 // create a builder. This will be handed off to effects so they can use it to add
21 // uniforms, varyings, textures, etc 20 // uniforms, varyings, textures, etc
22 GrVkProgramBuilder builder(gpu, pipeline, primProc, desc); 21 GrVkProgramBuilder builder(gpu, pipeline, primProc, desc.fProgramDesc);
23 22
24 GrGLSLExpr4 inputColor; 23 GrGLSLExpr4 inputColor;
25 GrGLSLExpr4 inputCoverage; 24 GrGLSLExpr4 inputCoverage;
26 25
27 if (!builder.emitAndInstallProcs(&inputColor, &inputCoverage)) { 26 if (!builder.emitAndInstallProcs(&inputColor, &inputCoverage)) {
28 builder.cleanupFragmentProcessors(); 27 builder.cleanupFragmentProcessors();
29 return nullptr; 28 return nullptr;
30 } 29 }
31 30
32 return builder.finalize(primitiveType, renderPass); 31 return builder.finalize(primitiveType, renderPass, desc);
33 } 32 }
34 33
35 GrVkProgramBuilder::GrVkProgramBuilder(GrVkGpu* gpu, 34 GrVkProgramBuilder::GrVkProgramBuilder(GrVkGpu* gpu,
36 const GrPipeline& pipeline, 35 const GrPipeline& pipeline,
37 const GrPrimitiveProcessor& primProc, 36 const GrPrimitiveProcessor& primProc,
38 const GrVkProgramDesc& desc) 37 const GrVkProgramDesc& desc)
39 : INHERITED(pipeline, primProc, desc) 38 : INHERITED(pipeline, primProc, desc)
40 , fGpu(gpu) 39 , fGpu(gpu)
41 , fVaryingHandler(this) 40 , fVaryingHandler(this)
42 , fUniformHandler(this) { 41 , fUniformHandler(this) {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 stageInfo->flags = 0; 133 stageInfo->flags = 0;
135 stageInfo->stage = stage; 134 stageInfo->stage = stage;
136 stageInfo->module = *shaderModule; 135 stageInfo->module = *shaderModule;
137 stageInfo->pName = "main"; 136 stageInfo->pName = "main";
138 stageInfo->pSpecializationInfo = nullptr; 137 stageInfo->pSpecializationInfo = nullptr;
139 138
140 return true; 139 return true;
141 } 140 }
142 141
143 GrVkProgram* GrVkProgramBuilder::finalize(GrPrimitiveType primitiveType, 142 GrVkProgram* GrVkProgramBuilder::finalize(GrPrimitiveType primitiveType,
144 const GrVkRenderPass& renderPass) { 143 const GrVkRenderPass& renderPass,
144 const GrVkProgram::PipelineDesc& desc) {
145 VkDescriptorSetLayout dsLayout[2]; 145 VkDescriptorSetLayout dsLayout[2];
146 VkPipelineLayout pipelineLayout; 146 VkPipelineLayout pipelineLayout;
147 VkShaderModule vertShaderModule; 147 VkShaderModule vertShaderModule;
148 VkShaderModule fragShaderModule; 148 VkShaderModule fragShaderModule;
149 149
150 uint32_t numSamplers = fSamplerUniforms.count(); 150 uint32_t numSamplers = fSamplerUniforms.count();
151 151
152 SkAutoTDeleteArray<VkDescriptorSetLayoutBinding> dsSamplerBindings( 152 SkAutoTDeleteArray<VkDescriptorSetLayoutBinding> dsSamplerBindings(
153 new VkDescriptorSetLayoutBi nding[numSamplers]); 153 new VkDescriptorSetLayoutBi nding[numSamplers]);
154 for (uint32_t i = 0; i < numSamplers; ++i) { 154 for (uint32_t i = 0; i < numSamplers; ++i) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineLayout(fGpu->device(), pi pelineLayout, 266 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineLayout(fGpu->device(), pi pelineLayout,
267 nullptr)); 267 nullptr));
268 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ), dsLayout[0], 268 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ), dsLayout[0],
269 nullptr)); 269 nullptr));
270 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ), dsLayout[1], 270 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ), dsLayout[1],
271 nullptr)); 271 nullptr));
272 return nullptr; 272 return nullptr;
273 } 273 }
274 274
275 return new GrVkProgram(fGpu, 275 return new GrVkProgram(fGpu,
276 desc,
276 pipeline, 277 pipeline,
277 pipelineLayout, 278 pipelineLayout,
278 dsLayout, 279 dsLayout,
279 fUniformHandles, 280 fUniformHandles,
280 fUniformHandler.fUniforms, 281 fUniformHandler.fUniforms,
281 fUniformHandler.fCurrentVertexUBOOffset, 282 fUniformHandler.fCurrentVertexUBOOffset,
282 fUniformHandler.fCurrentFragmentUBOOffset, 283 fUniformHandler.fCurrentFragmentUBOOffset,
283 numSamplers, 284 numSamplers,
284 fGeometryProcessor, 285 fGeometryProcessor,
285 fXferProcessor, 286 fXferProcessor,
286 fFragmentProcessors); 287 fFragmentProcessors);
287 } 288 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698