| Differences between
and this patch
- a/Source/WebCore/ChangeLog +31 lines
Lines 1-5 a/Source/WebCore/ChangeLog_sec1
1
2011-08-04  James Robinson  <jamesr@chromium.org>
1
2011-08-04  James Robinson  <jamesr@chromium.org>
2
2
3
        [chromium] Accelerated canvas breaks when moving canvases or resources between Pages
4
        https://bugs.webkit.org/show_bug.cgi?id=65402
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Use one shared GraphicsContext3D for the whole process instead of one per Page as canvases can move between
9
        pages and directly draw into contexts in different pages.  Also switches DrawingBufferChromium over to use a
10
        directly shared the color attachment instead of copying it to a separate texture and removes the now-unnecessary
11
        DrawingBuffer::didReset() call and WillPublishCallback mechanism.
12
13
        * page/Page.cpp:
14
        (WebCore::Page::sharedGraphicsContext3D):
15
        * page/Page.h:
16
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
17
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
18
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
19
        (WebCore::Canvas2DLayerChromium::textureId):
20
        (WebCore::Canvas2DLayerChromium::setDrawingBuffer):
21
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
22
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
23
        * platform/graphics/chromium/CanvasLayerChromium.h:
24
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
25
        (WebCore::DrawingBuffer::DrawingBuffer):
26
        (WebCore::DrawingBuffer::publishToPlatformLayer):
27
        * platform/graphics/chromium/Extensions3DChromium.h:
28
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
29
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
30
        * platform/graphics/chromium/WebGLLayerChromium.h:
31
32
2011-08-04  James Robinson  <jamesr@chromium.org>
33
3
        Unreviewed build fix.  gcc 4.5 can't figure out that the 'data' variables are always initialized in these functions.
34
        Unreviewed build fix.  gcc 4.5 can't figure out that the 'data' variables are always initialized in these functions.
4
35
5
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
36
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
- a/Source/WebCore/WebCore.gypi +2 lines
Lines 3649-3654 a/Source/WebCore/WebCore.gypi_sec1
3649
            'platform/graphics/gpu/DrawingBuffer.h',
3649
            'platform/graphics/gpu/DrawingBuffer.h',
3650
            'platform/graphics/gpu/Shader.cpp',
3650
            'platform/graphics/gpu/Shader.cpp',
3651
            'platform/graphics/gpu/Shader.h',
3651
            'platform/graphics/gpu/Shader.h',
3652
            'platform/graphics/gpu/SharedGraphicsContext3D.cpp',
3653
            'platform/graphics/gpu/SharedGraphicsContext3D.h',
3652
            'platform/graphics/gpu/Texture.cpp',
3654
            'platform/graphics/gpu/Texture.cpp',
3653
            'platform/graphics/gpu/Texture.h',
3655
            'platform/graphics/gpu/Texture.h',
3654
            'platform/graphics/gpu/TilingData.cpp',
3656
            'platform/graphics/gpu/TilingData.cpp',
