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

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

Issue 1782583002: Add support for vertex and geometry shader textures (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: better rebase 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
« no previous file with comments | « src/gpu/vk/GrVkProgramBuilder.h ('k') | src/gpu/vk/GrVkTexture.cpp » ('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 "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" 12 #include "vk/GrVkProgram.h"
13 13
14 GrVkProgram* GrVkProgramBuilder::CreateProgram(GrVkGpu* gpu, 14 GrVkProgram* GrVkProgramBuilder::CreateProgram(GrVkGpu* gpu,
15 const DrawArgs& args, 15 const DrawArgs& args,
16 GrPrimitiveType primitiveType, 16 GrPrimitiveType primitiveType,
17 const GrVkRenderPass& renderPass) { 17 const GrVkRenderPass& renderPass) {
18 // create a builder. This will be handed off to effects so they can use it to add 18 // create a builder. This will be handed off to effects so they can use it to add
19 // uniforms, varyings, textures, etc 19 // uniforms, varyings, textures, etc
20 GrVkProgramBuilder builder(gpu, args); 20 GrVkProgramBuilder builder(gpu, args);
21 21
22 GrGLSLExpr4 inputColor; 22 GrGLSLExpr4 inputColor;
23 GrGLSLExpr4 inputCoverage; 23 GrGLSLExpr4 inputCoverage;
24 24
25 if (!builder.emitAndInstallProcs(&inputColor, 25 if (!builder.emitAndInstallProcs(&inputColor, &inputCoverage)) {
26 &inputCoverage,
27 gpu->vkCaps().maxSampledTextures())) {
28 builder.cleanupFragmentProcessors(); 26 builder.cleanupFragmentProcessors();
29 return nullptr; 27 return nullptr;
30 } 28 }
31 29
32 return builder.finalize(args, primitiveType, renderPass); 30 return builder.finalize(args, primitiveType, renderPass);
33 } 31 }
34 32
35 GrVkProgramBuilder::GrVkProgramBuilder(GrVkGpu* gpu, const DrawArgs& args) 33 GrVkProgramBuilder::GrVkProgramBuilder(GrVkGpu* gpu, const DrawArgs& args)
36 : INHERITED(args) 34 : INHERITED(args)
37 , fGpu(gpu) 35 , fGpu(gpu)
38 , fVaryingHandler(this) 36 , fVaryingHandler(this)
39 , fUniformHandler(this) { 37 , fUniformHandler(this) {
40 } 38 }
41 39
42 const GrCaps* GrVkProgramBuilder::caps() const { 40 const GrCaps* GrVkProgramBuilder::caps() const {
43 return fGpu->caps(); 41 return fGpu->caps();
44 } 42 }
45 const GrGLSLCaps* GrVkProgramBuilder::glslCaps() const { 43 const GrGLSLCaps* GrVkProgramBuilder::glslCaps() const {
46 return fGpu->vkCaps().glslCaps(); 44 return fGpu->vkCaps().glslCaps();
47 } 45 }
48 46
49 void GrVkProgramBuilder::finalizeFragmentOutputColor(GrGLSLShaderVar& outputColo r) { 47 void GrVkProgramBuilder::finalizeFragmentOutputColor(GrGLSLShaderVar& outputColo r) {
50 outputColor.setLayoutQualifier("location = 0"); 48 outputColor.setLayoutQualifier("location = 0");
51 } 49 }
52 50
53 void GrVkProgramBuilder::emitSamplers(const GrProcessor& processor,
54 GrGLSLTextureSampler::TextureSamplerArray* outSamplers) {
55 int numTextures = processor.numTextures();
56 UniformHandle* localSamplerUniforms = fSamplerUniforms.push_back_n(numTextur es);
57 SkString name;
58 for (int t = 0; t < numTextures; ++t) {
59 name.printf("%d", t);
60 localSamplerUniforms[t] =
61 fUniformHandler.addUniform(kFragment_GrShaderFlag,
62 kSampler2D_GrSLType, kDefault_GrSLPrecisi on,
63 name.c_str());
64 outSamplers->emplace_back(localSamplerUniforms[t], processor.textureAcce ss(t));
65 }
66 }
67
68 VkShaderStageFlags visibility_to_vk_stage_flags(uint32_t visibility) { 51 VkShaderStageFlags visibility_to_vk_stage_flags(uint32_t visibility) {
69 VkShaderStageFlags flags = 0; 52 VkShaderStageFlags flags = 0;
70 53
71 if (visibility & kVertex_GrShaderFlag) { 54 if (visibility & kVertex_GrShaderFlag) {
72 flags |= VK_SHADER_STAGE_VERTEX_BIT; 55 flags |= VK_SHADER_STAGE_VERTEX_BIT;
73 } 56 }
74 if (visibility & kGeometry_GrShaderFlag) { 57 if (visibility & kGeometry_GrShaderFlag) {
75 flags |= VK_SHADER_STAGE_GEOMETRY_BIT; 58 flags |= VK_SHADER_STAGE_GEOMETRY_BIT;
76 } 59 }
77 if (visibility & kFragment_GrShaderFlag) { 60 if (visibility & kFragment_GrShaderFlag) {
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 descriptorSets, 297 descriptorSets,
315 fUniformHandles, 298 fUniformHandles,
316 fUniformHandler.fUniforms, 299 fUniformHandler.fUniforms,
317 fUniformHandler.fCurrentVertexUBOOffset, 300 fUniformHandler.fCurrentVertexUBOOffset,
318 fUniformHandler.fCurrentFragmentUBOOffset, 301 fUniformHandler.fCurrentFragmentUBOOffset,
319 numSamplers, 302 numSamplers,
320 fGeometryProcessor, 303 fGeometryProcessor,
321 fXferProcessor, 304 fXferProcessor,
322 fFragmentProcessors); 305 fFragmentProcessors);
323 } 306 }
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkProgramBuilder.h ('k') | src/gpu/vk/GrVkTexture.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698