File: angle-r702.patch

package info (click to toggle)
wine-gecko-1.4 1.4%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 444,640 kB
  • sloc: cpp: 1,881,236; ansic: 1,112,418; asm: 94,053; python: 53,897; xml: 45,341; makefile: 43,952; sh: 39,633; java: 23,000; perl: 17,638; objc: 3,480; yacc: 1,765; pascal: 926; lex: 861; exp: 449; php: 244; awk: 211; ada: 49; sed: 9
file content (84 lines) | stat: -rw-r--r-- 3,473 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# HG changeset patch
# Parent b410077eaab7f6f851ebefa26fd9e1df938026bb

diff --git a/gfx/angle/src/libGLESv2/VertexDataManager.cpp b/gfx/angle/src/libGLESv2/VertexDataManager.cpp
--- a/gfx/angle/src/libGLESv2/VertexDataManager.cpp
+++ b/gfx/angle/src/libGLESv2/VertexDataManager.cpp
@@ -134,19 +134,33 @@ GLenum VertexDataManager::prepareVertexD
                 if (staticBuffer->size() == 0)
                 {
                     int totalCount = buffer->size() / attribs[i].stride();
                     staticBuffer->addRequiredSpace(spaceRequired(attribs[i], totalCount));
                 }
                 else if (staticBuffer->lookupAttribute(attribs[i]) == -1)
                 {
                     // This static buffer doesn't have matching attributes, so fall back to using the streaming buffer
-                    mStreamingBuffer->addRequiredSpaceFor(staticBuffer);
                     buffer->invalidateStaticData();
 
+                    // Add the space of all previous attributes belonging to the invalidated static buffer to the streaming buffer
+                    for (int previous = 0; previous < i; previous++)
+                    {
+                        if (translated[previous].active && attribs[previous].mArrayEnabled)
+                        {
+                            Buffer *previousBuffer = attribs[previous].mBoundBuffer.get();
+                            StaticVertexBuffer *previousStaticBuffer = previousBuffer ? previousBuffer->getStaticVertexBuffer() : NULL;
+
+                            if (staticBuffer == previousStaticBuffer)
+                            {
+                                mStreamingBuffer->addRequiredSpace(spaceRequired(attribs[previous], count));
+                            }
+                        }
+                    }
+
                     mStreamingBuffer->addRequiredSpace(spaceRequired(attribs[i], count));
                 }    
             }
             else
             {
                 mStreamingBuffer->addRequiredSpace(spaceRequired(attribs[i], count));
             }
         }
@@ -578,21 +592,16 @@ ArrayVertexBuffer::~ArrayVertexBuffer()
 {
 }
 
 void ArrayVertexBuffer::addRequiredSpace(UINT requiredSpace)
 {
     mRequiredSpace += requiredSpace;
 }
 
-void ArrayVertexBuffer::addRequiredSpaceFor(ArrayVertexBuffer *buffer)
-{
-    mRequiredSpace += buffer->mRequiredSpace;
-}
-
 StreamingVertexBuffer::StreamingVertexBuffer(IDirect3DDevice9 *device, std::size_t initialSize) : ArrayVertexBuffer(device, initialSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY)
 {
 }
 
 StreamingVertexBuffer::~StreamingVertexBuffer()
 {
 }
 
diff --git a/gfx/angle/src/libGLESv2/VertexDataManager.h b/gfx/angle/src/libGLESv2/VertexDataManager.h
--- a/gfx/angle/src/libGLESv2/VertexDataManager.h
+++ b/gfx/angle/src/libGLESv2/VertexDataManager.h
@@ -62,17 +62,16 @@ class ArrayVertexBuffer : public VertexB
   public:
     ArrayVertexBuffer(IDirect3DDevice9 *device, UINT size, DWORD usageFlags);
     ~ArrayVertexBuffer();
 
     UINT size() const { return mBufferSize; }
     virtual void *map(const VertexAttribute &attribute, UINT requiredSpace, UINT *streamOffset) = 0;
     virtual void reserveRequiredSpace() = 0;
     void addRequiredSpace(UINT requiredSpace);
-    void addRequiredSpaceFor(ArrayVertexBuffer *buffer);
 
   protected:
     UINT mBufferSize;
     UINT mWritePosition;
     UINT mRequiredSpace;
 };
 
 class StreamingVertexBuffer : public ArrayVertexBuffer