jdk/src/share/native/sun/java2d/loops/DrawParallelogram.c
author flar
Mon, 06 Dec 2010 21:45:48 -0800
changeset 7487 9b031d062ede
child 7668 d4a77089c587
child 7745 ebd6382e93fd
permissions -rw-r--r--
6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines Reviewed-by: jgodinez, prr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7487
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     1
/*
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     2
 * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     4
 *
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    10
 *
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    15
 * accompanied this code).
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    16
 *
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    20
 *
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    23
 * questions.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    24
 */
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    25
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    26
#include "math.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    27
#include "GraphicsPrimitiveMgr.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    28
#include "LineUtils.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    29
#include "LoopMacros.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    30
#include "Trace.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    31
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    32
#include "sun_java2d_loops_FillParallelogram.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    33
#include "sun_java2d_loops_DrawParallelogram.h"
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    34
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    35
DECLARE_SOLID_DRAWLINE(AnyInt);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    36
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    37
#define HANDLE_PGRAM_EDGE(X1, Y1, X2, Y2, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    38
                          pRasInfo, pixel, pPrim, pFunc, pCompInfo) \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    39
    do { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    40
         jint ix1 = (jint) floor(X1); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    41
         jint ix2 = (jint) floor(X2); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    42
         jint iy1 = (jint) floor(Y1); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    43
         jint iy2 = (jint) floor(Y2); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    44
         LineUtils_ProcessLine(pRasInfo, pixel, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    45
                               pFunc, pPrim, pCompInfo, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    46
                               ix1, iy1, ix2, iy2, JNI_TRUE); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    47
    } while (0)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    48
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    49
#define PGRAM_MIN_MAX(bmin, bmax, v0, dv1, dv2) \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    50
    do { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    51
        double vmin, vmax; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    52
        if (dv1 < 0) { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    53
            vmin = v0+dv1; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    54
            vmax = v0; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    55
        } else { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    56
            vmin = v0; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    57
            vmax = v0+dv1; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    58
        } \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    59
        if (dv2 < 0) { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    60
            vmin -= dv2; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    61
        } else { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    62
            vmax += dv2; \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    63
        } \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    64
        bmin = (jint) floor(vmin + 0.5); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    65
        bmax = (jint) floor(vmax + 0.5); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    66
    } while(0)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    67
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    68
#define PGRAM_INIT_X(starty, x, y, slope) \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    69
    (DblToLong((x) + (slope) * ((starty)+0.5 - (y))) + LongOneHalf - 1)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    70
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    71
typedef struct {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    72
    jdouble x0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    73
    jdouble y0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    74
    jdouble y1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    75
    jdouble slope;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    76
    jlong dx;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    77
    jint ystart;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    78
    jint yend;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    79
} EdgeInfo;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    80
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    81
#define STORE_EDGE(pEDGE, X0, Y0, Y1, SLOPE, DELTAX) \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    82
    do { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    83
        (pEDGE)->x0 = (X0); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    84
        (pEDGE)->y0 = (Y0); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    85
        (pEDGE)->y1 = (Y1); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    86
        (pEDGE)->slope = (SLOPE); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    87
        (pEDGE)->dx = (DELTAX); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    88
        (pEDGE)->ystart = (jint) floor((Y0) + 0.5); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    89
        (pEDGE)->yend   = (jint) floor((Y1) + 0.5); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    90
    } while (0)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    91
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    92
#define STORE_PGRAM(pLTEDGE, pRTEDGE, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    93
                    X0, Y0, dX1, dY1, dX2, dY2, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    94
                    SLOPE1, SLOPE2, DELTAX1, DELTAX2) \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    95
    do { \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    96
        STORE_EDGE((pLTEDGE)+0, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    97
                   (X0), (Y0), (Y0) + (dY1), \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    98
                   (SLOPE1), (DELTAX1)); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
    99
        STORE_EDGE((pRTEDGE)+0, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   100
                   (X0), (Y0), (Y0) + (dY2), \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   101
                   (SLOPE2), (DELTAX2)); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   102
        STORE_EDGE((pLTEDGE)+1, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   103
                   (X0) + (dX1), (Y0) + (dY1), (Y0) + (dY1) + (dY2), \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   104
                   (SLOPE2), (DELTAX2)); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   105
        STORE_EDGE((pRTEDGE)+1, \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   106
                   (X0) + (dX2), (Y0) + (dY2), (Y0) + (dY1) + (dY2), \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   107
                   (SLOPE1), (DELTAX1)); \
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   108
    } while (0)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   109
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   110
/*
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   111
 * Class:     sun_java2d_loops_DrawParallelogram
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   112
 * Method:    DrawParallelogram
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   113
 * Signature: (Lsun/java2d/SunGraphics2D;Lsun/java2d/SurfaceData;DDDDDDDD)V
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   114
 */
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   115
JNIEXPORT void JNICALL
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   116
Java_sun_java2d_loops_DrawParallelogram_DrawParallelogram
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   117
    (JNIEnv *env, jobject self,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   118
     jobject sg2d, jobject sData,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   119
     jdouble x0, jdouble y0,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   120
     jdouble dx1, jdouble dy1,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   121
     jdouble dx2, jdouble dy2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   122
     jdouble lw1, jdouble lw2)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   123
{
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   124
    SurfaceDataOps *sdOps;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   125
    SurfaceDataRasInfo rasInfo;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   126
    NativePrimitive *pPrim;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   127
    CompositeInfo compInfo;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   128
    jint pixel;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   129
    EdgeInfo edges[8];
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   130
    EdgeInfo *active[4];
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   131
    jint ix1, iy1, ix2, iy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   132
    jdouble ldx1, ldy1, ldx2, ldy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   133
    jdouble ox0, oy0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   134
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   135
    /*
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   136
     * Sort parallelogram by y values, ensure that each delta vector
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   137
     * has a non-negative y delta.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   138
     */
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   139
    if (dy1 < 0) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   140
        x0 += dx1;  y0 += dy1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   141
        dx1 = -dx1; dy1 = -dy1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   142
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   143
    if (dy2 < 0) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   144
        x0 += dx2;  y0 += dy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   145
        dx2 = -dx2; dy2 = -dy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   146
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   147
    /* Sort delta vectors so dxy1 is left of dxy2. */
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   148
    if (dx1 * dy2 > dx2 * dy1) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   149
        double v = dx1; dx1 = dx2; dx2 = v;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   150
               v = dy1; dy1 = dy2; dy2 = v;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   151
               v = lw1; lw1 = lw2; lw2 = v;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   152
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   153
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   154
    // dx,dy for line width in the "1" and "2" directions.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   155
    ldx1 = dx1 * lw1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   156
    ldy1 = dy1 * lw1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   157
    ldx2 = dx2 * lw2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   158
    ldy2 = dy2 * lw2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   159
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   160
    // calculate origin of the outer parallelogram
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   161
    ox0 = x0 - (ldx1 + ldx2) / 2.0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   162
    oy0 = y0 - (ldy1 + ldy2) / 2.0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   163
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   164
    PGRAM_MIN_MAX(ix1, ix2, ox0, dx1+ldx1, dx2+ldx2);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   165
    iy1 = (jint) floor(oy0 + 0.5);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   166
    iy2 = (jint) floor(oy0 + dy1 + ldy1 + dy2 + ldy2 + 0.5);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   167
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   168
    pPrim = GetNativePrim(env, self);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   169
    if (pPrim == NULL) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   170
        return;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   171
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   172
    pixel = GrPrim_Sg2dGetPixel(env, sg2d);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   173
    if (pPrim->pCompType->getCompInfo != NULL) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   174
        GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   175
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   176
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   177
    sdOps = SurfaceData_GetOps(env, sData);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   178
    if (sdOps == NULL) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   179
        return;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   180
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   181
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   182
    GrPrim_Sg2dGetClip(env, sg2d, &rasInfo.bounds);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   183
    SurfaceData_IntersectBoundsXYXY(&rasInfo.bounds, ix1, iy1, ix2, iy2);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   184
    if (rasInfo.bounds.y2 <= rasInfo.bounds.y1 ||
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   185
        rasInfo.bounds.x2 <= rasInfo.bounds.x1)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   186
    {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   187
        return;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   188
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   189
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   190
    if (sdOps->Lock(env, sdOps, &rasInfo, pPrim->dstflags) != SD_SUCCESS) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   191
        return;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   192
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   193
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   194
    ix1 = rasInfo.bounds.x1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   195
    iy1 = rasInfo.bounds.y1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   196
    ix2 = rasInfo.bounds.x2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   197
    iy2 = rasInfo.bounds.y2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   198
    if (ix2 > ix1 && iy2 > iy1) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   199
        sdOps->GetRasInfo(env, sdOps, &rasInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   200
        if (rasInfo.rasBase) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   201
            jdouble lslope, rslope;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   202
            jlong ldx, rdx;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   203
            jint loy, hiy, numedges;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   204
            FillParallelogramFunc *pFill =
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   205
                pPrim->funcs.drawparallelogram->fillpgram;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   206
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   207
            lslope = (dy1 == 0) ? 0 : dx1 / dy1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   208
            rslope = (dy2 == 0) ? 0 : dx2 / dy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   209
            ldx = DblToLong(lslope);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   210
            rdx = DblToLong(rslope);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   211
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   212
            // Only need to generate 4 quads if the interior still
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   213
            // has a hole in it (i.e. if the line width ratios were
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   214
            // both less than 1.0)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   215
            if (lw1 < 1.0f && lw2 < 1.0f) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   216
                // If the line widths are both less than a pixel wide
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   217
                // then we can use a drawline function instead for even
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   218
                // more performance.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   219
                lw1 = sqrt(ldx1*ldx1 + ldy1*ldy1);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   220
                lw2 = sqrt(ldx2*ldx2 + ldy2*ldy2);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   221
                if (lw1 <= 1.0001 && lw2 <= 1.0001) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   222
                    jdouble x3, y3;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   223
                    DrawLineFunc *pLine =
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   224
                        pPrim->funcs.drawparallelogram->drawline;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   225
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   226
                    x3 = (dx1 += x0);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   227
                    y3 = (dy1 += y0);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   228
                    x3 += dx2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   229
                    y3 += dy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   230
                    dx2 += x0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   231
                    dy2 += y0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   232
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   233
                    HANDLE_PGRAM_EDGE( x0,  y0, dx1, dy1,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   234
                                      &rasInfo, pixel, pPrim, pLine, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   235
                    HANDLE_PGRAM_EDGE(dx1, dy1,  x3,  y3,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   236
                                      &rasInfo, pixel, pPrim, pLine, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   237
                    HANDLE_PGRAM_EDGE( x3,  y3, dx2, dy2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   238
                                      &rasInfo, pixel, pPrim, pLine, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   239
                    HANDLE_PGRAM_EDGE(dx2, dy2,  x0,  y0,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   240
                                      &rasInfo, pixel, pPrim, pLine, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   241
                    SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   242
                    SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   243
                    return;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   244
                }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   245
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   246
                // To simplify the edge management below we presort the
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   247
                // inner and outer edges so that they are globally sorted
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   248
                // from left to right.  If you scan across the array of
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   249
                // edges for a given Y range then the edges you encounter
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   250
                // will be sorted in X as well.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   251
                // If AB are left top and bottom edges of outer parallelogram,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   252
                // and CD are the right pair of edges, and abcd are the
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   253
                // corresponding inner parallelogram edges then we want them
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   254
                // sorted as ABabcdCD to ensure this horizontal ordering.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   255
                // Conceptually it is like 2 pairs of nested parentheses.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   256
                STORE_PGRAM(edges + 2, edges + 4,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   257
                            ox0 + ldx1 + ldx2, oy0 + ldy1 + ldy2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   258
                            dx1 - ldx1, dy1 - ldy1,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   259
                            dx2 - ldx2, dy2 - ldy2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   260
                            lslope, rslope, ldx, rdx);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   261
                numedges = 8;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   262
            } else {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   263
                // The line width ratios were large enough to consume
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   264
                // the entire hole in the middle of the parallelogram
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   265
                // so we can just issue one large quad for the outer
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   266
                // parallelogram.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   267
                numedges = 4;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   268
            }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   269
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   270
            // The outer parallelogram always goes in the first two
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   271
            // and last two entries in the array so we either have
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   272
            // ABabcdCD ordering for 8 edges or ABCD ordering for 4
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   273
            // edges.  See comment above where we store the inner
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   274
            // parallelogram for a more complete description.
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   275
            STORE_PGRAM(edges + 0, edges + numedges-2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   276
                        ox0, oy0,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   277
                        dx1 + ldx1, dy1 + ldy1,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   278
                        dx2 + ldx2, dy2 + ldy2,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   279
                        lslope, rslope, ldx, rdx);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   280
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   281
            loy = edges[0].ystart;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   282
            if (loy < iy1) loy = iy1;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   283
            while (loy < iy2) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   284
                jint numactive = 0;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   285
                jint cur;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   286
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   287
                hiy = iy2;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   288
                // Maintaining a sorted edge list is probably overkill for
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   289
                // 4 or 8 edges.  The indices chosen above for storing the
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   290
                // inner and outer left and right edges already guarantee
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   291
                // left to right ordering so we just need to scan for edges
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   292
                // that overlap the current Y range (and also determine the
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   293
                // maximum Y value for which the range is valid).
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   294
                for (cur = 0; cur < numedges; cur++) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   295
                    EdgeInfo *pEdge = &edges[cur];
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   296
                    jint yend = pEdge->yend;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   297
                    if (loy < yend) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   298
                        // This edge is still in play, have we reached it yet?
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   299
                        jint ystart = pEdge->ystart;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   300
                        if (loy < ystart) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   301
                            // This edge is not active (yet)
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   302
                            // Stop before we get to the top of it
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   303
                            if (hiy > ystart) hiy = ystart;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   304
                        } else {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   305
                            // This edge is active, store it
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   306
                            active[numactive++] = pEdge;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   307
                            // And stop when we get to the bottom of it
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   308
                            if (hiy > yend) hiy = yend;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   309
                        }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   310
                    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   311
                }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   312
#ifdef DEBUG
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   313
                if ((numactive & 1) != 0) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   314
                    J2dTraceLn1(J2D_TRACE_ERROR,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   315
                                "DrawParallelogram: "
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   316
                                "ODD NUMBER OF PGRAM EDGES (%d)!!",
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   317
                                numactive);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   318
                }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   319
#endif
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   320
                for (cur = 0; cur < numactive; cur += 2) {
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   321
                    EdgeInfo *pLeft  = active[cur+0];
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   322
                    EdgeInfo *pRight = active[cur+1];
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   323
                    jlong lx = PGRAM_INIT_X(loy,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   324
                                            pLeft->x0, pLeft->y0,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   325
                                            pLeft->slope);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   326
                    jlong rx = PGRAM_INIT_X(loy,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   327
                                            pRight->x0, pRight->y0,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   328
                                            pRight->slope);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   329
                    (*pFill)(&rasInfo,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   330
                             ix1, loy, ix2, hiy,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   331
                             lx, pLeft->dx,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   332
                             rx, pRight->dx,
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   333
                             pixel, pPrim, &compInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   334
                }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   335
                loy = hiy;
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   336
            }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   337
        }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   338
        SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   339
    }
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   340
    SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
9b031d062ede 6775317: Improve performance of non-AA transformed rectangles and single wide lines in software pipelines
flar
parents:
diff changeset
   341
}