- a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp -7 / +5 lines
Lines 66-71 a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp_sec1
66
#include "ChromeClient.h"
66
#include "ChromeClient.h"
67
#include "DrawingBuffer.h"
67
#include "DrawingBuffer.h"
68
#include "FrameView.h"
68
#include "FrameView.h"
69
#include "SharedGraphicsContext3D.h"
69
#if USE(ACCELERATED_COMPOSITING)
70
#if USE(ACCELERATED_COMPOSITING)
70
#include "RenderLayer.h"
71
#include "RenderLayer.h"
71
#endif
72
#endif
Lines 142-150 CanvasRenderingContext2D::CanvasRenderingContext2D(HTMLCanvasElement* canvas, bo a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp_sec2
142
#if ENABLE(DASHBOARD_SUPPORT)
143
#if ENABLE(DASHBOARD_SUPPORT)
143
    , m_usesDashboardCompatibilityMode(usesDashboardCompatibilityMode)
144
    , m_usesDashboardCompatibilityMode(usesDashboardCompatibilityMode)
144
#endif
145
#endif
145
#if ENABLE(ACCELERATED_2D_CANVAS)
146
    , m_context3D(0)
147
#endif
148
{
146
{
149
#if !ENABLE(DASHBOARD_SUPPORT)
147
#if !ENABLE(DASHBOARD_SUPPORT)
150
    ASSERT_UNUSED(usesDashboardCompatibilityMode, !usesDashboardCompatibilityMode);
148
    ASSERT_UNUSED(usesDashboardCompatibilityMode, !usesDashboardCompatibilityMode);
Lines 195-201 bool CanvasRenderingContext2D::paintsIntoCanvasBuffer() const a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp_sec3
195
{
193
{
196
#if ENABLE(ACCELERATED_2D_CANVAS)
194
#if ENABLE(ACCELERATED_2D_CANVAS)
197
    if (m_context3D)
195
    if (m_context3D)
198
        return m_context3D->paintsIntoCanvasBuffer();
196
        return m_context3D->context()->paintsIntoCanvasBuffer();
199
#endif
197
#endif
200
    return true;
198
    return true;
201
}
199
}
Lines 2050-2056 void CanvasRenderingContext2D::resetAcceleration() a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp_sec4
2050
2048
2051
    if (!m_context3D) {
2049
    if (!m_context3D) {
2052
        Page* page = canvas()->document()->page();
2050
        Page* page = canvas()->document()->page();
2053
        m_context3D = page->sharedGraphicsContext3D();
2051
        m_context3D = SharedGraphicsContext3D::create(page->chrome());
2054
        if (!m_context3D) {
2052
        if (!m_context3D) {
2055
            clearAcceleration();
2053
            clearAcceleration();
2056
            return;
2054
            return;
Lines 2063-2076 void CanvasRenderingContext2D::resetAcceleration() a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp_sec5
2063
            return;
2061
            return;
2064
        }
2062
        }
2065
    } else {
2063
    } else {
2066
        m_drawingBuffer = m_context3D->createDrawingBuffer(canvas()->size());
2064
        m_drawingBuffer = m_context3D->context()->createDrawingBuffer(canvas()->size());
2067
        if (!m_drawingBuffer) {
2065
        if (!m_drawingBuffer) {
2068
            clearAcceleration();
2066
            clearAcceleration();
2069
            return;
2067
            return;
2070
        }
2068
        }
2071
    }
2069
    }
2072
2070
2073
    ctx->setGraphicsContext3D(m_context3D.get(), m_drawingBuffer.get(), canvas()->size());
2071
    ctx->setGraphicsContext3D(m_context3D->context(), m_drawingBuffer.get(), canvas()->size());
2074
}
2072
}
2075
#endif
2073
#endif
2076
2074
- a/Source/WebCore/html/canvas/CanvasRenderingContext2D.h -3 / +2 lines
Lines 36-42 a/Source/WebCore/html/canvas/CanvasRenderingContext2D.h_sec1
36
#include "PlatformString.h"
36
#include "PlatformString.h"
37
#include <wtf/Vector.h>
37
#include <wtf/Vector.h>
38
38
39
40
#if USE(ACCELERATED_COMPOSITING)
39
#if USE(ACCELERATED_COMPOSITING)
41
#include "GraphicsLayer.h"
40
#include "GraphicsLayer.h"
42
#endif
41
#endif
Lines 56-62 class TextMetrics; a/Source/WebCore/html/canvas/CanvasRenderingContext2D.h_sec2
56
55
57
#if ENABLE(ACCELERATED_2D_CANVAS)
56
#if ENABLE(ACCELERATED_2D_CANVAS)
58
class DrawingBuffer;
57
class DrawingBuffer;
59
class GraphicsContext3D;
58
class SharedGraphicsContext3D;
60
#endif
59
#endif
61
60
62
typedef int ExceptionCode;
61
typedef int ExceptionCode;
Lines 308-314 private: a/Source/WebCore/html/canvas/CanvasRenderingContext2D.h_sec3
308
307
309
#if ENABLE(ACCELERATED_2D_CANVAS)
308
#if ENABLE(ACCELERATED_2D_CANVAS)
310
    RefPtr<DrawingBuffer> m_drawingBuffer;
309
    RefPtr<DrawingBuffer> m_drawingBuffer;
311
    RefPtr<GraphicsContext3D> m_context3D;
310
    RefPtr<SharedGraphicsContext3D> m_context3D;
312
#endif
311
#endif
313
};
312
};
314
313
- a/Source/WebCore/page/Page.cpp -21 lines
Lines 75-84 a/Source/WebCore/page/Page.cpp_sec1
75
#include <wtf/StdLibExtras.h>
75
#include <wtf/StdLibExtras.h>
76
#include <wtf/text/StringHash.h>
76
#include <wtf/text/StringHash.h>
77
77
78
#if ENABLE(ACCELERATED_2D_CANVAS)
79
#include "GraphicsContext3D.h"
80
#endif
81
82
#if ENABLE(DOM_STORAGE)
78
#if ENABLE(DOM_STORAGE)
83
#include "StorageArea.h"
79
#include "StorageArea.h"
84
#include "StorageNamespace.h"
80
#include "StorageNamespace.h"
Lines 752-774 void Page::setDebugger(JSC::Debugger* debugger) a/Source/WebCore/page/Page.cpp_sec2
752
        frame->script()->attachDebugger(m_debugger);
748
        frame->script()->attachDebugger(m_debugger);
