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

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: 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" 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 new VkDescriptorSetLayoutBi nding[numSamplers]); 149 new VkDescriptorSetLayoutBi nding[numSamplers]);
167 for (uint32_t i = 0; i < numSamplers; ++i) { 150 for (uint32_t i = 0; i < numSamplers; ++i) {
168 UniformHandle uniHandle = fSamplerUniforms[i]; 151 UniformHandle uniHandle = fSamplerUniforms[i];
169 GrVkUniformHandler::UniformInfo uniformInfo = fUniformHandler.getUniform Info(uniHandle); 152 GrVkUniformHandler::UniformInfo uniformInfo = fUniformHandler.getUniform Info(uniHandle);
170 SkASSERT(kSampler2D_GrSLType == uniformInfo.fVariable.getType()); 153 SkASSERT(kSampler2D_GrSLType == uniformInfo.fVariable.getType());
171 SkASSERT(0 == uniformInfo.fSetNumber); 154 SkASSERT(0 == uniformInfo.fSetNumber);
172 SkASSERT(uniformInfo.fBinding == i); 155 SkASSERT(uniformInfo.fBinding == i);
173 dsSamplerBindings[i].binding = uniformInfo.fBinding; 156 dsSamplerBindings[i].binding = uniformInfo.fBinding;
174 dsSamplerBindings[i].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_ SAMPLER; 157 dsSamplerBindings[i].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_ SAMPLER;
175 dsSamplerBindings[i].descriptorCount = 1; 158 dsSamplerBindings[i].descriptorCount = 1;
176 dsSamplerBindings[i].stageFlags = visibility_to_vk_stage_flags(uniformIn fo.fVisibility); 159 dsSamplerBindings[i].stageFlags = visibility_to_vk_stage_flags(uniformIn fo.fVisibility);
Chris Dalton 2016/03/10 08:36:04 Will this make all the magic happen? Or is there o
egdaniel 2016/03/11 14:22:27 That should just work.
177 dsSamplerBindings[i].pImmutableSamplers = nullptr; 160 dsSamplerBindings[i].pImmutableSamplers = nullptr;
178 } 161 }
179 162
180 VkDescriptorSetLayoutCreateInfo dsSamplerLayoutCreateInfo; 163 VkDescriptorSetLayoutCreateInfo dsSamplerLayoutCreateInfo;
181 memset(&dsSamplerLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo )); 164 memset(&dsSamplerLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo ));
182 dsSamplerLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CR EATE_INFO; 165 dsSamplerLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CR EATE_INFO;
183 dsSamplerLayoutCreateInfo.pNext = nullptr; 166 dsSamplerLayoutCreateInfo.pNext = nullptr;
184 dsSamplerLayoutCreateInfo.flags = 0; 167 dsSamplerLayoutCreateInfo.flags = 0;
185 dsSamplerLayoutCreateInfo.bindingCount = fSamplerUniforms.count(); 168 dsSamplerLayoutCreateInfo.bindingCount = fSamplerUniforms.count();
186 // Setting to nullptr fixes an error in the param checker validation layer. Even though 169 // Setting to nullptr fixes an error in the param checker validation layer. Even though
(...skipping 127 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

Powered by Google App Engine
This is Rietveld 408576698