/* * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ #ifndef Java2d_Mlib_h_Included #define Java2d_Mlib_h_Included #include #include "mlib_ImageCopy.h" #include "AnyByte.h" #include "Any3Byte.h" #include "Any4Byte.h" #include "AnyShort.h" #include "AnyInt.h" #include "IntArgb.h" #include "IntArgbBm.h" #include "IntRgb.h" #include "ByteGray.h" #include "ByteIndexed.h" #include "Index8Gray.h" #include "Index12Gray.h" /***************************************************************/ #ifdef MLIB_ADD_SUFF #define ADD_SUFF(x) x##_F #else #define ADD_SUFF(x) x #endif /***************************************************************/ #define MLIB_AnyByte MLIB_BYTE #define MLIB_Any3Byte MLIB_BYTE #define MLIB_Any4Byte MLIB_BYTE #define MLIB_AnyShort MLIB_SHORT #define MLIB_AnyInt MLIB_INT /***************************************************************/ #define NCHAN_AnyByte 1 #define NCHAN_Any3Byte 3 #define NCHAN_Any4Byte 4 #define NCHAN_AnyShort 1 #define NCHAN_AnyInt 1 /***************************************************************/ #define BLIT_PARAMS \ void *srcBase, void *dstBase, \ juint width, juint height, \ SurfaceDataRasInfo *pSrcInfo, \ SurfaceDataRasInfo *pDstInfo, \ NativePrimitive *pPrim, \ CompositeInfo *pCompInfo #define BLIT_CALL_PARAMS \ srcBase, dstBase, width, height, \ pSrcInfo, pDstInfo, pPrim, pCompInfo /***************************************************************/ #define SCALE_PARAMS \ void *srcBase, void *dstBase, \ juint width, juint height, \ jint sxloc, jint syloc, \ jint sxinc, jint syinc, jint shift, \ SurfaceDataRasInfo * pSrcInfo, \ SurfaceDataRasInfo * pDstInfo, \ NativePrimitive * pPrim, \ CompositeInfo * pCompInfo #define SCALE_CALL_PARAMS \ srcBase, dstBase, width, height, \ sxloc, syloc, sxinc, syinc, shift, \ pSrcInfo, pDstInfo, pPrim, pCompInfo /***************************************************************/ #define BCOPY_PARAMS \ void *srcBase, void *dstBase, \ juint width, juint height, \ jint bgpixel, \ SurfaceDataRasInfo * pSrcInfo, \ SurfaceDataRasInfo * pDstInfo, \ NativePrimitive * pPrim, \ CompositeInfo * pCompInfo #define BCOPY_CALL_PARAMS \ srcBase, dstBase, width, height, \ bgpixel, \ pSrcInfo, pDstInfo, pPrim, pCompInfo /***************************************************************/ #define MASKBLIT_PARAMS \ void *dstBase, \ void *srcBase, \ jubyte *pMask, \ jint maskOff, \ jint maskScan, \ jint width, \ jint height, \ SurfaceDataRasInfo *pDstInfo, \ SurfaceDataRasInfo *pSrcInfo, \ NativePrimitive *pPrim, \ CompositeInfo *pCompInfo #define MASKBLIT_CALL_PARAMS \ dstBase, srcBase, pMask, \ maskOff, maskScan, width, height, \ pSrcInfo, pDstInfo, pPrim, pCompInfo /***************************************************************/ #define GLYPH_LIST_PARAMS \ SurfaceDataRasInfo * pRasInfo, \ ImageRef *glyphs, \ jint totalGlyphs, \ jint fgpixel, jint argbcolor, \ jint clipLeft, jint clipTop, \ jint clipRight, jint clipBottom, \ NativePrimitive * pPrim, \ CompositeInfo * pCompInfo /***************************************************************/ #define MLIB_IMAGE_SET(image, data_type, nchan, w, h, scan, data_ptr) \ image->type = data_type; \ image->channels = nchan; \ image->width = w; \ image->height = h; \ image->stride = scan; \ image->data = (void*)(data_ptr) /***************************************************************/ #define PTR_ADD(ptr, scan) \ ptr = (void*)((mlib_u8*)(ptr) + (scan)) /***************************************************************/ #define EXTRACT_CONST_1(pixel) \ mlib_s32 pixel##0 = pixel #define EXTRACT_CONST_3(pixel) \ mlib_s32 pixel##0 = pixel; \ mlib_s32 pixel##1 = pixel >> 8; \ mlib_s32 pixel##2 = pixel >> 16 #define EXTRACT_CONST_4(pixel) \ mlib_s32 pixel##0 = pixel; \ mlib_s32 pixel##1 = pixel >> 8; \ mlib_s32 pixel##2 = pixel >> 16; \ mlib_s32 pixel##3 = pixel >> 24 /***************************************************************/ #define STORE_CONST_1(ptr, pixel) \ ptr[0] = pixel #define STORE_CONST_3(ptr, pixel) \ ptr[0] = pixel; \ ptr[1] = pixel >> 8; \ ptr[2] = pixel >> 16 #define STORE_CONST_4(ptr, pixel) \ ptr[0] = pixel; \ ptr[1] = pixel >> 8; \ ptr[2] = pixel >> 16; \ ptr[3] = pixel >> 24 /***************************************************************/ #define PROCESS_PIX_1(BODY) \ BODY(i, 0) #define PROCESS_PIX_3(BODY) \ BODY(3*i, 0); \ BODY(3*i + 1, 1); \ BODY(3*i + 2, 2) #define PROCESS_PIX_4(BODY) \ BODY(4*i, 0); \ BODY(4*i + 1, 1); \ BODY(4*i + 2, 2); \ BODY(4*i + 3, 3) /***************************************************************/ #define LOOP_DST(TYPE, NCHAN, dstBase, dstScan, BODY) \ { \ TYPE##DataType *dst_ptr = (void*)(dstBase); \ mlib_s32 i, j; \ j = 0; \ do { \ i = 0; \ do { \ PROCESS_PIX_##NCHAN(BODY); \ i++; \ } while (i < width); \ PTR_ADD(dst_ptr, dstScan); \ j++; \ } while (j < height); \ } #define LOOP_DST_SRC(TYPE, NCHAN, dstBase, dstScan, \ srcBase, srcScan, BODY) \ { \ TYPE##DataType *dst_ptr = (void*)(dstBase); \ TYPE##DataType *src_ptr = (void*)(srcBase); \ mlib_s32 i, j; \ for (j = 0; j < height; j++) { \ for (i = 0; i < width; i++) { \ PROCESS_PIX_##NCHAN(BODY); \ } \ PTR_ADD(dst_ptr, dstScan); \ PTR_ADD(src_ptr, srcScan); \ } \ } /***************************************************************/ #define LOAD_2F32(ptr, ind0, ind1) \ vis_freg_pair(((mlib_f32*)(ptr))[ind0], ((mlib_f32*)(ptr))[ind1]) /***************************************************************/ #define LOAD_NEXT_U8(dd, ptr) \ dd = vis_faligndata(vis_ld_u8(ptr), dd) /***************************************************************/ #define LOAD_NEXT_U16(dd, ptr) \ dd = vis_faligndata(vis_ld_u16(ptr), dd) /***************************************************************/ jboolean checkSameLut(jint * SrcReadLut, jint * DstReadLut, SurfaceDataRasInfo * pSrcInfo, SurfaceDataRasInfo * pDstInfo); void ADD_SUFF(AnyByteIsomorphicCopy)(BLIT_PARAMS); void ADD_SUFF(AnyByteIsomorphicScaleCopy)(SCALE_PARAMS); void ADD_SUFF(AnyByteSetRect)(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void ADD_SUFF(Any4ByteSetRect)(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void ADD_SUFF(Any3ByteSetRect)(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void ADD_SUFF(AnyIntSetRect)(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void AnyByteSetRect(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void AnyIntSetRect(SurfaceDataRasInfo * pRasInfo, jint lox, jint loy, jint hix, jint hiy, jint pixel, NativePrimitive * pPrim, CompositeInfo * pCompInfo); void ADD_SUFF(IntArgbToByteGrayConvert)(BLIT_PARAMS); void ADD_SUFF(ByteGrayToIntArgbConvert)(BLIT_PARAMS); void ADD_SUFF(FourByteAbgrToIntArgbConvert)(BLIT_PARAMS); void ADD_SUFF(IntArgbToFourByteAbgrConvert)(BLIT_PARAMS); void ADD_SUFF(ThreeByteBgrToIntArgbConvert)(BLIT_PARAMS); void ADD_SUFF(TreeByteBgrToIntArgbConvert)(BLIT_PARAMS); void ADD_SUFF(IntArgbPreToIntArgbConvert)(BLIT_PARAMS); void ADD_SUFF(FourByteAbgrToIntArgbScaleConvert)(SCALE_PARAMS); void ADD_SUFF(ByteGrayToIntArgbPreConvert)(BLIT_PARAMS); void ADD_SUFF(IntArgbToIntArgbPreConvert)(BLIT_PARAMS); void ADD_SUFF(IntRgbToIntArgbPreConvert)(BLIT_PARAMS); void ADD_SUFF(ThreeByteBgrToIntArgbPreConvert)(BLIT_PARAMS); void ADD_SUFF(ByteGrayToIntArgbPreScaleConvert)(SCALE_PARAMS); void ADD_SUFF(IntArgbToIntArgbPreScaleConvert)(SCALE_PARAMS); void ADD_SUFF(IntRgbToIntArgbPreScaleConvert)(SCALE_PARAMS); void ADD_SUFF(ThreeByteBgrToIntArgbPreScaleConvert)(SCALE_PARAMS); void ADD_SUFF(ByteIndexedToFourByteAbgrConvert)(BLIT_PARAMS); void ADD_SUFF(ByteIndexedBmToFourByteAbgrXparOver)(BLIT_PARAMS); void ADD_SUFF(ByteIndexedBmToFourByteAbgrScaleXparOver)(SCALE_PARAMS); void ADD_SUFF(ByteIndexedToFourByteAbgrScaleConvert)(SCALE_PARAMS); void ADD_SUFF(IntArgbToThreeByteBgrConvert)(BLIT_PARAMS); void ADD_SUFF(IntArgbToUshortGrayConvert)(BLIT_PARAMS); void ADD_SUFF(ByteIndexedBmToFourByteAbgrXparBgCopy)(BCOPY_PARAMS); void IntArgbToThreeByteBgrConvert(BLIT_PARAMS); /***************************************************************/ #endif /* Java2d_Mlib_h_Included */