GrGLProgram.h revision 861e1037017bbb7ac52ec5ebecab3a636a82a3e8
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com */ 7f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 9f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com#ifndef GrGLProgram_DEFINED 10f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com#define GrGLProgram_DEFINED 11f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 1230ba436f04e61d4505fb854d5fc56079636e0788joshualitt#include "builders/GrGLProgramBuilder.h" 1347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt#include "builders/GrGLNvprProgramBuilder.h" 14d8f856c32b679d9f5a9926feac005e2c0186f83ftomhudson@google.com#include "GrDrawState.h" 156177e6999d23a4268ffd98dedfb1da00e272a89brobertphillips@google.com#include "GrGLContext.h" 1631ec7985f2b52a0cab4aa714a613b918cf663c08bsalomon@google.com#include "GrGLProgramDesc.h" 17086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com#include "GrGLSL.h" 18890e3b58e78c0825820f75f1f0c5a5d71e855aa6bsalomon@google.com#include "GrGLTexture.h" 197510b224e52b9518a8ddf7418db0e9c258f79539kkinnunen#include "GrGLProgramDataManager.h" 20f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 21f0a104e6f16dc095286d32f1e104894ae0b2b19fbsalomon@google.com#include "SkString.h" 2297c88c255cff3dbb8343c5d090526fdbedad6dd6Scroggo#include "SkXfermode.h" 2397c88c255cff3dbb8343c5d090526fdbedad6dd6Scroggo 24b0a8a377f832c59cee939ad721e1f87d378b7142joshualittclass GrGLProcessor; 2547bb38283072dc87dc93220cd2f370ca109972ffjoshualittclass GrGLInstalledProcessors; 2630ba436f04e61d4505fb854d5fc56079636e0788joshualittclass GrGLProgramBuilder; 27f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 28f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com/** 29f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * This class manages a GPU program and records per-program information. 30f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * We can specify the attribute locations so that they are constant 31f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * across our shaders. But the driver determines the uniform locations 32f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * at link time. We don't need to remember the sampler uniform location 33f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * because we will bind a texture slot to it and never change it 34f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * Uniforms are program-local so we can't rely on fHWState to hold the 35f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com * previous uniform state after a program change. 36f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com */ 37a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.orgclass GrGLProgram : public SkRefCnt { 38f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.compublic: 399ba4fa6f0fb8ef496d81ccac36e780aa806fea83bsalomon@google.com SK_DECLARE_INST_COUNT(GrGLProgram) 404fa6694c587b3830932429766c99d08c8dd9b723bsalomon@google.com 4130ba436f04e61d4505fb854d5fc56079636e0788joshualitt typedef GrGLProgramBuilder::BuiltinUniformHandles BuiltinUniformHandles; 42dddc18a6bba67ad43a65f4c244b95f76cefef617kkinnunen 439ba4fa6f0fb8ef496d81ccac36e780aa806fea83bsalomon@google.com virtual ~GrGLProgram(); 44f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 4534cccde630fc618649b9737bee464203d042bfbbbsalomon@google.com /** 4634cccde630fc618649b9737bee464203d042bfbbbsalomon@google.com * Call to abandon GL objects owned by this program. 4734cccde630fc618649b9737bee464203d042bfbbbsalomon@google.com */ 48ecb60aad5c6fe5b1dbcfc86ac00bfc9326103c8dbsalomon@google.com void abandon(); 49ecb60aad5c6fe5b1dbcfc86ac00bfc9326103c8dbsalomon@google.com 5079f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt const GrProgramDesc& getDesc() { return fDesc; } 519ba4fa6f0fb8ef496d81ccac36e780aa806fea83bsalomon@google.com 52271cffc77bd2fcb3458559e509634442517ca1e9bsalomon@google.com /** 536a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com * Gets the GL program ID for this program. 546a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com */ 55dddc18a6bba67ad43a65f4c244b95f76cefef617kkinnunen GrGLuint programID() const { return fProgramID; } 566a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com 5747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt /* 5847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * The base class always has a vertex shader, only the NVPR variants may omit a vertex shader 5947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt */ 6047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt virtual bool hasVertexShader() const { return true; } 616b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 626a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com /** 636a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com * The GrDrawState's view matrix along with the aspects of the render target determine the 646a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com * matrix sent to GL. The size of the render target affects the GL matrix because we must 656a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com * convert from Skia device coords to GL's normalized coords. Also the origin of the render 666a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com * target may require us to perform a mirror-flip. 676a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com */ 686a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com struct MatrixState { 696a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com SkMatrix fViewMatrix; 706a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com SkISize fRenderTargetSize; 716a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com GrSurfaceOrigin fRenderTargetOrigin; 726a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com 736a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com MatrixState() { this->invalidate(); } 746a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com void invalidate() { 756a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com fViewMatrix = SkMatrix::InvalidMatrix(); 7645a412ee365694c61b50f6177382b509d1e2462bbsalomon@google.com fRenderTargetSize.fWidth = -1; 7745a412ee365694c61b50f6177382b509d1e2462bbsalomon@google.com fRenderTargetSize.fHeight = -1; 786a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com fRenderTargetOrigin = (GrSurfaceOrigin) -1; 796a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com } 8047c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org 8147c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org /** 8247c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * Gets a matrix that goes from local coords to Skia's device coordinates. 8347c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org */ 84215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org template<int Size> void getGLMatrix(GrGLfloat* destMatrix) { 8547c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org GrGLGetMatrix<Size>(destMatrix, fViewMatrix); 8647c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org } 8747c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org 8847c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org /** 8947c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * Gets a matrix that goes from local coordinates to GL normalized device coords. 9047c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org */ 9147c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org template<int Size> void getRTAdjustedGLMatrix(GrGLfloat* destMatrix) { 92215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org SkMatrix combined; 93215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org if (kBottomLeft_GrSurfaceOrigin == fRenderTargetOrigin) { 94215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org combined.setAll(SkIntToScalar(2) / fRenderTargetSize.fWidth, 0, -SK_Scalar1, 95215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 0, -SkIntToScalar(2) / fRenderTargetSize.fHeight, SK_Scalar1, 9647c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org 0, 0, 1); 97215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org } else { 98215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org combined.setAll(SkIntToScalar(2) / fRenderTargetSize.fWidth, 0, -SK_Scalar1, 99215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 0, SkIntToScalar(2) / fRenderTargetSize.fHeight, -SK_Scalar1, 10047c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org 0, 0, 1); 101215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org } 102b930cc3dcb0645a8ce0689c5feb9c0defda57f28commit-bot@chromium.org combined.preConcat(fViewMatrix); 103215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org GrGLGetMatrix<Size>(destMatrix, combined); 104215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org } 10547c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org 10647c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org /** 10747c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * Gets a vec4 that adjusts the position from Skia device coords to GL's normalized device 10847c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * coords. Assuming the transformed position, pos, is a homogeneous vec3, the vec, v, is 10947c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * applied as such: 11047c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * pos.x = dot(v.xy, pos.xz) 11147c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org * pos.y = dot(v.zq, pos.yz) 11247c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org */ 11347c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org void getRTAdjustmentVec(GrGLfloat* destVec) { 11447c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[0] = 2.f / fRenderTargetSize.fWidth; 11547c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[1] = -1.f; 11647c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org if (kBottomLeft_GrSurfaceOrigin == fRenderTargetOrigin) { 11747c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[2] = -2.f / fRenderTargetSize.fHeight; 11847c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[3] = 1.f; 11947c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org } else { 12047c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[2] = 2.f / fRenderTargetSize.fHeight; 12147c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org destVec[3] = -1.f; 12247c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org } 12347c66ddaeb48faf963a2ef3f508a7d816e4168cccommit-bot@chromium.org } 1246a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com }; 1256a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com 1266a51dcbf81cff6d92996ab3f4c7457478e441896bsalomon@google.com /** 127b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * This function uploads uniforms and calls each GrGLProcessor's setData. It is called before a 12834cccde630fc618649b9737bee464203d042bfbbbsalomon@google.com * draw occurs using the program after the program has already been bound. It also uses the 129861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon * GrGLGpu object to bind the textures required by the GrGLProcessors. The color and coverage 1302c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com * stages come from GrGLProgramDesc::Build(). 1314285accf5af574e6c826d5d09f0359c6149fd717bsalomon@google.com */ 132dafa4d09cbe66943b2414bdeaa0f6ef7f900dc4ajoshualitt void setData(const GrOptDrawState&); 1339196130af83782fcac4334117142475a837dd74dbsalomon@google.com 13447bb38283072dc87dc93220cd2f370ca109972ffjoshualittprotected: 1357510b224e52b9518a8ddf7418db0e9c258f79539kkinnunen typedef GrGLProgramDataManager::UniformHandle UniformHandle; 13647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray; 137dbbc4e2da93cef5c0cfb0b3c92ff6c2c80f6e67absalomon@google.com 138861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon GrGLProgram(GrGLGpu*, 13979f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt const GrProgramDesc&, 14047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const BuiltinUniformHandles&, 14147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLuint programID, 14247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const UniformInfoArray&, 143a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt GrGLInstalledGeoProc* geometryProcessor, 144c230414861558ce20b74281b1ca363e56c441832egdaniel GrGLInstalledXferProc* xferProcessor, 145a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt GrGLInstalledFragProcs* fragmentProcessors); 1462c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com 147a05fa0669bac20e521ac3c1905fe8391fd659e60commit-bot@chromium.org // Sets the texture units for samplers. 1482c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com void initSamplerUniforms(); 149a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt void initSamplers(GrGLInstalledProc*, int* texUnitIdx); 1502c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com 15147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt // A templated helper to loop over effects, set the transforms(via subclass) and bind textures 152a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt void setFragmentData(const GrOptDrawState&); 153ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon virtual void setTransformData(const GrPendingFragmentStage&, GrGLInstalledFragProc*); 154a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt void bindTextures(const GrGLInstalledProc*, const GrProcessor&); 15547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 15647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt /* 15747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * Legacy NVPR needs a hook here to flush path tex gen settings. 15847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * TODO when legacy nvpr is removed, remove this call. 15947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt */ 16047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt virtual void didSetData(GrGpu::DrawType); 16147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 1622c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com // Helper for setData() that sets the view matrix and loads the render target height uniform 163dafa4d09cbe66943b2414bdeaa0f6ef7f900dc4ajoshualitt void setMatrixAndRenderTargetHeight(const GrOptDrawState&); 164dafa4d09cbe66943b2414bdeaa0f6ef7f900dc4ajoshualitt virtual void onSetMatrixAndRenderTargetHeight(const GrOptDrawState&); 1652c84aa35988c661b3e5513c8ba9b3959832ff288bsalomon@google.com 16634cccde630fc618649b9737bee464203d042bfbbbsalomon@google.com // these reflect the current values of uniforms (GL uniform values travel with program) 16747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt MatrixState fMatrixState; 16847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrColor fColor; 16937b4d866b1446d35c989f9a97885a777ddc7d1c8egdaniel uint8_t fCoverage; 17047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt int fDstCopyTexUnit; 17147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt BuiltinUniformHandles fBuiltinUniformHandles; 17247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLuint fProgramID; 1736eac42e3ab68b085117d7f91621276a722b5a3a7commit-bot@chromium.org 17447bb38283072dc87dc93220cd2f370ca109972ffjoshualitt // the installed effects 175a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt SkAutoTDelete<GrGLInstalledGeoProc> fGeometryProcessor; 176c230414861558ce20b74281b1ca363e56c441832egdaniel SkAutoTDelete<GrGLInstalledXferProc> fXferProcessor; 177a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt SkAutoTUnref<GrGLInstalledFragProcs> fFragmentProcessors; 1789681eebb0e441cee25b6faac82c3728512acda27skia.committer@gmail.com 17979f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt GrProgramDesc fDesc; 180861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon GrGLGpu* fGpu; 18147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLProgramDataManager fProgramDataManager; 1826eac42e3ab68b085117d7f91621276a722b5a3a7commit-bot@chromium.org 18347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt friend class GrGLProgramBuilder; 1846b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 185a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org typedef SkRefCnt INHERITED; 186f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com}; 187f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com 18847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt/* 18947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * Below are slight specializations of the program object for the different types of programs 19047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * The default GrGL programs consist of at the very least a vertex and fragment shader. 19147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * Legacy Nvpr only has a fragment shader, 1.3+ Nvpr ignores the vertex shader, but both require 19247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * specialized methods for setting transform data. Both types of NVPR also require setting the 19347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt * projection matrix through a special function call 19447bb38283072dc87dc93220cd2f370ca109972ffjoshualitt */ 19547bb38283072dc87dc93220cd2f370ca109972ffjoshualittclass GrGLNvprProgramBase : public GrGLProgram { 19647bb38283072dc87dc93220cd2f370ca109972ffjoshualittprotected: 197861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon GrGLNvprProgramBase(GrGLGpu*, 19879f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt const GrProgramDesc&, 19947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const BuiltinUniformHandles&, 20047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLuint programID, 20147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const UniformInfoArray&, 2029b98932adaceb7ad0a617ade16616923f6bffe84joshualitt GrGLInstalledGeoProc*, 203c230414861558ce20b74281b1ca363e56c441832egdaniel GrGLInstalledXferProc* xferProcessor, 204a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt GrGLInstalledFragProcs* fragmentProcessors); 205dafa4d09cbe66943b2414bdeaa0f6ef7f900dc4ajoshualitt virtual void onSetMatrixAndRenderTargetHeight(const GrOptDrawState&); 20647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 20747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLProgram INHERITED; 20847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt}; 20947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 21047bb38283072dc87dc93220cd2f370ca109972ffjoshualittclass GrGLNvprProgram : public GrGLNvprProgramBase { 21147bb38283072dc87dc93220cd2f370ca109972ffjoshualittpublic: 212ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon virtual bool hasVertexShader() const SK_OVERRIDE { return true; } 21347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 21447bb38283072dc87dc93220cd2f370ca109972ffjoshualittprivate: 21547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLNvprProgramBuilder::SeparableVaryingInfo SeparableVaryingInfo; 21647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLNvprProgramBuilder::SeparableVaryingInfoArray SeparableVaryingInfoArray; 217861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon GrGLNvprProgram(GrGLGpu*, 21879f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt const GrProgramDesc&, 21947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const BuiltinUniformHandles&, 22047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLuint programID, 22147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const UniformInfoArray&, 2229b98932adaceb7ad0a617ade16616923f6bffe84joshualitt GrGLInstalledGeoProc*, 223c230414861558ce20b74281b1ca363e56c441832egdaniel GrGLInstalledXferProc* xferProcessor, 224a5305a110ab5201d5dadd40cbe711582d5ac4996joshualitt GrGLInstalledFragProcs* fragmentProcessors, 22547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const SeparableVaryingInfoArray& separableVaryings); 22647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE; 227ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon virtual void setTransformData(const GrPendingFragmentStage&, 228ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon GrGLInstalledFragProc*) SK_OVERRIDE; 22947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 23047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt struct Varying { 23147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLint fLocation; 23247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt SkDEBUGCODE( 23347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrSLType fType; 23447bb38283072dc87dc93220cd2f370ca109972ffjoshualitt ); 23547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt }; 23647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt SkTArray<Varying, true> fVaryings; 23747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 23847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt friend class GrGLNvprProgramBuilder; 23947bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 24047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLNvprProgramBase INHERITED; 24147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt}; 24247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 24347bb38283072dc87dc93220cd2f370ca109972ffjoshualittclass GrGLLegacyNvprProgram : public GrGLNvprProgramBase { 24447bb38283072dc87dc93220cd2f370ca109972ffjoshualittpublic: 24547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt virtual bool hasVertexShader() const SK_OVERRIDE { return false; } 24647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 24747bb38283072dc87dc93220cd2f370ca109972ffjoshualittprivate: 248861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon GrGLLegacyNvprProgram(GrGLGpu* gpu, 24979f8faeea2692d2948c0f634e956d1e7fc8333e0joshualitt const GrProgramDesc& desc, 25047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const BuiltinUniformHandles&, 25147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt GrGLuint programID, 25247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt const UniformInfoArray&, 2539b98932adaceb7ad0a617ade16616923f6bffe84joshualitt GrGLInstalledGeoProc*, 254c230414861558ce20b74281b1ca363e56c441832egdaniel GrGLInstalledXferProc* xp, 255c230414861558ce20b74281b1ca363e56c441832egdaniel GrGLInstalledFragProcs* fps, 25647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt int texCoordSetCnt); 25747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE; 258ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon virtual void setTransformData(const GrPendingFragmentStage&, 259ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon GrGLInstalledFragProc*) SK_OVERRIDE; 26047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 26147bb38283072dc87dc93220cd2f370ca109972ffjoshualitt int fTexCoordSetCnt; 26247bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 26347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt friend class GrGLLegacyNvprProgramBuilder; 26447bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 26547bb38283072dc87dc93220cd2f370ca109972ffjoshualitt typedef GrGLNvprProgramBase INHERITED; 26647bb38283072dc87dc93220cd2f370ca109972ffjoshualitt}; 26747bb38283072dc87dc93220cd2f370ca109972ffjoshualitt 268f93e717c7f7ca679a80acbfda6a34013ae1e2b8djunov@google.com#endif 269