Title: [87094] trunk/Source
Revision
87094
Author
[email protected]
Date
2011-05-23 13:40:23 -0700 (Mon, 23 May 2011)

Log Message

2011-05-23  Adrienne Walker  <[email protected]>

        Reviewed by James Robinson.

        [chromium] Fix division by zero in TilingData for boundary case texture sizes
        https://bugs.webkit.org/show_bug.cgi?id=61164

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
2011-05-23  Adrienne Walker  <[email protected]>

        Reviewed by James Robinson.

        [chromium] Fix division by zero in TilingData for boundary case texture sizes
        https://bugs.webkit.org/show_bug.cgi?id=61164

        Add additional tests for small max texture sizes.

        * tests/TilingDataTest.cpp:
        (WebCore::TEST):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (87093 => 87094)


--- trunk/Source/WebCore/ChangeLog	2011-05-23 20:21:35 UTC (rev 87093)
+++ trunk/Source/WebCore/ChangeLog	2011-05-23 20:40:23 UTC (rev 87094)
@@ -1,3 +1,14 @@
+2011-05-23  Adrienne Walker  <[email protected]>
+
+        Reviewed by James Robinson.
+
+        [chromium] Fix division by zero in TilingData for boundary case texture sizes
+        https://bugs.webkit.org/show_bug.cgi?id=61164
+
+        * platform/graphics/gpu/TilingData.cpp:
+        (WebCore::TilingData::tileXIndexFromSrcCoord):
+        (WebCore::TilingData::tileYIndexFromSrcCoord):
+
 2011-05-23  Adam Barth  <[email protected]>
 
         Reviewed by Eric Seidel.

Modified: trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp (87093 => 87094)


--- trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp	2011-05-23 20:21:35 UTC (rev 87093)
+++ trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp	2011-05-23 20:40:23 UTC (rev 87094)
@@ -75,12 +75,20 @@
 
 int TilingData::tileXIndexFromSrcCoord(int srcPos) const
 {
+    if (numTilesX() <= 1)
+        return 0;
+
+    ASSERT(m_maxTextureSize - 2 * m_borderTexels);
     int x = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels);
     return min(max(x, 0), numTilesX() - 1);
 }
 
 int TilingData::tileYIndexFromSrcCoord(int srcPos) const
 {
+    if (numTilesY() <= 1)
+        return 0;
+
+    ASSERT(m_maxTextureSize - 2 * m_borderTexels);
     int y = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels);
     return min(max(y, 0), numTilesY() - 1);
 }

Modified: trunk/Source/WebKit/chromium/ChangeLog (87093 => 87094)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-05-23 20:21:35 UTC (rev 87093)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-05-23 20:40:23 UTC (rev 87094)
@@ -1,3 +1,15 @@
+2011-05-23  Adrienne Walker  <[email protected]>
+
+        Reviewed by James Robinson.
+
+        [chromium] Fix division by zero in TilingData for boundary case texture sizes
+        https://bugs.webkit.org/show_bug.cgi?id=61164
+
+        Add additional tests for small max texture sizes.
+
+        * tests/TilingDataTest.cpp:
+        (WebCore::TEST):
+
 2011-05-23  Ruben  <[email protected]>
 
         Reviewed by Tony Chang.

Modified: trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp (87093 => 87094)


--- trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp	2011-05-23 20:21:35 UTC (rev 87093)
+++ trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp	2011-05-23 20:40:23 UTC (rev 87094)
@@ -177,6 +177,30 @@
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(9));
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(10));
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TilingData(1, 1, 1, false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(3));
+
+    EXPECT_EQ(0, TilingData(1, 1, 1, true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(3));
 }
 TEST(TilingDataTest, tileYIndexFromSrcCoord)
 {
@@ -205,6 +229,30 @@
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(9));
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(10));
     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(11));
+
+    EXPECT_EQ(0, TilingData(1, 1, 1, false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(3));
+
+    EXPECT_EQ(0, TilingData(1, 1, 1, true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(2, 2, 2, true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(2));
+
+    EXPECT_EQ(0, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(0));
+    EXPECT_EQ(0, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(1));
+    EXPECT_EQ(1, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(2));
+    EXPECT_EQ(1, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(3));
 }
 
 TEST(TilingDataTest, tileSizeX)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to