753
}
749
}
754
750
755
GraphicsContext3D* Page::sharedGraphicsContext3D()
756
{
757
#if ENABLE(ACCELERATED_2D_CANVAS)
758
    if (!m_sharedGraphicsContext3D) {
759
        GraphicsContext3D::Attributes attr;
760
        attr.depth = false;
761
        attr.stencil = true;
762
        attr.antialias = false;
763
        attr.canRecoverFromContextLoss = false; // Canvas contexts can not handle lost contexts.
764
        m_sharedGraphicsContext3D = GraphicsContext3D::create(attr, chrome());
765
    }
766
    return m_sharedGraphicsContext3D.get();
767
#else // !ENABLE(ACCELERATED_2D_CANVAS)
768
    return 0;
769
#endif
770
}
771
772
#if ENABLE(DOM_STORAGE)
751
#if ENABLE(DOM_STORAGE)
773
StorageNamespace* Page::sessionStorage(bool optionalCreate)
752
StorageNamespace* Page::sessionStorage(bool optionalCreate)
774
{
753
{
- a/Source/WebCore/page/Page.h -7 lines
Lines 81-87 namespace WebCore { a/Source/WebCore/page/Page.h_sec1
81
    class VisibleSelection;
81
    class VisibleSelection;
82
    class ScrollableArea;
82
    class ScrollableArea;
83
    class Settings;
83
    class Settings;
84
    class GraphicsContext3D;
85
    class SpeechInput;
84
    class SpeechInput;
86
    class SpeechInputClient;
85
    class SpeechInputClient;
87
#if ENABLE(DOM_STORAGE)
86
#if ENABLE(DOM_STORAGE)
Lines 266-273 namespace WebCore { a/Source/WebCore/page/Page.h_sec2
266
        static void allVisitedStateChanged(PageGroup*);
265
        static void allVisitedStateChanged(PageGroup*);
267
        static void visitedStateChanged(PageGroup*, LinkHash visitedHash);
266
        static void visitedStateChanged(PageGroup*, LinkHash visitedHash);
268
267
269
        GraphicsContext3D* sharedGraphicsContext3D();
270
271
#if ENABLE(DOM_STORAGE)
268
#if ENABLE(DOM_STORAGE)
272
        StorageNamespace* sessionStorage(bool optionalCreate = true);
269
        StorageNamespace* sessionStorage(bool optionalCreate = true);
273
        void setSessionStorage(PassRefPtr<StorageNamespace>);
270
        void setSessionStorage(PassRefPtr<StorageNamespace>);
Lines 324-333 namespace WebCore { a/Source/WebCore/page/Page.h_sec3
324
        OwnPtr<Chrome> m_chrome;
321
        OwnPtr<Chrome> m_chrome;
325
        OwnPtr<DragCaretController> m_dragCaretController;
322
        OwnPtr<DragCaretController> m_dragCaretController;
326
323
327
#if ENABLE(ACCELERATED_2D_CANVAS)
328
        RefPtr<GraphicsContext3D> m_sharedGraphicsContext3D;
329
#endif
330
        
331
#if ENABLE(DRAG_SUPPORT)
324
#if ENABLE(DRAG_SUPPORT)
332
        OwnPtr<DragController> m_dragController;
325
        OwnPtr<DragController> m_dragController;
333
#endif
326
#endif
- a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp -30 / +1 lines
Lines 54-61 Canvas2DLayerChromium::Canvas2DLayerChromium(DrawingBuffer* drawingBuffer, Graph a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp_sec1
54
54
55
Canvas2DLayerChromium::~Canvas2DLayerChromium()
55
Canvas2DLayerChromium::~Canvas2DLayerChromium()
56
{
56
{
57
    if (m_textureId)
58
        layerRendererContext()->deleteTexture(m_textureId);
59
    if (m_drawingBuffer && layerRenderer())
57
    if (m_drawingBuffer && layerRenderer())
60
        layerRenderer()->removeChildContext(m_drawingBuffer->graphicsContext3D().get());
58
        layerRenderer()->removeChildContext(m_drawingBuffer->graphicsContext3D().get());
61
}
59
}
Lines 72-98 void Canvas2DLayerChromium::updateCompositorResources() a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp_sec2
72
{
70
{
73
    if (!m_contentsDirty || !drawsContent())
71
    if (!m_contentsDirty || !drawsContent())
74
        return;
72
        return;
75
    if (m_textureChanged) { // We have to generate a new backing texture.
76
        GraphicsContext3D* context = layerRendererContext();
77
        if (m_textureId)
78
            context->deleteTexture(m_textureId);
79
        m_textureId = context->createTexture();
80
        context->activeTexture(GraphicsContext3D::TEXTURE0);
81
        context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId);
82
        IntSize size = m_drawingBuffer->size();
83
        context->texImage2DResourceSafe(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, size.width(), size.height(), 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE);
84
        // Set the min-mag filters to linear and wrap modes to GraphicsContext3D::CLAMP_TO_EDGE
85
        // to get around NPOT texture limitations of GLES.
86
        context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
87
        context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
88
        context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
89
        context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
90
        m_textureChanged = false;
91
        // The flush() here is required because we have to make sure that the texture created in this
92
        // context (the compositor context) is actually created by the service side before the child context
93
        // attempts to use it (in publishToPlatformLayer).
94
        context->flush();
95
    }
96
    // Update the contents of the texture used by the compositor.
73
    // Update the contents of the texture used by the compositor.
97
    if (m_contentsDirty) {
74
    if (m_contentsDirty) {
98
        m_drawingBuffer->publishToPlatformLayer();
75
        m_drawingBuffer->publishToPlatformLayer();
Lines 100-113 void Canvas2DLayerChromium::updateCompositorResources() a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp_sec3
100
    }
77
    }
101
}
78
}
102
79
103
void Canvas2DLayerChromium::setTextureChanged()
104
{
105
    m_textureChanged = true;
106
}
107
108
unsigned Canvas2DLayerChromium::textureId() const
80
unsigned Canvas2DLayerChromium::textureId() const
109
{
81
{
110
    return m_textureId;
82
    return m_drawingBuffer ? m_drawingBuffer->platformColorBuffer() : 0;
111
}
83
}
112
84
113
void Canvas2DLayerChromium::setDrawingBuffer(DrawingBuffer* drawingBuffer)
85
void Canvas2DLayerChromium::setDrawingBuffer(DrawingBuffer* drawingBuffer)
Lines 117-123 void Canvas2DLayerChromium::setDrawingBuffer(DrawingBuffer* drawingBuffer) a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp_sec4
117
            layerRenderer()->removeChildContext(m_drawingBuffer->graphicsContext3D().get());
89
            layerRenderer()->removeChildContext(m_drawingBuffer->graphicsContext3D().get());
118
90
119
        m_drawingBuffer = drawingBuffer;
91
        m_drawingBuffer = drawingBuffer;
120
        m_textureChanged = true;
121
92
122
        if (drawingBuffer && layerRenderer())
93
        if (drawingBuffer && layerRenderer())
123
            layerRenderer()->addChildContext(m_drawingBuffer->graphicsContext3D().get());
94
            layerRenderer()->addChildContext(m_drawingBuffer->graphicsContext3D().get());
- a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h -1 / +1 lines
Lines 49-55 public: a/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h_sec1
49
    virtual void updateCompositorResources();
49
    virtual void updateCompositorResources();
50
50
51
    void setTextureChanged();
51
    void setTextureChanged();
52
    unsigned textureId() const;
52
    virtual unsigned textureId() const;
53
    void setDrawingBuffer(DrawingBuffer*);
53
    void setDrawingBuffer(DrawingBuffer*);
54
54
55
    virtual void setLayerRenderer(LayerRendererChromium*);
55
    virtual void setLayerRenderer(LayerRendererChromium*);
- a/Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp -3 / +1 lines
Lines 42-49 namespace WebCore { a/Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp_sec1
42
42
43
CanvasLayerChromium::CanvasLayerChromium(GraphicsLayerChromium* owner)
43
CanvasLayerChromium::CanvasLayerChromium(GraphicsLayerChromium* owner)
44
    : LayerChromium(owner)
44
    : LayerChromium(owner)
45
    , m_textureChanged(true)
46
    , m_textureId(0)
47
    , m_hasAlpha(true)
45
    , m_hasAlpha(true)
48
    , m_premultipliedAlpha(true)
46
    , m_premultipliedAlpha(true)
49
{
47
{
Lines 63-69 void CanvasLayerChromium::pushPropertiesTo(CCLayerImpl* layer) a/Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp_sec2
63
    LayerChromium::pushPropertiesTo(layer);
61
    LayerChromium::pushPropertiesTo(layer);
64
62
65
    CCCanvasLayerImpl* canvasLayer = static_cast<CCCanvasLayerImpl*>(layer);
63
    CCCanvasLayerImpl* canvasLayer = static_cast<CCCanvasLayerImpl*>(layer);
66
    canvasLayer->setTextureId(m_textureId);
64
    canvasLayer->setTextureId(textureId());
67
    canvasLayer->setHasAlpha(m_hasAlpha);
65
    canvasLayer->setHasAlpha(m_hasAlpha);
68
    canvasLayer->setPremultipliedAlpha(m_premultipliedAlpha);
66
    canvasLayer->setPremultipliedAlpha(m_premultipliedAlpha);
69
}
67
}
- a/Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h -2 / +1 lines
Lines 50-59 public: a/Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h_sec1
50
protected:
50
protected:
51
    explicit CanvasLayerChromium(GraphicsLayerChromium* owner);
51
    explicit CanvasLayerChromium(GraphicsLayerChromium* owner);
52
52
53
    virtual unsigned textureId() const = 0;
53
    virtual const char* layerTypeAsString() const { return "CanvasLayer"; }
54
    virtual const char* layerTypeAsString() const { return "CanvasLayer"; }
54
55
55
    bool m_textureChanged;
56
    unsigned m_textureId;
57
    bool m_hasAlpha;
56
    bool m_hasAlpha;
58
    bool m_premultipliedAlpha;
57
    bool m_premultipliedAlpha;
59
};
58
};
- a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp -22 lines
Lines 32-40 a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp_sec1
32
32
33
#include "DrawingBuffer.h"
33
#include "DrawingBuffer.h"
34
34
35
#include "Extensions3DChromium.h"
36
#include "GraphicsContext3D.h"
35
#include "GraphicsContext3D.h"
37
38
#if USE(SKIA)
36
#if USE(SKIA)
39
#include "GrContext.h"
37
#include "GrContext.h"
40
#endif
38
#endif
Lines 62-68 static unsigned generateColorTexture(GraphicsContext3D* context, const IntSize& a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp_sec2
62
    return offscreenColorTexture;
60
    return offscreenColorTexture;
63
}
61
}
64
62
65
66
DrawingBuffer::DrawingBuffer(GraphicsContext3D* context,
63
DrawingBuffer::DrawingBuffer(GraphicsContext3D* context,
67
                             const IntSize& size,
64
                             const IntSize& size,
68
                             bool multisampleExtensionSupported,
65
                             bool multisampleExtensionSupported,
Lines 82-91 DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp_sec3
82
    , m_grContext(0)
79
    , m_grContext(0)
83
#endif
80
#endif
84
{
81
{
85
    if (!m_context->getExtensions()->supports("GL_CHROMIUM_copy_texture_to_parent_texture")) {
86
        m_context.clear();
87
        return;
88
    }
89
    m_fbo = context->createFramebuffer();
82
    m_fbo = context->createFramebuffer();
90
    context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
83
    context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
91
    m_colorBuffer = generateColorTexture(context, size);
84
    m_colorBuffer = generateColorTexture(context, size);
Lines 115-146 void DrawingBuffer::publishToPlatformLayer() a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp_sec4
115
    if (!m_context)
108
    if (!m_context)
116
        return;
109
        return;
117
110
118
    if (m_callback)
119
        m_callback->willPublish();
120
    if (multisample())
111
    if (multisample())
121
        commit();
112
        commit();
122
    unsigned parentTexture = m_platformLayer->textureId();
123
    // We do the copy in the canvas' (child) context so that it executes in the correct order relative to
124
    // other commands in the child context. This ensures that the parent texture always contains a complete
125
    // frame and not some intermediate result.
126
    m_context->makeContextCurrent();
113
    m_context->makeContextCurrent();
127
#if USE(SKIA)
114
#if USE(SKIA)
128
    if (m_grContext)
115
    if (m_grContext)
129
        m_grContext->flush(0);
116
        m_grContext->flush(0);
130
#endif
117
#endif
131
    static_cast<Extensions3DChromium*>(m_context->getExtensions())->copyTextureToParentTextureCHROMIUM(m_colorBuffer, parentTexture);
132
    m_context->flush();
118
    m_context->flush();
133
}
119
}
134
#endif
120
#endif
135
121
136
void DrawingBuffer::didReset()
137
{
138
#if USE(ACCELERATED_COMPOSITING)
139
    if (m_platformLayer)
140
        m_platformLayer->setTextureChanged();
141
#endif
142
}
143
144
#if USE(ACCELERATED_COMPOSITING)
122
#if USE(ACCELERATED_COMPOSITING)
145
PlatformLayer* DrawingBuffer::platformLayer()
123
PlatformLayer* DrawingBuffer::platformLayer()
146
{
124
{
- a/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h -4 lines
Lines 40-46 public: a/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h_sec1
40
    //   GL_CHROMIUM_resource_safe  : indicating that textures/renderbuffers are always initialized before read/write.
40
    //   GL_CHROMIUM_resource_safe  : indicating that textures/renderbuffers are always initialized before read/write.
41
    //   GL_CHROMIUM_strict_attribs : indicating a GL error is generated for out-of-bounds buffer accesses.
41
    //   GL_CHROMIUM_strict_attribs : indicating a GL error is generated for out-of-bounds buffer accesses.
42
    //   GL_CHROMIUM_map_sub
42
    //   GL_CHROMIUM_map_sub
43
    //   GL_CHROMIUM_copy_texture_to_parent_texture
44
    //   GL_CHROMIUM_swapbuffers_complete_callback
43
    //   GL_CHROMIUM_swapbuffers_complete_callback
45
    //   GL_CHROMIUM_rate_limit_offscreen_context
44
    //   GL_CHROMIUM_rate_limit_offscreen_context
46
45
Lines 68-76 public: a/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h_sec2
68
    void* mapTexSubImage2DCHROMIUM(unsigned target, int level, int xoffset, int yoffset, int width, int height, unsigned format, unsigned type, unsigned access);
67
    void* mapTexSubImage2DCHROMIUM(unsigned target, int level, int xoffset, int yoffset, int width, int height, unsigned format, unsigned type, unsigned access);
69
    void unmapTexSubImage2DCHROMIUM(const void*);
68
    void unmapTexSubImage2DCHROMIUM(const void*);
70
69
71
    // GL_CHROMIUM_copy_texture_to_parent_texture
72
    void copyTextureToParentTextureCHROMIUM(unsigned texture, unsigned parentTexture);
73
74
    // GL_CHROMIUM_swapbuffers_complete_callback
70
    // GL_CHROMIUM_swapbuffers_complete_callback
75
    class SwapBuffersCompleteCallbackCHROMIUM {
71
    class SwapBuffersCompleteCallbackCHROMIUM {
76
    public:
72
    public:
- a/Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp +2 lines
Lines 49-54 PassRefPtr<WebGLLayerChromium> WebGLLayerChromium::create(GraphicsLayerChromium* a/Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp_sec1
49
WebGLLayerChromium::WebGLLayerChromium(GraphicsLayerChromium* owner)
49
WebGLLayerChromium::WebGLLayerChromium(GraphicsLayerChromium* owner)
50
    : CanvasLayerChromium(owner)
50
    : CanvasLayerChromium(owner)
51
    , m_context(0)
51
    , m_context(0)
52
    , m_textureId(0)
53
    , m_textureChanged(true)
52
    , m_contextSupportsRateLimitingExtension(false)
54
    , m_contextSupportsRateLimitingExtension(false)
53
    , m_rateLimitingTimer(this, &WebGLLayerChromium::rateLimitContext)
55
    , m_rateLimitingTimer(this, &WebGLLayerChromium::rateLimitContext)
54
    , m_textureUpdated(false)
56
    , m_textureUpdated(false)
- a/Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.h +3 lines
Lines 65-76 private: a/Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.h_sec1
65
    explicit WebGLLayerChromium(GraphicsLayerChromium* owner);
65
    explicit WebGLLayerChromium(GraphicsLayerChromium* owner);
66
    friend class WebGLLayerChromiumRateLimitTask;
66
    friend class WebGLLayerChromiumRateLimitTask;
67
67
68
    virtual unsigned textureId() const { return m_textureId; }
68
    void rateLimitContext(Timer<WebGLLayerChromium>*);
69
    void rateLimitContext(Timer<WebGLLayerChromium>*);
69
70
70
    // GraphicsContext3D::platformLayer has a side-effect of assigning itself
71
    // GraphicsContext3D::platformLayer has a side-effect of assigning itself
71
    // to the layer. Because of that GraphicsContext3D's destructor will reset
72
    // to the layer. Because of that GraphicsContext3D's destructor will reset
72
    // layer's context to 0.
73
    // layer's context to 0.
73
    GraphicsContext3D* m_context;
74
    GraphicsContext3D* m_context;
75
    unsigned m_textureId;
76
    bool m_textureChanged;
74
    bool m_contextSupportsRateLimitingExtension;
77
    bool m_contextSupportsRateLimitingExtension;
75
    Timer<WebGLLayerChromium> m_rateLimitingTimer;
78
    Timer<WebGLLayerChromium> m_rateLimitingTimer;
76
    bool m_textureUpdated;
79
    bool m_textureUpdated;
- a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp -2 lines
Lines 286-293 bool DrawingBuffer::reset(const IntSize& newSize) a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp_sec1
286
286
287
    clearFramebuffer();
287
    clearFramebuffer();
288
288
289
    didReset();
290
291
    return true;
289
    return true;
292
}
290
}
293
291
- a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h -17 lines
Lines 90-108 public: a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h_sec1
90
    void publishToPlatformLayer();
90
    void publishToPlatformLayer();
91
#endif
91
#endif
92
92
93
#if PLATFORM(CHROMIUM)
94
    class WillPublishCallback {
95
        WTF_MAKE_NONCOPYABLE(WillPublishCallback);
96
    public:
97
        WillPublishCallback() { }
98
        virtual ~WillPublishCallback() { }
99
        
100
        virtual void willPublish() = 0;
101
    };
102
103
    void setWillPublishCallback(PassOwnPtr<WillPublishCallback> callback) { m_callback = callback; }
104
#endif
105
106
#if USE(SKIA)
93
#if USE(SKIA)
107
    void setGrContext(GrContext* ctx);
94
    void setGrContext(GrContext* ctx);
108
    void getGrPlatformSurfaceDesc(GrPlatformSurfaceDesc*);
95
    void getGrPlatformSurfaceDesc(GrPlatformSurfaceDesc*);
Lines 115-123 private: a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h_sec2
115
    
102
    
116
    DrawingBuffer(GraphicsContext3D*, const IntSize&, bool multisampleExtensionSupported, bool packedDepthStencilExtensionSupported);
103
    DrawingBuffer(GraphicsContext3D*, const IntSize&, bool multisampleExtensionSupported, bool packedDepthStencilExtensionSupported);
117
104
118
    // Platform specific function called after reset() so each platform can do extra work if needed
119
    void didReset();
120
121
    RefPtr<GraphicsContext3D> m_context;
105
    RefPtr<GraphicsContext3D> m_context;
122
    IntSize m_size;
106
    IntSize m_size;
123
    bool m_multisampleExtensionSupported;
107
    bool m_multisampleExtensionSupported;
Lines 137-143 private: a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h_sec3
137
    Platform3DObject m_multisampleColorBuffer;
121
    Platform3DObject m_multisampleColorBuffer;
138
122
139
#if PLATFORM(CHROMIUM)
123
#if PLATFORM(CHROMIUM)
140
    OwnPtr<WillPublishCallback> m_callback;
141
#if USE(ACCELERATED_COMPOSITING)
124
#if USE(ACCELERATED_COMPOSITING)
142
    RefPtr<Canvas2DLayerChromium> m_platformLayer;
125
    RefPtr<Canvas2DLayerChromium> m_platformLayer;
143
#endif
126
#endif
- a/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp +65 lines
Line 0 a/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp_sec1
1
/*
2
 * Copyright (C) 2011 Google Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 *
8
 * 1.  Redistributions of source code must retain the above copyright
9
 *     notice, this list of conditions and the following disclaimer.
10
 * 2.  Redistributions in binary form must reproduce the above copyright
11
 *     notice, this list of conditions and the following disclaimer in the
12
 *     documentation and/or other materials provided with the distribution.
13
 *
14
 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
27
#include "config.h"
28
29
#include "SharedGraphicsContext3D.h"
30
31
namespace WebCore {
32
33
SharedGraphicsContext3D* SharedGraphicsContext3D::s_instance = 0;
34
35
PassRefPtr<SharedGraphicsContext3D> SharedGraphicsContext3D::create(HostWindow* window)
36
{
37
    if (s_instance) {
38
        s_instance->ref(); // Manually increment refcount for this caller since adoptRef() does not increase the refcount.
39
        return adoptRef(s_instance);
40
    }
41
    GraphicsContext3D::Attributes attributes;
42
    attributes.depth = false;
43
    attributes.stencil = true;
44
    attributes.antialias = false;
45
    attributes.canRecoverFromContextLoss = false; // Canvas contexts can not handle lost contexts.
46
    RefPtr<GraphicsContext3D> context = GraphicsContext3D::create(attributes, window);
47
    if (!context)
48
        return PassRefPtr<SharedGraphicsContext3D>();
49
    RefPtr<SharedGraphicsContext3D> sharedContext = adoptRef(new SharedGraphicsContext3D(context.release()));
50
    s_instance = sharedContext.get();
51
    return sharedContext;
52
}
53
54
SharedGraphicsContext3D::SharedGraphicsContext3D(PassRefPtr<GraphicsContext3D> context)
55
    : m_context(context)
56
{
57
}
58
59
SharedGraphicsContext3D::~SharedGraphicsContext3D()
60
{
61
    s_instance = 0;
62
}
63
64
}
65
- a/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h +52 lines
Line 0 a/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h_sec1
1
/*
2
 * Copyright (C) 2011 Google Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 *
8
 * 1.  Redistributions of source code must retain the above copyright
9
 *     notice, this list of conditions and the following disclaimer.
10
 * 2.  Redistributions in binary form must reproduce the above copyright
11
 *     notice, this list of conditions and the following disclaimer in the
12
 *     documentation and/or other materials provided with the distribution.
13
 *
14
 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
#ifndef SharedGraphicsContext3D_h
27
#define SharedGraphicsContext3D_h
28
29
#include "GraphicsContext3D.h"
30
#include <wtf/RefCounted.h>
31
#include <wtf/RefPtr.h>
32
33
namespace WebCore {
34
35
class SharedGraphicsContext3D : public RefCounted<SharedGraphicsContext3D> {
36
public:
37
    static PassRefPtr<SharedGraphicsContext3D> create(HostWindow*);
38
    ~SharedGraphicsContext3D();
39
40
    GraphicsContext3D* context() const { return m_context.get(); }
41
42
private:
43
    explicit SharedGraphicsContext3D(PassRefPtr<GraphicsContext3D>);
44
45
    RefPtr<GraphicsContext3D> m_context;
46
    static SharedGraphicsContext3D* s_instance;
47
};
48
49
}
50
51
#endif // SharedGraphicsContext3D_h
52
- a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm -4 lines
Lines 84-93 DrawingBuffer::~DrawingBuffer() a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm_sec1
84
    clear();
84
    clear();
85
}
85
}
86
86
87
void DrawingBuffer::didReset()
88
{
89
}
90
91
PlatformLayer* DrawingBuffer::platformLayer()
87
PlatformLayer* DrawingBuffer::platformLayer()
92
{
88
{
93
    return m_platformLayer.get();
89
    return m_platformLayer.get();
- a/Source/WebCore/platform/graphics/gpu/qt/DrawingBufferQt.cpp -4 lines
Lines 71-80 DrawingBuffer::~DrawingBuffer() a/Source/WebCore/platform/graphics/gpu/qt/DrawingBufferQt.cpp_sec1
71
    clear();
71
    clear();
72
}
72
}
73
73
74
void DrawingBuffer::didReset()
75
{
76
}
77
78
#if USE(ACCELERATED_COMPOSITING)
74
#if USE(ACCELERATED_COMPOSITING)
79
PlatformLayer* DrawingBuffer::platformLayer()
75
PlatformLayer* DrawingBuffer::platformLayer()
80
{
76
{
- a/Source/WebCore/platform/graphics/gtk/DrawingBufferGtk.cpp -4 lines
Lines 71-80 DrawingBuffer::~DrawingBuffer() a/Source/WebCore/platform/graphics/gtk/DrawingBufferGtk.cpp_sec1
71
    clear();
71
    clear();
72
}
72
}
73
73
74
void DrawingBuffer::didReset()
75
{
76
}
77
78
Platform3DObject DrawingBuffer::platformColorBuffer() const
74
Platform3DObject DrawingBuffer::platformColorBuffer() const
79
{
75
{
80
    return m_colorBuffer;
76
    return m_colorBuffer;
- a/Source/WebKit/chromium/ChangeLog +14 lines
Lines 1-5 a/Source/WebKit/chromium/ChangeLog_sec1
1
2011-08-04  James Robinson  <jamesr@chromium.org>
1
2011-08-04  James Robinson  <jamesr@chromium.org>
2
2
3
        [chromium] Accelerated canvas breaks when moving canvases or resources between Pages
4
        https://bugs.webkit.org/show_bug.cgi?id=65402
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Remove plumbing for copyTextureToParentTexture extension, it's no longer used or needed.
9
10
        * public/WebGraphicsContext3D.h:
11
        * src/Extensions3DChromium.cpp:
12
        * src/GraphicsContext3DChromium.cpp:
13
        * src/GraphicsContext3DInternal.h:
14
15
2011-08-04  James Robinson  <jamesr@chromium.org>
16
3
        Unreviewed.  Rolled DEPS.
17
        Unreviewed.  Rolled DEPS.
4
18
5
        * DEPS:
19
        * DEPS:
- a/Source/WebKit/chromium/public/WebGraphicsContext3D.h -3 lines
Lines 167-175 public: a/Source/WebKit/chromium/public/WebGraphicsContext3D.h_sec1
167
    virtual void* mapTexSubImage2DCHROMIUM(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, WGC3Denum access) = 0;
167
    virtual void* mapTexSubImage2DCHROMIUM(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, WGC3Denum access) = 0;
168
    virtual void unmapTexSubImage2DCHROMIUM(const void*) = 0;
168
    virtual void unmapTexSubImage2DCHROMIUM(const void*) = 0;
169
169
170
    // GL_CHROMIUM_copy_texture_to_parent_texture
171
    virtual void copyTextureToParentTextureCHROMIUM(WebGLId texture, WebGLId parentTexture) = 0;
172
173
    // GL_CHROMIUM_request_extension
170
    // GL_CHROMIUM_request_extension
174
    virtual WebString getRequestableExtensionsCHROMIUM() = 0;
171
    virtual WebString getRequestableExtensionsCHROMIUM() = 0;
175
    virtual void requestExtensionCHROMIUM(const char*) = 0;
172
    virtual void requestExtensionCHROMIUM(const char*) = 0;
- a/Source/WebKit/chromium/src/Extensions3DChromium.cpp -5 lines
Lines 97-107 void Extensions3DChromium::unmapTexSubImage2DCHROMIUM(const void* data) a/Source/WebKit/chromium/src/Extensions3DChromium.cpp_sec1
97
    m_internal->unmapTexSubImage2DCHROMIUM(data);
97
    m_internal->unmapTexSubImage2DCHROMIUM(data);
98
}
98
}
99
99
100
void Extensions3DChromium::copyTextureToParentTextureCHROMIUM(unsigned texture, unsigned parentTexture)
101
{
102
    m_internal->copyTextureToParentTextureCHROMIUM(texture, parentTexture);
103
}
104
105
Platform3DObject Extensions3DChromium::createVertexArrayOES()
100
Platform3DObject Extensions3DChromium::createVertexArrayOES()
106
{
101
{
107
    return 0;
102
    return 0;
- a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp -6 lines
Lines 832-843 DELEGATE_TO_IMPL_1(unmapBufferSubDataCHROMIUM, const void*) a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp_sec1
832
DELEGATE_TO_IMPL_9R(mapTexSubImage2DCHROMIUM, GC3Denum, GC3Dint, GC3Dint, GC3Dint, GC3Dsizei, GC3Dsizei, GC3Denum, GC3Denum, GC3Denum, void*)
832
DELEGATE_TO_IMPL_9R(mapTexSubImage2DCHROMIUM, GC3Denum, GC3Dint, GC3Dint, GC3Dint, GC3Dsizei, GC3Dsizei, GC3Denum, GC3Denum, GC3Denum, void*)
833
DELEGATE_TO_IMPL_1(unmapTexSubImage2DCHROMIUM, const void*)
833
DELEGATE_TO_IMPL_1(unmapTexSubImage2DCHROMIUM, const void*)
834
834
835
void GraphicsContext3DInternal::copyTextureToParentTextureCHROMIUM(Platform3DObject texture, Platform3DObject parentTexture)
836
{
837
    m_impl->setParentContext(m_webViewImpl->graphicsContext3D());
838
    m_impl->copyTextureToParentTextureCHROMIUM(texture, parentTexture);
839
}
840
841
DELEGATE_TO_IMPL_10(blitFramebufferCHROMIUM, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dbitfield, GC3Denum)
835
DELEGATE_TO_IMPL_10(blitFramebufferCHROMIUM, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dbitfield, GC3Denum)
842
DELEGATE_TO_IMPL_5(renderbufferStorageMultisampleCHROMIUM, GC3Denum, GC3Dsizei, GC3Denum, GC3Dsizei, GC3Dsizei)
836
DELEGATE_TO_IMPL_5(renderbufferStorageMultisampleCHROMIUM, GC3Denum, GC3Dsizei, GC3Denum, GC3Dsizei, GC3Dsizei)
843
837
- a/Source/WebKit/chromium/src/GraphicsContext3DInternal.h -4 lines
Lines 272-281 public: a/Source/WebKit/chromium/src/GraphicsContext3DInternal.h_sec1
272
    void* mapTexSubImage2DCHROMIUM(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Denum access);
272
    void* mapTexSubImage2DCHROMIUM(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Denum access);
273
    void unmapTexSubImage2DCHROMIUM(const void*);
273
    void unmapTexSubImage2DCHROMIUM(const void*);
274
274
275
    // GL_CHROMIUM_copy_texture_to_parent_texture
276
    bool supportsCopyTextureToParentTextureCHROMIUM();
277
    void copyTextureToParentTextureCHROMIUM(Platform3DObject texture, Platform3DObject parentTexture);
278
279
    // GL_CHROMIUM_framebuffer_multisample
275
    // GL_CHROMIUM_framebuffer_multisample
280
    void blitFramebufferCHROMIUM(GC3Dint srcX0, GC3Dint srcY0, GC3Dint srcX1, GC3Dint srcY1, GC3Dint dstX0, GC3Dint dstY0, GC3Dint dstX1, GC3Dint dstY1, GC3Dbitfield mask, GC3Denum filter);
276
    void blitFramebufferCHROMIUM(GC3Dint srcX0, GC3Dint srcY0, GC3Dint srcX1, GC3Dint srcY1, GC3Dint dstX0, GC3Dint dstY0, GC3Dint dstX1, GC3Dint dstY1, GC3Dbitfield mask, GC3Denum filter);
281
    void renderbufferStorageMultisampleCHROMIUM(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);
277
    void renderbufferStorageMultisampleCHROMIUM(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);

Return to Bug 65402