Changeset 121823 in webkit


Ignore:
Timestamp:
Jul 3, 2012 7:34:16 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

[chromium] Avoid calling getUniformLocation??() in the compositor startup
https://bugs.webkit.org/show_bug.cgi?id=90217

Patch by Alex Sakhartchouk <alexst@chromium.org> on 2012-07-03
Reviewed by Adrienne Walker.

Source/Platform:

Adding an entry point for bindUniformLocationCHROMIUM.

  • chromium/public/WebGraphicsContext3D.h:

(WebGraphicsContext3D):
(WebKit::WebGraphicsContext3D::bindUniformLocationCHROMIUM):

Source/WebCore:

This change allows chrome compositor to bind uniform locations instead of querying
them from the graphics context by using GL_CHROMIUM_bind_uniform_location.

The extention itself is tested in chromium and the change in webkit simply adds
plumbing to allow its usage. Existing pixel tests would be able to verify proper behaviour.

  • platform/graphics/chromium/LayerRendererChromium.cpp:

(WebCore::LayerRendererChromium::LayerRendererChromium):
(WebCore::LayerRendererChromium::initialize):
(WebCore::LayerRendererChromium::initializeSharedObjects):
(WebCore::LayerRendererChromium::tileCheckerboardProgram):
(WebCore::LayerRendererChromium::solidColorProgram):
(WebCore::LayerRendererChromium::headsUpDisplayProgram):
(WebCore::LayerRendererChromium::renderPassProgram):
(WebCore::LayerRendererChromium::renderPassProgramAA):
(WebCore::LayerRendererChromium::renderPassMaskProgram):
(WebCore::LayerRendererChromium::renderPassMaskProgramAA):
(WebCore::LayerRendererChromium::tileProgram):
(WebCore::LayerRendererChromium::tileProgramOpaque):
(WebCore::LayerRendererChromium::tileProgramAA):
(WebCore::LayerRendererChromium::tileProgramSwizzle):
(WebCore::LayerRendererChromium::tileProgramSwizzleOpaque):
(WebCore::LayerRendererChromium::tileProgramSwizzleAA):
(WebCore::LayerRendererChromium::textureProgram):
(WebCore::LayerRendererChromium::textureProgramFlip):
(WebCore::LayerRendererChromium::textureIOSurfaceProgram):
(WebCore::LayerRendererChromium::videoYUVProgram):
(WebCore::LayerRendererChromium::videoStreamTextureProgram):

  • platform/graphics/chromium/LayerRendererChromium.h:

(LayerRendererChromium):

  • platform/graphics/chromium/ProgramBinding.cpp:

(WebCore::ProgramBindingBase::ProgramBindingBase):
(WebCore::ProgramBindingBase::~ProgramBindingBase):
(WebCore::ProgramBindingBase::init):
(WebCore::ProgramBindingBase::link):
(WebCore):
(WebCore::ProgramBindingBase::cleanup):
(WebCore::ProgramBindingBase::createShaderProgram):
(WebCore::ProgramBindingBase::cleanupShaders):

  • platform/graphics/chromium/ProgramBinding.h:

(ProgramBindingBase):
(WebCore::ProgramBinding::initialize):

  • platform/graphics/chromium/ShaderChromium.cpp:

(WebCore::VertexShaderPosTex::init):
(WebCore::VertexShaderPosTexYUVStretch::init):
(WebCore::VertexShaderPos::init):
(WebCore::VertexShaderPosTexTransform::init):
(WebCore::VertexShaderQuad::init):
(WebCore::VertexShaderTile::init):
(WebCore::VertexShaderVideoTransform::init):
(WebCore::FragmentTexAlphaBinding::init):
(WebCore::FragmentTexOpaqueBinding::init):
(WebCore::FragmentShaderOESImageExternal::init):
(WebCore::FragmentShaderRGBATexAlphaAA::init):
(WebCore::FragmentTexClampAlphaAABinding::init):
(WebCore::FragmentShaderRGBATexAlphaMask::init):
(WebCore::FragmentShaderRGBATexAlphaMaskAA::init):
(WebCore::FragmentShaderYUVVideo::init):
(WebCore::FragmentShaderColor::init):
(WebCore::FragmentShaderCheckerboard::init):

  • platform/graphics/chromium/ShaderChromium.h:

(VertexShaderPosTex):
(VertexShaderPosTexYUVStretch):
(VertexShaderPos):
(WebCore::VertexShaderPosTexIdentity::init):
(VertexShaderPosTexTransform):
(VertexShaderQuad):
(VertexShaderTile):
(VertexShaderVideoTransform):
(FragmentTexAlphaBinding):
(FragmentTexOpaqueBinding):
(FragmentShaderOESImageExternal):
(FragmentShaderRGBATexAlphaAA):
(FragmentTexClampAlphaAABinding):
(FragmentShaderRGBATexAlphaMask):
(FragmentShaderRGBATexAlphaMaskAA):
(FragmentShaderYUVVideo):
(FragmentShaderColor):
(FragmentShaderCheckerboard):

  • platform/graphics/chromium/TextureCopier.cpp:

(WebCore::AcceleratedTextureCopier::AcceleratedTextureCopier):
(WebCore::AcceleratedTextureCopier::copyTexture):

  • platform/graphics/chromium/TextureCopier.h:

(WebCore::AcceleratedTextureCopier::create):
(AcceleratedTextureCopier):

Source/WebKit/chromium:

