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

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

Issue 674543004: OptState owns program descriptor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: feedback inc Created 6 years, 2 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 2011 Google Inc. 2 * Copyright 2011 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 "GrGLProgram.h" 8 #include "GrGLProgram.h"
9 9
10 #include "GrAllocator.h" 10 #include "GrAllocator.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]); 49 combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]);
50 combined.set(SkMatrix::kMTransY, 50 combined.set(SkMatrix::kMTransY,
51 combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]); 51 combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]);
52 } 52 }
53 return combined; 53 return combined;
54 } 54 }
55 55
56 //////////////////////////////////////////////////////////////////////////////// /////////////////// 56 //////////////////////////////////////////////////////////////////////////////// ///////////////////
57 57
58 GrGLProgram::GrGLProgram(GrGpuGL* gpu, 58 GrGLProgram::GrGLProgram(GrGpuGL* gpu,
59 const GrGLProgramDesc& desc, 59 const GrProgramDesc& desc,
60 const BuiltinUniformHandles& builtinUniforms, 60 const BuiltinUniformHandles& builtinUniforms,
61 GrGLuint programID, 61 GrGLuint programID,
62 const UniformInfoArray& uniforms, 62 const UniformInfoArray& uniforms,
63 GrGLInstalledGeoProc* geometryProcessor, 63 GrGLInstalledGeoProc* geometryProcessor,
64 GrGLInstalledFragProcs* fragmentProcessors) 64 GrGLInstalledFragProcs* fragmentProcessors)
65 : fColor(GrColor_ILLEGAL) 65 : fColor(GrColor_ILLEGAL)
66 , fCoverage(GrColor_ILLEGAL) 66 , fCoverage(GrColor_ILLEGAL)
67 , fDstCopyTexUnit(-1) 67 , fDstCopyTexUnit(-1)
68 , fBuiltinUniformHandles(builtinUniforms) 68 , fBuiltinUniformHandles(builtinUniforms)
69 , fProgramID(programID) 69 , fProgramID(programID)
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 197 }
198 } 198 }
199 199
200 void GrGLProgram::didSetData(GrGpu::DrawType drawType) { 200 void GrGLProgram::didSetData(GrGpu::DrawType drawType) {
201 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); 201 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType));
202 } 202 }
203 203
204 void GrGLProgram::setColor(const GrOptDrawState& optState, 204 void GrGLProgram::setColor(const GrOptDrawState& optState,
205 GrColor color, 205 GrColor color,
206 SharedGLState* sharedState) { 206 SharedGLState* sharedState) {
207 const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader(); 207 const GrProgramDesc::KeyHeader& header = fDesc.header();
208 if (!optState.hasColorVertexAttribute()) { 208 if (-1 != header.fColorAttributeIndex) {
209 switch (header.fColorInput) { 209 switch (header.fColorInput) {
210 case GrGLProgramDesc::kAttribute_ColorInput: 210 case GrProgramDesc::kAttribute_ColorInput:
211 SkASSERT(-1 != header.fColorAttributeIndex);
212 if (sharedState->fConstAttribColor != color || 211 if (sharedState->fConstAttribColor != color ||
213 sharedState->fConstAttribColorIndex != header.fColorAttribut eIndex) { 212 sharedState->fConstAttribColorIndex != header.fColorAttribut eIndex) {
214 // OpenGL ES only supports the float varieties of glVertexAt trib 213 // OpenGL ES only supports the float varieties of glVertexAt trib
215 GrGLfloat c[4]; 214 GrGLfloat c[4];
216 GrColorToRGBAFloat(color, c); 215 GrColorToRGBAFloat(color, c);
217 GL_CALL(VertexAttrib4fv(header.fColorAttributeIndex, c)); 216 GL_CALL(VertexAttrib4fv(header.fColorAttributeIndex, c));
218 sharedState->fConstAttribColor = color; 217 sharedState->fConstAttribColor = color;
219 sharedState->fConstAttribColorIndex = header.fColorAttribute Index; 218 sharedState->fConstAttribColorIndex = header.fColorAttribute Index;
220 } 219 }
221 break; 220 break;
222 case GrGLProgramDesc::kUniform_ColorInput: 221 case GrProgramDesc::kUniform_ColorInput:
223 if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid( )) { 222 if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid( )) {
224 // OpenGL ES doesn't support unsigned byte varieties of glUn iform 223 // OpenGL ES doesn't support unsigned byte varieties of glUn iform
225 GrGLfloat c[4]; 224 GrGLfloat c[4];
226 GrColorToRGBAFloat(color, c); 225 GrColorToRGBAFloat(color, c);
227 fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1, c); 226 fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1, c);
228 fColor = color; 227 fColor = color;
229 } 228 }
230 sharedState->fConstAttribColorIndex = -1; 229 sharedState->fConstAttribColorIndex = -1;
231 break; 230 break;
232 case GrGLProgramDesc::kAllOnes_ColorInput: 231 case GrProgramDesc::kAllOnes_ColorInput:
233 sharedState->fConstAttribColorIndex = -1; 232 sharedState->fConstAttribColorIndex = -1;
234 break; 233 break;
235 default: 234 default:
236 SkFAIL("Unexpected color type."); 235 SkFAIL("Unexpected color type.");
237 } 236 }
238 } else { 237 } else {
239 sharedState->fConstAttribColorIndex = -1; 238 sharedState->fConstAttribColorIndex = -1;
240 } 239 }
241 } 240 }
242 241
243 void GrGLProgram::setCoverage(const GrOptDrawState& optState, 242 void GrGLProgram::setCoverage(const GrOptDrawState& optState,
244 GrColor coverage, 243 GrColor coverage,
245 SharedGLState* sharedState) { 244 SharedGLState* sharedState) {
246 const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader(); 245 const GrProgramDesc::KeyHeader& header = fDesc.header();
247 if (!optState.hasCoverageVertexAttribute()) { 246 if (-1 != header.fCoverageAttributeIndex) {
248 switch (header.fCoverageInput) { 247 switch (header.fCoverageInput) {
249 case GrGLProgramDesc::kAttribute_ColorInput: 248 case GrProgramDesc::kAttribute_ColorInput:
250 if (sharedState->fConstAttribCoverage != coverage || 249 if (sharedState->fConstAttribCoverage != coverage ||
251 sharedState->fConstAttribCoverageIndex != header.fCoverageAt tributeIndex) { 250 sharedState->fConstAttribCoverageIndex != header.fCoverageAt tributeIndex) {
252 // OpenGL ES only supports the float varieties of glVertexA ttrib 251 // OpenGL ES only supports the float varieties of glVertexA ttrib
253 GrGLfloat c[4]; 252 GrGLfloat c[4];
254 GrColorToRGBAFloat(coverage, c); 253 GrColorToRGBAFloat(coverage, c);
255 GL_CALL(VertexAttrib4fv(header.fCoverageAttributeIndex, c)); 254 GL_CALL(VertexAttrib4fv(header.fCoverageAttributeIndex, c));
256 sharedState->fConstAttribCoverage = coverage; 255 sharedState->fConstAttribCoverage = coverage;
257 sharedState->fConstAttribCoverageIndex = header.fCoverageAtt ributeIndex; 256 sharedState->fConstAttribCoverageIndex = header.fCoverageAtt ributeIndex;
258 } 257 }
259 break; 258 break;
260 case GrGLProgramDesc::kUniform_ColorInput: 259 case GrProgramDesc::kUniform_ColorInput:
261 if (fCoverage != coverage) { 260 if (fCoverage != coverage) {
262 // OpenGL ES doesn't support unsigned byte varieties of glUn iform 261 // OpenGL ES doesn't support unsigned byte varieties of glUn iform
263 GrGLfloat c[4]; 262 GrGLfloat c[4];
264 GrColorToRGBAFloat(coverage, c); 263 GrColorToRGBAFloat(coverage, c);
265 fProgramDataManager.set4fv(fBuiltinUniformHandles.fCoverageU ni, 1, c); 264 fProgramDataManager.set4fv(fBuiltinUniformHandles.fCoverageU ni, 1, c);
266 fCoverage = coverage; 265 fCoverage = coverage;
267 } 266 }
268 sharedState->fConstAttribCoverageIndex = -1; 267 sharedState->fConstAttribCoverageIndex = -1;
269 break; 268 break;
270 case GrGLProgramDesc::kAllOnes_ColorInput: 269 case GrProgramDesc::kAllOnes_ColorInput:
271 sharedState->fConstAttribCoverageIndex = -1; 270 sharedState->fConstAttribCoverageIndex = -1;
272 break; 271 break;
273 default: 272 default:
274 SkFAIL("Unexpected coverage type."); 273 SkFAIL("Unexpected coverage type.");
275 } 274 }
276 } else { 275 } else {
277 sharedState->fConstAttribCoverageIndex = -1; 276 sharedState->fConstAttribCoverageIndex = -1;
278 } 277 }
279 } 278 }
280 279
(...skipping 30 matching lines...) Expand all
311 310
312 GrGLfloat rtAdjustmentVec[4]; 311 GrGLfloat rtAdjustmentVec[4];
313 fMatrixState.getRTAdjustmentVec(rtAdjustmentVec); 312 fMatrixState.getRTAdjustmentVec(rtAdjustmentVec);
314 fProgramDataManager.set4fv(fBuiltinUniformHandles.fRTAdjustmentUni, 1, r tAdjustmentVec); 313 fProgramDataManager.set4fv(fBuiltinUniformHandles.fRTAdjustmentUni, 1, r tAdjustmentVec);
315 } 314 }
316 } 315 }
317 316
318 //////////////////////////////////////////////////////////////////////////////// ///////// 317 //////////////////////////////////////////////////////////////////////////////// /////////
319 318
320 GrGLNvprProgramBase::GrGLNvprProgramBase(GrGpuGL* gpu, 319 GrGLNvprProgramBase::GrGLNvprProgramBase(GrGpuGL* gpu,
321 const GrGLProgramDesc& desc, 320 const GrProgramDesc& desc,
322 const BuiltinUniformHandles& builtinUni forms, 321 const BuiltinUniformHandles& builtinUni forms,
323 GrGLuint programID, 322 GrGLuint programID,
324 const UniformInfoArray& uniforms, 323 const UniformInfoArray& uniforms,
325 GrGLInstalledFragProcs* fragmentProcess ors) 324 GrGLInstalledFragProcs* fragmentProcess ors)
326 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, NULL, fragmentP rocessors) { 325 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, NULL, fragmentP rocessors) {
327 } 326 }
328 327
329 void GrGLNvprProgramBase::onSetMatrixAndRenderTargetHeight(GrGpu::DrawType drawT ype, 328 void GrGLNvprProgramBase::onSetMatrixAndRenderTargetHeight(GrGpu::DrawType drawT ype,
330 const GrOptDrawState& optState) { 329 const GrOptDrawState& optState) {
331 SkASSERT(GrGpu::IsPathRenderingDrawType(drawType)); 330 SkASSERT(GrGpu::IsPathRenderingDrawType(drawType));
332 const GrRenderTarget* rt = optState.getRenderTarget(); 331 const GrRenderTarget* rt = optState.getRenderTarget();
333 SkISize size; 332 SkISize size;
334 size.set(rt->width(), rt->height()); 333 size.set(rt->width(), rt->height());
335 fGpu->glPathRendering()->setProjectionMatrix(optState.getViewMatrix(), size, rt->origin()); 334 fGpu->glPathRendering()->setProjectionMatrix(optState.getViewMatrix(), size, rt->origin());
336 } 335 }
337 336
338 //////////////////////////////////////////////////////////////////////////////// ///////// 337 //////////////////////////////////////////////////////////////////////////////// /////////
339 338
340 GrGLNvprProgram::GrGLNvprProgram(GrGpuGL* gpu, 339 GrGLNvprProgram::GrGLNvprProgram(GrGpuGL* gpu,
341 const GrGLProgramDesc& desc, 340 const GrProgramDesc& desc,
342 const BuiltinUniformHandles& builtinUniforms, 341 const BuiltinUniformHandles& builtinUniforms,
343 GrGLuint programID, 342 GrGLuint programID,
344 const UniformInfoArray& uniforms, 343 const UniformInfoArray& uniforms,
345 GrGLInstalledFragProcs* fragmentProcessors, 344 GrGLInstalledFragProcs* fragmentProcessors,
346 const SeparableVaryingInfoArray& separableVaryi ngs) 345 const SeparableVaryingInfoArray& separableVaryi ngs)
347 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, fragmentProcess ors) { 346 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, fragmentProcess ors) {
348 int count = separableVaryings.count(); 347 int count = separableVaryings.count();
349 fVaryings.push_back_n(count); 348 fVaryings.push_back_n(count);
350 for (int i = 0; i < count; i++) { 349 for (int i = 0; i < count; i++) {
351 Varying& varying = fVaryings[i]; 350 Varying& varying = fVaryings[i];
(...skipping 28 matching lines...) Expand all
380 fragmentIn put.fLocation, 379 fragmentIn put.fLocation,
381 GR_GL_OBJE CT_LINEAR, 380 GR_GL_OBJE CT_LINEAR,
382 components , 381 components ,
383 transform) ; 382 transform) ;
384 } 383 }
385 } 384 }
386 385
387 //////////////////////////////////////////////////////////////////////////////// ////// 386 //////////////////////////////////////////////////////////////////////////////// //////
388 387
389 GrGLLegacyNvprProgram::GrGLLegacyNvprProgram(GrGpuGL* gpu, 388 GrGLLegacyNvprProgram::GrGLLegacyNvprProgram(GrGpuGL* gpu,
390 const GrGLProgramDesc& desc, 389 const GrProgramDesc& desc,
391 const BuiltinUniformHandles& builti nUniforms, 390 const BuiltinUniformHandles& builti nUniforms,
392 GrGLuint programID, 391 GrGLuint programID,
393 const UniformInfoArray& uniforms, 392 const UniformInfoArray& uniforms,
394 GrGLInstalledFragProcs* fps, 393 GrGLInstalledFragProcs* fps,
395 int texCoordSetCnt) 394 int texCoordSetCnt)
396 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, fps) 395 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, fps)
397 , fTexCoordSetCnt(texCoordSetCnt) { 396 , fTexCoordSetCnt(texCoordSetCnt) {
398 } 397 }
399 398
400 void GrGLLegacyNvprProgram::didSetData(GrGpu::DrawType drawType) { 399 void GrGLLegacyNvprProgram::didSetData(GrGpu::DrawType drawType) {
401 SkASSERT(GrGpu::IsPathRenderingDrawType(drawType)); 400 SkASSERT(GrGpu::IsPathRenderingDrawType(drawType));
402 fGpu->glPathRendering()->flushPathTexGenSettings(fTexCoordSetCnt); 401 fGpu->glPathRendering()->flushPathTexGenSettings(fTexCoordSetCnt);
403 } 402 }
404 403
405 void 404 void
406 GrGLLegacyNvprProgram::setTransformData(const GrFragmentStage& proc, GrGLInstall edFragProc* ip) { 405 GrGLLegacyNvprProgram::setTransformData(const GrFragmentStage& proc, GrGLInstall edFragProc* ip) {
407 // We've hidden the texcoord index in the first entry of the transforms arra y for each effect 406 // We've hidden the texcoord index in the first entry of the transforms arra y for each effect
408 int texCoordIndex = ip->fTransforms[0].fHandle.handle(); 407 int texCoordIndex = ip->fTransforms[0].fHandle.handle();
409 int numTransforms = proc.getProcessor()->numTransforms(); 408 int numTransforms = proc.getProcessor()->numTransforms();
410 for (int t = 0; t < numTransforms; ++t) { 409 for (int t = 0; t < numTransforms; ++t) {
411 const SkMatrix& transform = get_transform_matrix(proc, false, t); 410 const SkMatrix& transform = get_transform_matrix(proc, false, t);
412 GrGLPathRendering::PathTexGenComponents components = 411 GrGLPathRendering::PathTexGenComponents components =
413 GrGLPathRendering::kST_PathTexGenComponents; 412 GrGLPathRendering::kST_PathTexGenComponents;
414 if (proc.isPerspectiveCoordTransform(t, false)) { 413 if (proc.isPerspectiveCoordTransform(t, false)) {
415 components = GrGLPathRendering::kSTR_PathTexGenComponents; 414 components = GrGLPathRendering::kSTR_PathTexGenComponents;
416 } 415 }
417 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t ransform); 416 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t ransform);
418 } 417 }
419 } 418 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698