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

Side by Side Diff: src/gpu/gl/GrGLProgramDesc.cpp

Issue 678953002: Default geometry processor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix dm bug Created 6 years, 1 month 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 2013 Google Inc. 2 * Copyright 2013 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 "gl/builders/GrGLFragmentShaderBuilder.h" 8 #include "gl/builders/GrGLFragmentShaderBuilder.h"
9 #include "GrGLProgramDesc.h" 9 #include "GrGLProgramDesc.h"
10 #include "GrBackendProcessorFactory.h" 10 #include "GrBackendProcessorFactory.h"
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 217
218 int numStages = optState.numTotalStages(); 218 int numStages = optState.numTotalStages();
219 219
220 GR_STATIC_ASSERT(0 == kEffectKeyOffsetsAndLengthOffset % sizeof(uint32_t)); 220 GR_STATIC_ASSERT(0 == kEffectKeyOffsetsAndLengthOffset % sizeof(uint32_t));
221 // Make room for everything up to and including the array of offsets to effe ct keys. 221 // Make room for everything up to and including the array of offsets to effe ct keys.
222 desc->fKey.reset(); 222 desc->fKey.reset();
223 desc->fKey.push_back_n(kEffectKeyOffsetsAndLengthOffset + 2 * sizeof(uint16_ t) * numStages); 223 desc->fKey.push_back_n(kEffectKeyOffsetsAndLengthOffset + 2 * sizeof(uint16_ t) * numStages);
224 224
225 int offsetAndSizeIndex = 0; 225 int offsetAndSizeIndex = 0;
226 226
227 // We can only have one effect which touches the vertex shader 227 bool noGP = gpu->caps()->pathRenderingSupport() && GrGpu::IsPathRenderingDra wType(drawType);
228 if (optState.hasGeometryProcessor()) { 228
229 // We can only have one effect which touches the vertex shader, optState wil l install a
230 // default GP if none are available
231 if (!noGP) {
229 if (!BuildStagedProcessorKey<GeometryProcessorKeyBuilder>(*optState.getG eometryProcessor(), 232 if (!BuildStagedProcessorKey<GeometryProcessorKeyBuilder>(*optState.getG eometryProcessor(),
230 gpu->glCaps(), 233 gpu->glCaps(),
231 false, 234 false,
232 desc, 235 desc,
233 &offsetAndSize Index)) { 236 &offsetAndSize Index)) {
234 return false; 237 return false;
235 } 238 }
236 } 239 }
237 240
238 for (int s = 0; s < optState.numFragmentStages(); ++s) { 241 for (int s = 0; s < optState.numFragmentStages(); ++s) {
239 if (!BuildStagedProcessorKey<FragmentProcessorKeyBuilder>(optState.getFr agmentStage(s), 242 if (!BuildStagedProcessorKey<FragmentProcessorKeyBuilder>(optState.getFr agmentStage(s),
240 gpu->glCaps(), 243 gpu->glCaps(),
241 requiresLocalC oordAttrib, 244 requiresLocalC oordAttrib,
242 desc, 245 desc,
243 &offsetAndSize Index)) { 246 &offsetAndSize Index)) {
244 return false; 247 return false;
245 } 248 }
246 } 249 }
247 250
248 // --------DO NOT MOVE HEADER ABOVE THIS LINE------------------------------- ------------------- 251 // --------DO NOT MOVE HEADER ABOVE THIS LINE------------------------------- -------------------
249 // Because header is a pointer into the dynamic array, we can't push any new data into the key 252 // Because header is a pointer into the dynamic array, we can't push any new data into the key
250 // below here. 253 // below here.
251 KeyHeader* header = desc->header(); 254 KeyHeader* header = desc->header();
252 255
253 // make sure any padding in the header is zeroed. 256 // make sure any padding in the header is zeroed.
254 memset(header, 0, kHeaderSize); 257 memset(header, 0, kHeaderSize);
255 258
256 header->fHasGeometryProcessor = optState.hasGeometryProcessor();
257
258 header->fEmitsPointSize = GrGpu::kDrawPoints_DrawType == drawType; 259 header->fEmitsPointSize = GrGpu::kDrawPoints_DrawType == drawType;
259 260
260 if (gpu->caps()->pathRenderingSupport() && 261 if (noGP &&
261 GrGpu::IsPathRenderingDrawType(drawType) &&
262 gpu->glPathRendering()->texturingMode() == GrGLPathRendering::FixedFunct ion_TexturingMode) { 262 gpu->glPathRendering()->texturingMode() == GrGLPathRendering::FixedFunct ion_TexturingMode) {
263 // We still have a default geometry processor installed on the opt draw state, but it is
bsalomon 2014/10/27 13:43:43 I think we will have to figure out how to make the
264 // ignored for generating keys, and also ignored in the programbuilder
263 header->fUseFragShaderOnly = true; 265 header->fUseFragShaderOnly = true;
264 SkASSERT(!optState.hasGeometryProcessor());
265 } else { 266 } else {
266 header->fUseFragShaderOnly = false; 267 header->fUseFragShaderOnly = false;
267 } 268 }
268 269
269 bool defaultToUniformInputs = GrGpu::IsPathRenderingDrawType(drawType) || 270 bool defaultToUniformInputs = GrGpu::IsPathRenderingDrawType(drawType) ||
270 GR_GL_NO_CONSTANT_ATTRIBUTES; 271 GR_GL_NO_CONSTANT_ATTRIBUTES;
271 272
272 if (!inputColorIsUsed) { 273 if (!inputColorIsUsed) {
273 header->fColorInput = kAllOnes_ColorInput; 274 header->fColorInput = kAllOnes_ColorInput;
274 } else if (defaultToUniformInputs && !optState.hasColorVertexAttribute()) { 275 } else if (defaultToUniformInputs && !optState.hasColorVertexAttribute()) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 *checksum = 0; 355 *checksum = 0;
355 *checksum = SkChecksum::Compute(reinterpret_cast<uint32_t*>(fKey.begin()), k eyLength); 356 *checksum = SkChecksum::Compute(reinterpret_cast<uint32_t*>(fKey.begin()), k eyLength);
356 } 357 }
357 358
358 GrGLProgramDesc& GrGLProgramDesc::operator= (const GrGLProgramDesc& other) { 359 GrGLProgramDesc& GrGLProgramDesc::operator= (const GrGLProgramDesc& other) {
359 size_t keyLength = other.keyLength(); 360 size_t keyLength = other.keyLength();
360 fKey.reset(keyLength); 361 fKey.reset(keyLength);
361 memcpy(fKey.begin(), other.fKey.begin(), keyLength); 362 memcpy(fKey.begin(), other.fKey.begin(), keyLength);
362 return *this; 363 return *this;
363 } 364 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698