Fixing the build error.

  • tests/TextureCopierTest.cpp:
Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/Platform/ChangeLog

    r121801 r121823  
     12012-07-03  Alex Sakhartchouk  <alexst@chromium.org>
     2
     3        [chromium] Avoid calling getUniformLocation??() in the compositor startup
     4        https://bugs.webkit.org/show_bug.cgi?id=90217
     5
     6        Reviewed by Adrienne Walker.
     7
     8        Adding an entry point for bindUniformLocationCHROMIUM.
     9
     10        * chromium/public/WebGraphicsContext3D.h:
     11        (WebGraphicsContext3D):
     12        (WebKit::WebGraphicsContext3D::bindUniformLocationCHROMIUM):
     13
    1142012-07-03  Tony Chang  <tony@chromium.org>
    215
  • trunk/Source/Platform/chromium/public/WebGraphicsContext3D.h

    r121204 r121823  
    415415    virtual void getQueryObjectuivEXT(WebGLId query, WGC3Denum pname, WGC3Duint* params) { }
    416416
     417    // GL_CHROMIUM_bind_uniform_location
     418    virtual void bindUniformLocationCHROMIUM(WebGLId program, WGC3Dint location, const WGC3Dchar* uniform) { }
     419
    417420    // GL_CHROMIUM_copy_texture
    418421    virtual void copyTextureCHROMIUM(WGC3Denum target, WGC3Duint sourceId,
  • trunk/Source/WebCore/ChangeLog

    r121818 r121823  
     12012-07-03  Alex Sakhartchouk  <alexst@chromium.org>
     2
     3        [chromium] Avoid calling getUniformLocation??() in the compositor startup
     4        https://bugs.webkit.org/show_bug.cgi?id=90217
     5
     6        Reviewed by Adrienne Walker.
     7
     8        This change allows chrome compositor to bind uniform locations instead of querying
     9        them from the graphics context by using GL_CHROMIUM_bind_uniform_location.
     10
     11        The extention itself is tested in chromium and the change in webkit simply adds
     12        plumbing to allow its usage. Existing pixel tests would be able to verify proper behaviour.
     13
     14        * platform/graphics/chromium/LayerRendererChromium.cpp:
     15        (WebCore::LayerRendererChromium::LayerRendererChromium):
     16        (WebCore::LayerRendererChromium::initialize):
     17        (WebCore::LayerRendererChromium::initializeSharedObjects):
     18        (WebCore::LayerRendererChromium::tileCheckerboardProgram):
     19        (WebCore::LayerRendererChromium::solidColorProgram):
     20        (WebCore::LayerRendererChromium::headsUpDisplayProgram):
     21        (WebCore::LayerRendererChromium::renderPassProgram):
     22        (WebCore::LayerRendererChromium::renderPassProgramAA):
     23        (WebCore::LayerRendererChromium::renderPassMaskProgram):
     24        (WebCore::LayerRendererChromium::renderPassMaskProgramAA):
     25        (WebCore::LayerRendererChromium::tileProgram):
     26        (WebCore::LayerRendererChromium::tileProgramOpaque):
     27        (WebCore::LayerRendererChromium::tileProgramAA):
     28        (WebCore::LayerRendererChromium::tileProgramSwizzle):
     29        (WebCore::LayerRendererChromium::tileProgramSwizzleOpaque):
     30        (WebCore::LayerRendererChromium::tileProgramSwizzleAA):
     31        (WebCore::LayerRendererChromium::textureProgram):
     32        (WebCore::LayerRendererChromium::textureProgramFlip):
     33        (WebCore::LayerRendererChromium::textureIOSurfaceProgram):
     34        (WebCore::LayerRendererChromium::videoYUVProgram):
     35        (WebCore::LayerRendererChromium::videoStreamTextureProgram):
     36        * platform/graphics/chromium/LayerRendererChromium.h:
     37        (LayerRendererChromium):
     38        * platform/graphics/chromium/ProgramBinding.cpp:
     39        (WebCore::ProgramBindingBase::ProgramBindingBase):
     40        (WebCore::ProgramBindingBase::~ProgramBindingBase):
     41        (WebCore::ProgramBindingBase::init):
     42        (WebCore::ProgramBindingBase::link):
     43        (WebCore):
     44        (WebCore::ProgramBindingBase::cleanup):
     45        (WebCore::ProgramBindingBase::createShaderProgram):
     46        (WebCore::ProgramBindingBase::cleanupShaders):
     47        * platform/graphics/chromium/ProgramBinding.h:
     48        (ProgramBindingBase):
     49        (WebCore::ProgramBinding::initialize):
     50        * platform/graphics/chromium/ShaderChromium.cpp:
     51        (WebCore::VertexShaderPosTex::init):
     52        (WebCore::VertexShaderPosTexYUVStretch::init):
     53        (WebCore::VertexShaderPos::init):
     54        (WebCore::VertexShaderPosTexTransform::init):
     55        (WebCore::VertexShaderQuad::init):
     56        (WebCore::VertexShaderTile::init):
     57        (WebCore::VertexShaderVideoTransform::init):
     58        (WebCore::FragmentTexAlphaBinding::init):
     59        (WebCore::FragmentTexOpaqueBinding::init):
     60        (WebCore::FragmentShaderOESImageExternal::init):
     61        (WebCore::FragmentShaderRGBATexAlphaAA::init):
     62        (WebCore::FragmentTexClampAlphaAABinding::init):
     63        (WebCore::FragmentShaderRGBATexAlphaMask::init):
     64        (WebCore::FragmentShaderRGBATexAlphaMaskAA::init):
     65        (WebCore::FragmentShaderYUVVideo::init):
     66        (WebCore::FragmentShaderColor::init):
     67        (WebCore::FragmentShaderCheckerboard::init):
     68        * platform/graphics/chromium/ShaderChromium.h:
     69        (VertexShaderPosTex):
     70        (VertexShaderPosTexYUVStretch):
     71        (VertexShaderPos):
     72        (WebCore::VertexShaderPosTexIdentity::init):
     73        (VertexShaderPosTexTransform):
     74        (VertexShaderQuad):
     75        (VertexShaderTile):
     76        (VertexShaderVideoTransform):
     77        (FragmentTexAlphaBinding):
     78        (FragmentTexOpaqueBinding):
     79        (FragmentShaderOESImageExternal):
     80        (FragmentShaderRGBATexAlphaAA):
     81        (FragmentTexClampAlphaAABinding):
     82        (FragmentShaderRGBATexAlphaMask):
     83        (FragmentShaderRGBATexAlphaMaskAA):
     84        (FragmentShaderYUVVideo):
     85        (FragmentShaderColor):
     86        (FragmentShaderCheckerboard):
     87        * platform/graphics/chromium/TextureCopier.cpp:
     88        (WebCore::AcceleratedTextureCopier::AcceleratedTextureCopier):
     89        (WebCore::AcceleratedTextureCopier::copyTexture):
     90        * platform/graphics/chromium/TextureCopier.h:
     91        (WebCore::AcceleratedTextureCopier::create):
     92        (AcceleratedTextureCopier):
     93
    1942012-07-03  Erik Arvidsson  <arv@chromium.org>
    295
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r121583 r121823  
    165165    , m_isViewportChanged(false)
    166166    , m_isFramebufferDiscarded(false)
     167    , m_isUsingBindUniform(false)
    167168    , m_visible(true)
    168169    , m_textureUploaderSetting(textureUploaderSetting)
     
    227228    GLC(m_context, m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &m_capabilities.maxTextureSize));
    228229    m_capabilities.bestTextureFormat = PlatformColor::bestTextureFormat(m_context, extensions.contains("GL_EXT_texture_format_BGRA8888"));
     230
     231    m_isUsingBindUniform = extensions.contains("GL_CHROMIUM_bind_uniform_location");
    229232
    230233    if (!initializeSharedObjects())
     
    14301433                                                  TextureManager::reclaimLimitBytes(viewportSize()),
    14311434                                                  m_capabilities.maxTextureSize);
    1432     m_textureCopier = AcceleratedTextureCopier::create(m_context);
     1435    m_textureCopier = AcceleratedTextureCopier::create(m_context, m_isUsingBindUniform);
    14331436    if (m_textureUploaderSetting == ThrottledUploader)
    14341437        m_textureUploader = ThrottledTextureUploader::create(m_context);
     
    14531456    if (!m_tileCheckerboardProgram->initialized()) {
    14541457        TRACE_EVENT0("cc", "LayerRendererChromium::checkerboardProgram::initalize");
    1455         m_tileCheckerboardProgram->initialize(m_context);
     1458        m_tileCheckerboardProgram->initialize(m_context, m_isUsingBindUniform);
    14561459    }
    14571460    return m_tileCheckerboardProgram.get();
     
    14641467    if (!m_solidColorProgram->initialized()) {
    14651468        TRACE_EVENT0("cc", "LayerRendererChromium::solidColorProgram::initialize");
    1466         m_solidColorProgram->initialize(m_context);
     1469        m_solidColorProgram->initialize(m_context, m_isUsingBindUniform);
    14671470    }
    14681471    return m_solidColorProgram.get();
     
    14751478    if (!m_headsUpDisplayProgram->initialized()) {
    14761479        TRACE_EVENT0("cc", "LayerRendererChromium::headsUpDisplayProgram::initialize");
    1477         m_headsUpDisplayProgram->initialize(m_context);
     1480        m_headsUpDisplayProgram->initialize(m_context, m_isUsingBindUniform);
    14781481    }
    14791482    return m_headsUpDisplayProgram.get();
     
    14851488    if (!m_renderPassProgram->initialized()) {
    14861489        TRACE_EVENT0("cc", "LayerRendererChromium::renderPassProgram::initialize");
    1487         m_renderPassProgram->initialize(m_context);
     1490        m_renderPassProgram->initialize(m_context, m_isUsingBindUniform);
    14881491    }
    14891492    return m_renderPassProgram.get();
     
    14961499    if (!m_renderPassProgramAA->initialized()) {
    14971500        TRACE_EVENT0("cc", "LayerRendererChromium::renderPassProgramAA::initialize");
    1498         m_renderPassProgramAA->initialize(m_context);
     1501        m_renderPassProgramAA->initialize(m_context, m_isUsingBindUniform);
    14991502    }
    15001503    return m_renderPassProgramAA.get();
     
    15071510    if (!m_renderPassMaskProgram->initialized()) {
    15081511        TRACE_EVENT0("cc", "LayerRendererChromium::renderPassMaskProgram::initialize");
    1509         m_renderPassMaskProgram->initialize(m_context);
     1512        m_renderPassMaskProgram->initialize(m_context, m_isUsingBindUniform);
    15101513    }
    15111514    return m_renderPassMaskProgram.get();
     
    15181521    if (!m_renderPassMaskProgramAA->initialized()) {
    15191522        TRACE_EVENT0("cc", "LayerRendererChromium::renderPassMaskProgramAA::initialize");
    1520         m_renderPassMaskProgramAA->initialize(m_context);
     1523        m_renderPassMaskProgramAA->initialize(m_context, m_isUsingBindUniform);
    15211524    }
    15221525    return m_renderPassMaskProgramAA.get();
     
    15281531    if (!m_tileProgram->initialized()) {
    15291532        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgram::initialize");
    1530         m_tileProgram->initialize(m_context);
     1533        m_tileProgram->initialize(m_context, m_isUsingBindUniform);
    15311534    }
    15321535    return m_tileProgram.get();
     
    15381541    if (!m_tileProgramOpaque->initialized()) {
    15391542        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgramOpaque::initialize");
    1540         m_tileProgramOpaque->initialize(m_context);
     1543        m_tileProgramOpaque->initialize(m_context, m_isUsingBindUniform);
    15411544    }
    15421545    return m_tileProgramOpaque.get();
     
    15491552    if (!m_tileProgramAA->initialized()) {
    15501553        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgramAA::initialize");
    1551         m_tileProgramAA->initialize(m_context);
     1554        m_tileProgramAA->initialize(m_context, m_isUsingBindUniform);
    15521555    }
    15531556    return m_tileProgramAA.get();
     
    15601563    if (!m_tileProgramSwizzle->initialized()) {
    15611564        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgramSwizzle::initialize");
    1562         m_tileProgramSwizzle->initialize(m_context);
     1565        m_tileProgramSwizzle->initialize(m_context, m_isUsingBindUniform);
    15631566    }
    15641567    return m_tileProgramSwizzle.get();
     
    15711574    if (!m_tileProgramSwizzleOpaque->initialized()) {
    15721575        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgramSwizzleOpaque::initialize");
    1573         m_tileProgramSwizzleOpaque->initialize(m_context);
     1576        m_tileProgramSwizzleOpaque->initialize(m_context, m_isUsingBindUniform);
    15741577    }
    15751578    return m_tileProgramSwizzleOpaque.get();
     
    15821585    if (!m_tileProgramSwizzleAA->initialized()) {
    15831586        TRACE_EVENT0("cc", "LayerRendererChromium::tileProgramSwizzleAA::initialize");
    1584         m_tileProgramSwizzleAA->initialize(m_context);
     1587        m_tileProgramSwizzleAA->initialize(m_context, m_isUsingBindUniform);
    15851588    }
    15861589    return m_tileProgramSwizzleAA.get();
     
    15931596    if (!m_textureProgram->initialized()) {
    15941597        TRACE_EVENT0("cc", "LayerRendererChromium::textureProgram::initialize");
    1595         m_textureProgram->initialize(m_context);
     1598        m_textureProgram->initialize(m_context, m_isUsingBindUniform);
    15961599    }
    15971600    return m_textureProgram.get();
     
    16041607    if (!m_textureProgramFlip->initialized()) {
    16051608        TRACE_EVENT0("cc", "LayerRendererChromium::textureProgramFlip::initialize");
    1606         m_textureProgramFlip->initialize(m_context);
     1609        m_textureProgramFlip->initialize(m_context, m_isUsingBindUniform);
    16071610    }
    16081611    return m_textureProgramFlip.get();
     
    16151618    if (!m_textureIOSurfaceProgram->initialized()) {
    16161619        TRACE_EVENT0("cc", "LayerRendererChromium::textureIOSurfaceProgram::initialize");
    1617         m_textureIOSurfaceProgram->initialize(m_context);
     1620        m_textureIOSurfaceProgram->initialize(m_context, m_isUsingBindUniform);
    16181621    }
    16191622    return m_textureIOSurfaceProgram.get();
     
    16261629    if (!m_videoYUVProgram->initialized()) {
    16271630        TRACE_EVENT0("cc", "LayerRendererChromium::videoYUVProgram::initialize");
    1628         m_videoYUVProgram->initialize(m_context);
     1631        m_videoYUVProgram->initialize(m_context, m_isUsingBindUniform);
    16291632    }
    16301633    return m_videoYUVProgram.get();
     
    16371640    if (!m_videoStreamTextureProgram->initialized()) {
    16381641        TRACE_EVENT0("cc", "LayerRendererChromium::streamTextureProgram::initialize");
    1639         m_videoStreamTextureProgram->initialize(m_context);
     1642        m_videoStreamTextureProgram->initialize(m_context, m_isUsingBindUniform);
    16401643    }
    16411644    return m_videoStreamTextureProgram.get();
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r121204 r121823  
    270270    bool m_isViewportChanged;
    271271    bool m_isFramebufferDiscarded;
     272    bool m_isUsingBindUniform;
    272273    bool m_visible;
    273274    TextureUploaderOption m_textureUploaderSetting;
  • trunk/Source/WebCore/platform/graphics/chromium/ProgramBinding.cpp

    r121458 r121823  
    4343ProgramBindingBase::ProgramBindingBase()
    4444    : m_program(0)
     45    , m_vertexShaderId(0)
     46    , m_fragmentShaderId(0)
    4547    , m_initialized(false)
    4648{
     
    5153    // If you hit these asserts, you initialized but forgot to call cleanup().
    5254    ASSERT(!m_program);
     55    ASSERT(!m_vertexShaderId);
     56    ASSERT(!m_fragmentShaderId);
    5357    ASSERT(!m_initialized);
    5458}
     
    6266void ProgramBindingBase::init(WebGraphicsContext3D* context, const String& vertexShader, const String& fragmentShader)
    6367{
    64     m_program = createShaderProgram(context, vertexShader, fragmentShader);
     68    TRACE_EVENT("ProgramBindingBase::init", this, 0);
     69    m_vertexShaderId = loadShader(context, GraphicsContext3D::VERTEX_SHADER, vertexShader);
     70    if (!m_vertexShaderId) {
     71        if (!contextLost(context))
     72            LOG_ERROR("Failed to create vertex shader");
     73        return;
     74    }
     75
     76    m_fragmentShaderId = loadShader(context, GraphicsContext3D::FRAGMENT_SHADER, fragmentShader);
     77    if (!m_fragmentShaderId) {
     78        GLC(context, context->deleteShader(m_vertexShaderId));
     79        m_vertexShaderId = 0;
     80        if (!contextLost(context))
     81            LOG_ERROR("Failed to create fragment shader");
     82        return;
     83    }
     84
     85    m_program = createShaderProgram(context, m_vertexShaderId, m_fragmentShaderId);
    6586    ASSERT(m_program || contextLost(context));
     87}
     88
     89void ProgramBindingBase::link(WebGraphicsContext3D* context)
     90{
     91    GLC(context, context->linkProgram(m_program));
     92    cleanupShaders(context);
     93#ifndef NDEBUG
     94    int linked = 0;
     95    GLC(context, context->getProgramiv(m_program, GraphicsContext3D::LINK_STATUS, &linked));
     96    if (!linked) {
     97        if (!contextLost(context))
     98            LOG_ERROR("Failed to link shader program");
     99        GLC(context, context->deleteProgram(m_program));
     100        return;
     101    }
     102#endif
    66103}
    67104
     
    75112    GLC(context, context->deleteProgram(m_program));
    76113    m_program = 0;
     114
     115    cleanupShaders(context);
    77116}
    78117
     
    96135}
    97136
    98 unsigned ProgramBindingBase::createShaderProgram(WebGraphicsContext3D* context, const String& vertexShaderSource, const String& fragmentShaderSource)
     137unsigned ProgramBindingBase::createShaderProgram(WebGraphicsContext3D* context, unsigned vertexShader, unsigned fragmentShader)
    99138{
    100     TRACE_EVENT0("cc", "ProgramBindingBase::createShaderProgram");
    101     unsigned vertexShader = loadShader(context, GraphicsContext3D::VERTEX_SHADER, vertexShaderSource);
    102     if (!vertexShader) {
    103         if (!contextLost(context))
    104             LOG_ERROR("Failed to create vertex shader");
    105         return 0;
    106     }
    107 
    108     unsigned fragmentShader = loadShader(context, GraphicsContext3D::FRAGMENT_SHADER, fragmentShaderSource);
    109     if (!fragmentShader) {
    110         GLC(context, context->deleteShader(vertexShader));
    111         if (!contextLost(context))
    112             LOG_ERROR("Failed to create fragment shader");
    113         return 0;
    114     }
    115 
    116139    unsigned programObject = context->createProgram();
    117140    if (!programObject) {
     
    128151    GLC(context, context->bindAttribLocation(programObject, GeometryBinding::texCoordAttribLocation(), "a_texCoord"));
    129152
    130     GLC(context, context->linkProgram(programObject));
    131 #ifndef NDEBUG
    132     int linked = 0;
    133     GLC(context, context->getProgramiv(programObject, GraphicsContext3D::LINK_STATUS, &linked));
    134     if (!linked) {
    135         if (!contextLost(context))
    136             LOG_ERROR("Failed to link shader program");
    137         GLC(context, context->deleteProgram(programObject));
    138         return 0;
     153    return programObject;
     154}
     155
     156void ProgramBindingBase::cleanupShaders(WebGraphicsContext3D* context)
     157{
     158    if (m_vertexShaderId) {
     159        GLC(context, context->deleteShader(m_vertexShaderId));
     160        m_vertexShaderId = 0;
    139161    }
    140 #endif
    141 
    142     GLC(context, context->deleteShader(vertexShader));
    143     GLC(context, context->deleteShader(fragmentShader));
    144     return programObject;
     162    if (m_fragmentShaderId) {
     163        GLC(context, context->deleteShader(m_fragmentShaderId));
     164        m_fragmentShaderId = 0;
     165    }
    145166}
    146167
  • trunk/Source/WebCore/platform/graphics/chromium/ProgramBinding.h

    r121204 r121823  
    4343
    4444    void init(WebKit::WebGraphicsContext3D*, const String& vertexShader, const String& fragmentShader);
     45    void link(WebKit::WebGraphicsContext3D*);
    4546    void cleanup(WebKit::WebGraphicsContext3D*);
    4647
     
    5152
    5253    unsigned loadShader(WebKit::WebGraphicsContext3D*, unsigned type, const String& shaderSource);
    53     unsigned createShaderProgram(WebKit::WebGraphicsContext3D*, const String& vertexShaderSource, const String& fragmentShaderSource);
     54    unsigned createShaderProgram(WebKit::WebGraphicsContext3D*, unsigned vertexShader, unsigned fragmentShader);
     55    void cleanupShaders(WebKit::WebGraphicsContext3D*);
    5456
    5557    unsigned m_program;
     58    unsigned m_vertexShaderId;
     59    unsigned m_fragmentShaderId;
    5660    bool m_initialized;
    5761};
     
    6569    }
    6670
    67     void initialize(WebKit::WebGraphicsContext3D* context)
     71    void initialize(WebKit::WebGraphicsContext3D* context, bool usingBindUniform)
    6872    {
    6973        ASSERT(context);
     
    7175        ASSERT(!m_initialized);
    7276
    73         m_vertexShader.init(context, m_program);
    74         m_fragmentShader.init(context, m_program);
     77        // Need to bind uniforms before linking
     78        if (!usingBindUniform)
     79            link(context);
     80
     81        int baseUniformIndex = 0;
     82        m_vertexShader.init(context, m_program, usingBindUniform, &baseUniformIndex);
     83        m_fragmentShader.init(context, m_program, usingBindUniform, &baseUniformIndex);
     84
     85        // Link after binding uniforms
     86        if (usingBindUniform)
     87            link(context);
     88
    7589        m_initialized = true;
    7690    }
  • trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp

    r121204 r121823  
    3939namespace WebCore {
    4040
     41namespace {
     42
     43static void getProgramUniformLocations(WebGraphicsContext3D* context, unsigned program, const char** shaderUniforms, size_t count, size_t maxLocations, int* locations, bool usingBindUniform, int* baseUniformIndex)
     44{
     45    for (size_t uniformIndex = 0; uniformIndex < count; uniformIndex ++) {
     46        ASSERT(uniformIndex < maxLocations);
     47
     48        if (usingBindUniform) {
     49            locations[uniformIndex] = (*baseUniformIndex)++;
     50            context->bindUniformLocationCHROMIUM(program, locations[uniformIndex], shaderUniforms[uniformIndex]);
     51        } else
     52            locations[uniformIndex] = context->getUniformLocation(program, shaderUniforms[uniformIndex]);
     53    }
     54}
     55
     56}
     57
    4158VertexShaderPosTex::VertexShaderPosTex()
    4259    : m_matrixLocation(-1)
     
    4461}
    4562
    46 void VertexShaderPosTex::init(WebGraphicsContext3D* context, unsigned program)
    47 {
    48     m_matrixLocation = context->getUniformLocation(program, "matrix");
     63void VertexShaderPosTex::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     64{
     65    static const char* shaderUniforms[] = {
     66        "matrix",
     67    };
     68    int locations[1];
     69
     70    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     71
     72    m_matrixLocation = locations[0];
    4973    ASSERT(m_matrixLocation != -1);
    5074}
     
    7296}
    7397
    74 void VertexShaderPosTexYUVStretch::init(WebGraphicsContext3D* context, unsigned program)
    75 {
    76     m_matrixLocation = context->getUniformLocation(program, "matrix");
    77     m_yWidthScaleFactorLocation = context->getUniformLocation(program, "y_widthScaleFactor");
    78     m_uvWidthScaleFactorLocation = context->getUniformLocation(program, "uv_widthScaleFactor");
     98void VertexShaderPosTexYUVStretch::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     99{
     100    static const char* shaderUniforms[] = {
     101        "matrix",
     102        "y_widthScaleFactor",
     103        "uv_widthScaleFactor",
     104    };
     105    int locations[3];
     106
     107    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     108
     109    m_matrixLocation = locations[0];
     110    m_yWidthScaleFactorLocation = locations[1];
     111    m_uvWidthScaleFactorLocation = locations[2];
    79112    ASSERT(m_matrixLocation != -1 && m_yWidthScaleFactorLocation != -1 && m_uvWidthScaleFactorLocation != -1);
    80113}
     
    105138}
    106139
    107 void VertexShaderPos::init(WebGraphicsContext3D* context, unsigned program)
    108 {
    109     m_matrixLocation = context->getUniformLocation(program, "matrix");
     140void VertexShaderPos::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     141{
     142    static const char* shaderUniforms[] = {
     143        "matrix",
     144    };
     145    int locations[1];
     146
     147    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     148
     149    m_matrixLocation = locations[0];
    110150    ASSERT(m_matrixLocation != -1);
    111151}
     
    129169}
    130170
    131 void VertexShaderPosTexTransform::init(WebGraphicsContext3D* context, unsigned program)
    132 {
    133     m_matrixLocation = context->getUniformLocation(program, "matrix");
    134     m_texTransformLocation = context->getUniformLocation(program, "texTransform");
     171void VertexShaderPosTexTransform::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     172{
     173    static const char* shaderUniforms[] = {
     174        "matrix",
     175        "texTransform",
     176    };
     177    int locations[2];
     178
     179    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     180
     181    m_matrixLocation = locations[0];
     182    m_texTransformLocation = locations[1];
    135183    ASSERT(m_matrixLocation != -1 && m_texTransformLocation != -1);
    136184}
     
    171219}
    172220
    173 void VertexShaderQuad::init(WebGraphicsContext3D* context, unsigned program)
    174 {
    175     m_matrixLocation = context->getUniformLocation(program, "matrix");
    176     m_pointLocation = context->getUniformLocation(program, "point");
     221void VertexShaderQuad::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     222{
     223    static const char* shaderUniforms[] = {
     224        "matrix",
     225        "point",
     226    };
     227    int locations[2];
     228
     229    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     230
     231    m_matrixLocation = locations[0];
     232    m_pointLocation = locations[1];
    177233    ASSERT(m_matrixLocation != -1 && m_pointLocation != -1);
    178234}
     
    207263}
    208264
    209 void VertexShaderTile::init(WebGraphicsContext3D* context, unsigned program)
    210 {
    211     m_matrixLocation = context->getUniformLocation(program, "matrix");
    212     m_pointLocation = context->getUniformLocation(program, "point");
    213     m_vertexTexTransformLocation = context->getUniformLocation(program, "vertexTexTransform");
     265void VertexShaderTile::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     266{
     267    static const char* shaderUniforms[] = {
     268        "matrix",
     269        "point",
     270        "vertexTexTransform",
     271    };
     272    int locations[3];
     273
     274    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     275
     276    m_matrixLocation = locations[0];
     277    m_pointLocation = locations[1];
     278    m_vertexTexTransformLocation = locations[2];
    214279    ASSERT(m_matrixLocation != -1 && m_pointLocation != -1 && m_vertexTexTransformLocation != -1);
    215280}
     
    244309}
    245310
    246 bool VertexShaderVideoTransform::init(WebGraphicsContext3D* context, unsigned program)
    247 {
    248     m_matrixLocation = context->getUniformLocation(program, "matrix");
    249     m_texMatrixLocation = context->getUniformLocation(program, "texMatrix");
     311bool VertexShaderVideoTransform::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     312{
     313    static const char* shaderUniforms[] = {
     314        "matrix",
     315        "texMatrix",
     316    };
     317    int locations[2];
     318
     319    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     320
     321    m_matrixLocation = locations[0];
     322    m_texMatrixLocation = locations[1];
    250323    return m_matrixLocation != -1 && m_texMatrixLocation != -1;
    251324}
     
    273346}
    274347
    275 void FragmentTexAlphaBinding::init(WebGraphicsContext3D* context, unsigned program)
    276 {
    277     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    278     m_alphaLocation = context->getUniformLocation(program, "alpha");
    279 
     348void FragmentTexAlphaBinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     349{
     350    static const char* shaderUniforms[] = {
     351        "s_texture",
     352        "alpha",
     353    };
     354    int locations[2];
     355
     356    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     357
     358    m_samplerLocation = locations[0];
     359    m_alphaLocation = locations[1];
    280360    ASSERT(m_samplerLocation != -1 && m_alphaLocation != -1);
    281361}
     
    286366}
    287367
    288 void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned program)
    289 {
    290     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    291 
     368void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     369{
     370    static const char* shaderUniforms[] = {
     371        "s_texture",
     372    };
     373    int locations[1];
     374
     375    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     376
     377    m_samplerLocation = locations[0];
    292378    ASSERT(m_samplerLocation != -1);
    293379}
     
    308394}
    309395
    310 bool FragmentShaderOESImageExternal::init(WebGraphicsContext3D* context, unsigned program)
    311 {
    312     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    313 
     396bool FragmentShaderOESImageExternal::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     397{
     398    static const char* shaderUniforms[] = {
     399        "s_texture",
     400    };
     401    int locations[1];
     402
     403    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     404
     405    m_samplerLocation = locations[0];
    314406    return m_samplerLocation != -1;
    315407}
     
    438530}
    439531
    440 void FragmentShaderRGBATexAlphaAA::init(WebGraphicsContext3D* context, unsigned program)
    441 {
    442     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    443     m_alphaLocation = context->getUniformLocation(program, "alpha");
    444     m_edgeLocation = context->getUniformLocation(program, "edge");
    445 
     532void FragmentShaderRGBATexAlphaAA::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     533{
     534    static const char* shaderUniforms[] = {
     535        "s_texture",
     536        "alpha",
     537        "edge",
     538    };
     539    int locations[3];
     540
     541    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     542
     543    m_samplerLocation = locations[0];
     544    m_alphaLocation = locations[1];
     545    m_edgeLocation = locations[2];
    446546    ASSERT(m_samplerLocation != -1 && m_alphaLocation != -1 && m_edgeLocation != -1);
    447547}
     
    480580}
    481581
    482 void FragmentTexClampAlphaAABinding::init(WebGraphicsContext3D* context, unsigned program)
    483 {
    484     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    485     m_alphaLocation = context->getUniformLocation(program, "alpha");
    486     m_fragmentTexTransformLocation = context->getUniformLocation(program, "fragmentTexTransform");
    487     m_edgeLocation = context->getUniformLocation(program, "edge");
    488 
     582void FragmentTexClampAlphaAABinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     583{
     584    static const char* shaderUniforms[] = {
     585        "s_texture",
     586        "alpha",
     587        "fragmentTexTransform",
     588        "edge",
     589    };
     590    int locations[4];
     591
     592    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     593
     594    m_samplerLocation = locations[0];
     595    m_alphaLocation = locations[1];
     596    m_fragmentTexTransformLocation = locations[2];
     597    m_edgeLocation = locations[3];
    489598    ASSERT(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTransformLocation != -1 && m_edgeLocation != -1);
    490599}
     
    551660}
    552661
    553 void FragmentShaderRGBATexAlphaMask::init(WebGraphicsContext3D* context, unsigned program)
    554 {
    555     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    556     m_maskSamplerLocation = context->getUniformLocation(program, "s_mask");
    557     m_alphaLocation = context->getUniformLocation(program, "alpha");
     662void FragmentShaderRGBATexAlphaMask::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     663{
     664    static const char* shaderUniforms[] = {
     665        "s_texture",
     666        "s_mask",
     667        "alpha",
     668    };
     669    int locations[3];
     670
     671    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     672
     673    m_samplerLocation = locations[0];
     674    m_maskSamplerLocation = locations[1];
     675    m_alphaLocation = locations[2];
    558676    ASSERT(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLocation != -1);
    559677}
     
    584702}
    585703
    586 void FragmentShaderRGBATexAlphaMaskAA::init(WebGraphicsContext3D* context, unsigned program)
    587 {
    588     m_samplerLocation = context->getUniformLocation(program, "s_texture");
    589     m_maskSamplerLocation = context->getUniformLocation(program, "s_mask");
    590     m_alphaLocation = context->getUniformLocation(program, "alpha");
    591     m_edgeLocation = context->getUniformLocation(program, "edge");
     704void FragmentShaderRGBATexAlphaMaskAA::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     705{
     706    static const char* shaderUniforms[] = {
     707        "s_texture",
     708        "s_mask",
     709        "alpha",
     710        "edge",
     711    };
     712    int locations[4];
     713
     714    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     715
     716    m_samplerLocation = locations[0];
     717    m_maskSamplerLocation = locations[1];
     718    m_alphaLocation = locations[2];
     719    m_edgeLocation = locations[3];
    592720    ASSERT(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLocation != -1 && m_edgeLocation != -1);
    593721}
     
    630758}
    631759
    632 void FragmentShaderYUVVideo::init(WebGraphicsContext3D* context, unsigned program)
    633 {
    634     m_yTextureLocation = context->getUniformLocation(program, "y_texture");
    635     m_uTextureLocation = context->getUniformLocation(program, "u_texture");
    636     m_vTextureLocation = context->getUniformLocation(program, "v_texture");
    637     m_alphaLocation = context->getUniformLocation(program, "alpha");
    638     m_ccMatrixLocation = context->getUniformLocation(program, "cc_matrix");
    639     m_yuvAdjLocation = context->getUniformLocation(program, "yuv_adj");
     760void FragmentShaderYUVVideo::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     761{
     762    static const char* shaderUniforms[] = {
     763        "y_texture",
     764        "u_texture",
     765        "v_texture",
     766        "alpha",
     767        "cc_matrix",
     768        "yuv_adj",
     769    };
     770    int locations[6];
     771
     772    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     773
     774    m_yTextureLocation = locations[0];
     775    m_uTextureLocation = locations[1];
     776    m_vTextureLocation = locations[2];
     777    m_alphaLocation = locations[3];
     778    m_ccMatrixLocation = locations[4];
     779    m_yuvAdjLocation = locations[5];
    640780
    641781    ASSERT(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLocation != -1
     
    673813}
    674814
    675 void FragmentShaderColor::init(WebGraphicsContext3D* context, unsigned program)
    676 {
    677     m_colorLocation = context->getUniformLocation(program, "color");
     815void FragmentShaderColor::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     816{
     817    static const char* shaderUniforms[] = {
     818        "color",
     819    };
     820    int locations[1];
     821
     822    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     823
     824    m_colorLocation = locations[0];
    678825    ASSERT(m_colorLocation != -1);
    679826}
     
    698845}
    699846
    700 void FragmentShaderCheckerboard::init(WebGraphicsContext3D* context, unsigned program)
    701 {
    702     m_alphaLocation = context->getUniformLocation(program, "alpha");
    703     m_texTransformLocation = context->getUniformLocation(program, "texTransform");
    704     m_frequencyLocation = context->getUniformLocation(program, "frequency");
     847void FragmentShaderCheckerboard::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
     848{
     849    static const char* shaderUniforms[] = {
     850        "alpha",
     851        "texTransform",
     852        "frequency",
     853    };
     854    int locations[3];
     855
     856    getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGTH(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, baseUniformIndex);
     857
     858    m_alphaLocation = locations[0];
     859    m_texTransformLocation = locations[1];
     860    m_frequencyLocation = locations[2];
    705861    ASSERT(m_alphaLocation != -1 && m_texTransformLocation != -1 && m_frequencyLocation != -1);
    706862}
  • trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h

    r121378 r121823  
    4242    VertexShaderPosTex();
    4343
    44     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     44    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    4545    String getShaderString() const;
    4646
     
    5555    VertexShaderPosTexYUVStretch();
    5656
    57     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     57    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    5858    String getShaderString() const;
    5959
     
    7272    VertexShaderPos();
    7373
    74     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     74    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    7575    String getShaderString() const;
    7676
     
    8383class VertexShaderPosTexIdentity {
    8484public:
    85     void init(WebKit::WebGraphicsContext3D*, unsigned program) { }
     85    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex) { }
    8686    String getShaderString() const;
    8787};
     
    9191    VertexShaderPosTexTransform();
    9292
    93     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     93    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    9494    String getShaderString() const;
    9595
     
    106106    VertexShaderQuad();
    107107
    108     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     108    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    109109    String getShaderString() const;
    110110
     
    121121    VertexShaderTile();
    122122
    123     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     123    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    124124    String getShaderString() const;
    125125
     
    138138    VertexShaderVideoTransform();
    139139
    140     bool init(WebKit::WebGraphicsContext3D*, unsigned program);
     140    bool init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    141141    String getShaderString() const;
    142142
     
    153153    FragmentTexAlphaBinding();
    154154
    155     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     155    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    156156    int alphaLocation() const { return m_alphaLocation; }
    157157    int edgeLocation() const { return -1; }
     
    168168    FragmentTexOpaqueBinding();
    169169
    170     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     170    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    171171    int alphaLocation() const { return -1; }
    172172    int edgeLocation() const { return -1; }
     
    224224public:
    225225    String getShaderString() const;
    226     bool init(WebKit::WebGraphicsContext3D*, unsigned program);
     226    bool init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    227227private:
    228228    int m_samplerLocation;
     
    233233    FragmentShaderRGBATexAlphaAA();
    234234
    235     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     235    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    236236    String getShaderString() const;
    237237
     
    250250    FragmentTexClampAlphaAABinding();
    251251
    252     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     252    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    253253    int alphaLocation() const { return m_alphaLocation; }
    254254    int samplerLocation() const { return m_samplerLocation; }
     
    279279    String getShaderString() const;
    280280
    281     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     281    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    282282    int alphaLocation() const { return m_alphaLocation; }
    283283    int samplerLocation() const { return m_samplerLocation; }
     
    295295    String getShaderString() const;
    296296
    297     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     297    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    298298    int alphaLocation() const { return m_alphaLocation; }
    299299    int samplerLocation() const { return m_samplerLocation; }
     
    313313    String getShaderString() const;
    314314
    315     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     315    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    316316
    317317    int yTextureLocation() const { return m_yTextureLocation; }
     
    336336    String getShaderString() const;
    337337
    338     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     338    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    339339    int colorLocation() const { return m_colorLocation; }
    340340
     
    348348    String getShaderString() const;
    349349
    350     void init(WebKit::WebGraphicsContext3D*, unsigned program);
     350    void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
    351351    int alphaLocation() const { return m_alphaLocation; }
    352352    int texTransformLocation() const { return m_texTransformLocation; }
  • trunk/Source/WebCore/platform/graphics/chromium/TextureCopier.cpp

    r121375 r121823  
    3535
    3636#if USE(ACCELERATED_COMPOSITING)
    37 AcceleratedTextureCopier::AcceleratedTextureCopier(WebKit::WebGraphicsContext3D* context)
     37AcceleratedTextureCopier::AcceleratedTextureCopier(WebKit::WebGraphicsContext3D* context, bool usingBindUniforms)
    3838    : m_context(context)
     39    , m_usingBindUniforms(usingBindUniforms)
    3940{
    4041    ASSERT(m_context);
     
    9192
    9293    if (!m_blitProgram->initialized())
    93         m_blitProgram->initialize(context);
     94        m_blitProgram->initialize(context, m_usingBindUniforms);
    9495
    9596    // TODO: Use EXT_framebuffer_blit if available.
  • trunk/Source/WebCore/platform/graphics/chromium/TextureCopier.h

    r121204 r121823  
    5454    WTF_MAKE_NONCOPYABLE(AcceleratedTextureCopier);
    5555public:
    56     static PassOwnPtr<AcceleratedTextureCopier> create(WebKit::WebGraphicsContext3D* context)
     56    static PassOwnPtr<AcceleratedTextureCopier> create(WebKit::WebGraphicsContext3D* context, bool usingBindUniforms)
    5757    {
    58         return adoptPtr(new AcceleratedTextureCopier(context));
     58        return adoptPtr(new AcceleratedTextureCopier(context, usingBindUniforms));
    5959    }
    6060    virtual ~AcceleratedTextureCopier();
     
    6363
    6464protected:
    65     explicit AcceleratedTextureCopier(WebKit::WebGraphicsContext3D*);
     65    AcceleratedTextureCopier(WebKit::WebGraphicsContext3D*, bool usingBindUniforms);
    6666
    6767private:
     
    7272    Platform3DObject m_positionBuffer;
    7373    OwnPtr<BlitProgram> m_blitProgram;
     74    bool m_usingBindUniforms;
    7475};
    7576
  • trunk/Source/WebKit/chromium/ChangeLog

    r121818 r121823  
     12012-07-03  Alex Sakhartchouk  <alexst@chromium.org>
     2
     3        [chromium] Avoid calling getUniformLocation??() in the compositor startup
     4        https://bugs.webkit.org/show_bug.cgi?id=90217
     5
     6        Reviewed by Adrienne Walker.
     7
     8        Fixing the build error.
     9
     10        * tests/TextureCopierTest.cpp:
     11
    1122012-07-03  Erik Arvidsson  <arv@chromium.org>
    213
  • trunk/Source/WebKit/chromium/tests/TextureCopierTest.cpp

    r121204 r121823  
    7979    int destTextureId = 2;
    8080    IntSize size(256, 128);
    81     OwnPtr<AcceleratedTextureCopier> copier(AcceleratedTextureCopier::create(ccContext->context3D()));
     81    OwnPtr<AcceleratedTextureCopier> copier(AcceleratedTextureCopier::create(ccContext->context3D(), false));
    8282    copier->copyTexture(ccContext.get(), sourceTextureId, destTextureId, size);
    8383}
Note: See TracChangeset for help on using the changeset viewer.