gfx/angle/src/libGLESv2/renderer/Image.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 #include "precompiled.h"
     2 //
     3 // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
     4 // Use of this source code is governed by a BSD-style license that can be
     5 // found in the LICENSE file.
     6 //
     8 // Image.h: Implements the rx::Image class, an abstract base class for the 
     9 // renderer-specific classes which will define the interface to the underlying
    10 // surfaces or resources.
    12 #include "libGLESv2/renderer/Image.h"
    14 namespace rx
    15 {
    17 Image::Image()
    18 {
    19     mWidth = 0; 
    20     mHeight = 0;
    21     mInternalFormat = GL_NONE;
    22     mActualFormat = GL_NONE;
    23 }
    25 void Image::loadAlphaDataToBGRA(GLsizei width, GLsizei height,
    26                                 int inputPitch, const void *input, size_t outputPitch, void *output)
    27 {
    28     const unsigned char *source = NULL;
    29     unsigned char *dest = NULL;
    31     for (int y = 0; y < height; y++)
    32     {
    33         source = static_cast<const unsigned char*>(input) + y * inputPitch;
    34         dest = static_cast<unsigned char*>(output) + y * outputPitch;
    35         for (int x = 0; x < width; x++)
    36         {
    37             dest[4 * x + 0] = 0;
    38             dest[4 * x + 1] = 0;
    39             dest[4 * x + 2] = 0;
    40             dest[4 * x + 3] = source[x];
    41         }
    42     }
    43 }
    45 void Image::loadAlphaDataToNative(GLsizei width, GLsizei height,
    46                                   int inputPitch, const void *input, size_t outputPitch, void *output)
    47 {
    48     const unsigned char *source = NULL;
    49     unsigned char *dest = NULL;
    51     for (int y = 0; y < height; y++)
    52     {
    53         source = static_cast<const unsigned char*>(input) + y * inputPitch;
    54         dest = static_cast<unsigned char*>(output) + y * outputPitch;
    55         memcpy(dest, source, width);
    56     }
    57 }
    59 void Image::loadAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
    60                                      int inputPitch, const void *input, size_t outputPitch, void *output)
    61 {
    62     const float *source = NULL;
    63     float *dest = NULL;
    65     for (int y = 0; y < height; y++)
    66     {
    67         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
    68         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
    69         for (int x = 0; x < width; x++)
    70         {
    71             dest[4 * x + 0] = 0;
    72             dest[4 * x + 1] = 0;
    73             dest[4 * x + 2] = 0;
    74             dest[4 * x + 3] = source[x];
    75         }
    76     }
    77 }
    79 void Image::loadAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
    80                                          int inputPitch, const void *input, size_t outputPitch, void *output)
    81 {
    82     const unsigned short *source = NULL;
    83     unsigned short *dest = NULL;
    85     for (int y = 0; y < height; y++)
    86     {
    87         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
    88         dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
    89         for (int x = 0; x < width; x++)
    90         {
    91             dest[4 * x + 0] = 0;
    92             dest[4 * x + 1] = 0;
    93             dest[4 * x + 2] = 0;
    94             dest[4 * x + 3] = source[x];
    95         }
    96     }
    97 }
    99 void Image::loadLuminanceDataToNativeOrBGRA(GLsizei width, GLsizei height,
   100                                             int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
   101 {
   102     const unsigned char *source = NULL;
   103     unsigned char *dest = NULL;
   105     for (int y = 0; y < height; y++)
   106     {
   107         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   108         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   110         if (!native)   // BGRA8 destination format
   111         {
   112             for (int x = 0; x < width; x++)
   113             {
   114                 dest[4 * x + 0] = source[x];
   115                 dest[4 * x + 1] = source[x];
   116                 dest[4 * x + 2] = source[x];
   117                 dest[4 * x + 3] = 0xFF;
   118             }
   119         }
   120         else   // L8 destination format
   121         {
   122             memcpy(dest, source, width);
   123         }
   124     }
   125 }
   127 void Image::loadLuminanceFloatDataToRGBA(GLsizei width, GLsizei height,
   128                                          int inputPitch, const void *input, size_t outputPitch, void *output)
   129 {
   130     const float *source = NULL;
   131     float *dest = NULL;
   133     for (int y = 0; y < height; y++)
   134     {
   135         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   136         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   137         for (int x = 0; x < width; x++)
   138         {
   139             dest[4 * x + 0] = source[x];
   140             dest[4 * x + 1] = source[x];
   141             dest[4 * x + 2] = source[x];
   142             dest[4 * x + 3] = 1.0f;
   143         }
   144     }
   145 }
   147 void Image::loadLuminanceFloatDataToRGB(GLsizei width, GLsizei height,
   148                                         int inputPitch, const void *input, size_t outputPitch, void *output)
   149 {
   150     const float *source = NULL;
   151     float *dest = NULL;
   153     for (int y = 0; y < height; y++)
   154     {
   155         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   156         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   157         for (int x = 0; x < width; x++)
   158         {
   159             dest[3 * x + 0] = source[x];
   160             dest[3 * x + 1] = source[x];
   161             dest[3 * x + 2] = source[x];
   162         }
   163     }
   164 }
   166 void Image::loadLuminanceHalfFloatDataToRGBA(GLsizei width, GLsizei height,
   167                                              int inputPitch, const void *input, size_t outputPitch, void *output)
   168 {
   169     const unsigned short *source = NULL;
   170     unsigned short *dest = NULL;
   172     for (int y = 0; y < height; y++)
   173     {
   174         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   175         dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
   176         for (int x = 0; x < width; x++)
   177         {
   178             dest[4 * x + 0] = source[x];
   179             dest[4 * x + 1] = source[x];
   180             dest[4 * x + 2] = source[x];
   181             dest[4 * x + 3] = 0x3C00; // SEEEEEMMMMMMMMMM, S = 0, E = 15, M = 0: 16bit flpt representation of 1
   182         }
   183     }
   184 }
   186 void Image::loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width, GLsizei height,
   187                                                  int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
   188 {
   189     const unsigned char *source = NULL;
   190     unsigned char *dest = NULL;
   192     for (int y = 0; y < height; y++)
   193     {
   194         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   195         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   197         if (!native)   // BGRA8 destination format
   198         {
   199             for (int x = 0; x < width; x++)
   200             {
   201                 dest[4 * x + 0] = source[2*x+0];
   202                 dest[4 * x + 1] = source[2*x+0];
   203                 dest[4 * x + 2] = source[2*x+0];
   204                 dest[4 * x + 3] = source[2*x+1];
   205             }
   206         }
   207         else
   208         {
   209             memcpy(dest, source, width * 2);
   210         }
   211     }
   212 }
   214 void Image::loadLuminanceAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
   215                                               int inputPitch, const void *input, size_t outputPitch, void *output)
   216 {
   217     const float *source = NULL;
   218     float *dest = NULL;
   220     for (int y = 0; y < height; y++)
   221     {
   222         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   223         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   224         for (int x = 0; x < width; x++)
   225         {
   226             dest[4 * x + 0] = source[2*x+0];
   227             dest[4 * x + 1] = source[2*x+0];
   228             dest[4 * x + 2] = source[2*x+0];
   229             dest[4 * x + 3] = source[2*x+1];
   230         }
   231     }
   232 }
   234 void Image::loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
   235                                                   int inputPitch, const void *input, size_t outputPitch, void *output)
   236 {
   237     const unsigned short *source = NULL;
   238     unsigned short *dest = NULL;
   240     for (int y = 0; y < height; y++)
   241     {
   242         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   243         dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
   244         for (int x = 0; x < width; x++)
   245         {
   246             dest[4 * x + 0] = source[2*x+0];
   247             dest[4 * x + 1] = source[2*x+0];
   248             dest[4 * x + 2] = source[2*x+0];
   249             dest[4 * x + 3] = source[2*x+1];
   250         }
   251     }
   252 }
   254 void Image::loadRGBUByteDataToBGRX(GLsizei width, GLsizei height,
   255                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   256 {
   257     const unsigned char *source = NULL;
   258     unsigned char *dest = NULL;
   260     for (int y = 0; y < height; y++)
   261     {
   262         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   263         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   264         for (int x = 0; x < width; x++)
   265         {
   266             dest[4 * x + 0] = source[x * 3 + 2];
   267             dest[4 * x + 1] = source[x * 3 + 1];
   268             dest[4 * x + 2] = source[x * 3 + 0];
   269             dest[4 * x + 3] = 0xFF;
   270         }
   271     }
   272 }
   274 void Image::loadRGBUByteDataToRGBA(GLsizei width, GLsizei height,
   275                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   276 {
   277     const unsigned char *source = NULL;
   278     unsigned char *dest = NULL;
   280     for (int y = 0; y < height; y++)
   281     {
   282         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   283         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   284         for (int x = 0; x < width; x++)
   285         {
   286             dest[4 * x + 0] = source[x * 3 + 0];
   287             dest[4 * x + 1] = source[x * 3 + 1];
   288             dest[4 * x + 2] = source[x * 3 + 2];
   289             dest[4 * x + 3] = 0xFF;
   290         }
   291     }
   292 }
   294 void Image::loadRGB565DataToBGRA(GLsizei width, GLsizei height,
   295                                  int inputPitch, const void *input, size_t outputPitch, void *output)
   296 {
   297     const unsigned short *source = NULL;
   298     unsigned char *dest = NULL;
   300     for (int y = 0; y < height; y++)
   301     {
   302         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   303         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   304         for (int x = 0; x < width; x++)
   305         {
   306             unsigned short rgba = source[x];
   307             dest[4 * x + 0] = ((rgba & 0x001F) << 3) | ((rgba & 0x001F) >> 2);
   308             dest[4 * x + 1] = ((rgba & 0x07E0) >> 3) | ((rgba & 0x07E0) >> 9);
   309             dest[4 * x + 2] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
   310             dest[4 * x + 3] = 0xFF;
   311         }
   312     }
   313 }
   315 void Image::loadRGB565DataToRGBA(GLsizei width, GLsizei height,
   316                                  int inputPitch, const void *input, size_t outputPitch, void *output)
   317 {
   318     const unsigned short *source = NULL;
   319     unsigned char *dest = NULL;
   321     for (int y = 0; y < height; y++)
   322     {
   323         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   324         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   325         for (int x = 0; x < width; x++)
   326         {
   327             unsigned short rgba = source[x];
   328             dest[4 * x + 0] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
   329             dest[4 * x + 1] = ((rgba & 0x07E0) >> 3) | ((rgba & 0x07E0) >> 9);
   330             dest[4 * x + 2] = ((rgba & 0x001F) << 3) | ((rgba & 0x001F) >> 2);
   331             dest[4 * x + 3] = 0xFF;
   332         }
   333     }
   334 }
   336 void Image::loadRGBFloatDataToRGBA(GLsizei width, GLsizei height,
   337                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   338 {
   339     const float *source = NULL;
   340     float *dest = NULL;
   342     for (int y = 0; y < height; y++)
   343     {
   344         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   345         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   346         for (int x = 0; x < width; x++)
   347         {
   348             dest[4 * x + 0] = source[x * 3 + 0];
   349             dest[4 * x + 1] = source[x * 3 + 1];
   350             dest[4 * x + 2] = source[x * 3 + 2];
   351             dest[4 * x + 3] = 1.0f;
   352         }
   353     }
   354 }
   356 void Image::loadRGBFloatDataToNative(GLsizei width, GLsizei height,
   357                                      int inputPitch, const void *input, size_t outputPitch, void *output)
   358 {
   359     const float *source = NULL;
   360     float *dest = NULL;
   362     for (int y = 0; y < height; y++)
   363     {
   364         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   365         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   366         memcpy(dest, source, width * 12);
   367     }
   368 }
   370 void Image::loadRGBHalfFloatDataToRGBA(GLsizei width, GLsizei height,
   371                                        int inputPitch, const void *input, size_t outputPitch, void *output)
   372 {
   373     const unsigned short *source = NULL;
   374     unsigned short *dest = NULL;
   376     for (int y = 0; y < height; y++)
   377     {
   378         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   379         dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
   380         for (int x = 0; x < width; x++)
   381         {
   382             dest[4 * x + 0] = source[x * 3 + 0];
   383             dest[4 * x + 1] = source[x * 3 + 1];
   384             dest[4 * x + 2] = source[x * 3 + 2];
   385             dest[4 * x + 3] = 0x3C00; // SEEEEEMMMMMMMMMM, S = 0, E = 15, M = 0: 16bit flpt representation of 1
   386         }
   387     }
   388 }
   390 void Image::loadRGBAUByteDataToBGRA(GLsizei width, GLsizei height,
   391                                     int inputPitch, const void *input, size_t outputPitch, void *output)
   392 {
   393     const unsigned int *source = NULL;
   394     unsigned int *dest = NULL;
   395     for (int y = 0; y < height; y++)
   396     {
   397         source = reinterpret_cast<const unsigned int*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   398         dest = reinterpret_cast<unsigned int*>(static_cast<unsigned char*>(output) + y * outputPitch);
   400         for (int x = 0; x < width; x++)
   401         {
   402             unsigned int rgba = source[x];
   403             dest[x] = (_rotl(rgba, 16) & 0x00ff00ff) | (rgba & 0xff00ff00);
   404         }
   405     }
   406 }
   408 void Image::loadRGBAUByteDataToNative(GLsizei width, GLsizei height,
   409                                       int inputPitch, const void *input, size_t outputPitch, void *output)
   410 {
   411     const unsigned int *source = NULL;
   412     unsigned int *dest = NULL;
   413     for (int y = 0; y < height; y++)
   414     {
   415         source = reinterpret_cast<const unsigned int*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   416         dest = reinterpret_cast<unsigned int*>(static_cast<unsigned char*>(output) + y * outputPitch);
   418         memcpy(dest, source, width * 4);
   419     }
   420 }
   422 void Image::loadRGBA4444DataToBGRA(GLsizei width, GLsizei height,
   423                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   424 {
   425     const unsigned short *source = NULL;
   426     unsigned char *dest = NULL;
   428     for (int y = 0; y < height; y++)
   429     {
   430         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   431         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   432         for (int x = 0; x < width; x++)
   433         {
   434             unsigned short rgba = source[x];
   435             dest[4 * x + 0] = ((rgba & 0x00F0) << 0) | ((rgba & 0x00F0) >> 4);
   436             dest[4 * x + 1] = ((rgba & 0x0F00) >> 4) | ((rgba & 0x0F00) >> 8);
   437             dest[4 * x + 2] = ((rgba & 0xF000) >> 8) | ((rgba & 0xF000) >> 12);
   438             dest[4 * x + 3] = ((rgba & 0x000F) << 4) | ((rgba & 0x000F) >> 0);
   439         }
   440     }
   441 }
   443 void Image::loadRGBA4444DataToRGBA(GLsizei width, GLsizei height,
   444                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   445 {
   446     const unsigned short *source = NULL;
   447     unsigned char *dest = NULL;
   449     for (int y = 0; y < height; y++)
   450     {
   451         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   452         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   453         for (int x = 0; x < width; x++)
   454         {
   455             unsigned short rgba = source[x];
   456             dest[4 * x + 0] = ((rgba & 0xF000) >> 8) | ((rgba & 0xF000) >> 12);
   457             dest[4 * x + 1] = ((rgba & 0x0F00) >> 4) | ((rgba & 0x0F00) >> 8);
   458             dest[4 * x + 2] = ((rgba & 0x00F0) << 0) | ((rgba & 0x00F0) >> 4);
   459             dest[4 * x + 3] = ((rgba & 0x000F) << 4) | ((rgba & 0x000F) >> 0);
   460         }
   461     }
   462 }
   464 void Image::loadRGBA5551DataToBGRA(GLsizei width, GLsizei height,
   465                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   466 {
   467     const unsigned short *source = NULL;
   468     unsigned char *dest = NULL;
   470     for (int y = 0; y < height; y++)
   471     {
   472         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   473         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   474         for (int x = 0; x < width; x++)
   475         {
   476             unsigned short rgba = source[x];
   477             dest[4 * x + 0] = ((rgba & 0x003E) << 2) | ((rgba & 0x003E) >> 3);
   478             dest[4 * x + 1] = ((rgba & 0x07C0) >> 3) | ((rgba & 0x07C0) >> 8);
   479             dest[4 * x + 2] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
   480             dest[4 * x + 3] = (rgba & 0x0001) ? 0xFF : 0;
   481         }
   482     }
   483 }
   485 void Image::loadRGBA5551DataToRGBA(GLsizei width, GLsizei height,
   486                                    int inputPitch, const void *input, size_t outputPitch, void *output)
   487 {
   488     const unsigned short *source = NULL;
   489     unsigned char *dest = NULL;
   491     for (int y = 0; y < height; y++)
   492     {
   493         source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   494         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   495         for (int x = 0; x < width; x++)
   496         {
   497             unsigned short rgba = source[x];
   498             dest[4 * x + 0] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
   499             dest[4 * x + 1] = ((rgba & 0x07C0) >> 3) | ((rgba & 0x07C0) >> 8);
   500             dest[4 * x + 2] = ((rgba & 0x003E) << 2) | ((rgba & 0x003E) >> 3);
   501             dest[4 * x + 3] = (rgba & 0x0001) ? 0xFF : 0;
   502         }
   503     }
   504 }
   506 void Image::loadRGBAFloatDataToRGBA(GLsizei width, GLsizei height,
   507                                     int inputPitch, const void *input, size_t outputPitch, void *output)
   508 {
   509     const float *source = NULL;
   510     float *dest = NULL;
   512     for (int y = 0; y < height; y++)
   513     {
   514         source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
   515         dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
   516         memcpy(dest, source, width * 16);
   517     }
   518 }
   520 void Image::loadRGBAHalfFloatDataToRGBA(GLsizei width, GLsizei height,
   521                                         int inputPitch, const void *input, size_t outputPitch, void *output)
   522 {
   523     const unsigned char *source = NULL;
   524     unsigned char *dest = NULL;
   526     for (int y = 0; y < height; y++)
   527     {
   528         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   529         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   530         memcpy(dest, source, width * 8);
   531     }
   532 }
   534 void Image::loadBGRADataToBGRA(GLsizei width, GLsizei height,
   535                                int inputPitch, const void *input, size_t outputPitch, void *output)
   536 {
   537     const unsigned char *source = NULL;
   538     unsigned char *dest = NULL;
   540     for (int y = 0; y < height; y++)
   541     {
   542         source = static_cast<const unsigned char*>(input) + y * inputPitch;
   543         dest = static_cast<unsigned char*>(output) + y * outputPitch;
   544         memcpy(dest, source, width*4);
   545     }
   546 }
   548 }

mercurial