summaryrefslogtreecommitdiffstats
path: root/bltsville/gcbv/mirror/gcbv.h
diff options
context:
space:
mode:
Diffstat (limited to 'bltsville/gcbv/mirror/gcbv.h')
-rw-r--r--bltsville/gcbv/mirror/gcbv.h590
1 files changed, 0 insertions, 590 deletions
diff --git a/bltsville/gcbv/mirror/gcbv.h b/bltsville/gcbv/mirror/gcbv.h
deleted file mode 100644
index 6392d4f..0000000
--- a/bltsville/gcbv/mirror/gcbv.h
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Copyright(c) 2012,
- * Texas Instruments, Inc. and Vivante Corporation.
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Vivante Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GCBV_H
-#define GCBV_H
-
-#include "gcmain.h"
-
-/*******************************************************************************
- * Miscellaneous defines and macros.
- */
-
-#define GC_MAX_BASE_ALIGN 64
-
-#if !defined(BVBATCH_DESTRECT)
-#define BVBATCH_DESTRECT (BVBATCH_DSTRECT_ORIGIN | BVBATCH_DSTRECT_SIZE)
-#endif
-
-#if !defined(BVBATCH_SRC1RECT)
-#define BVBATCH_SRC1RECT (BVBATCH_SRC1RECT_ORIGIN | BVBATCH_SRC1RECT_SIZE)
-#endif
-
-#if !defined(BVBATCH_SRC2RECT)
-#define BVBATCH_SRC2RECT (BVBATCH_SRC2RECT_ORIGIN | BVBATCH_SRC2RECT_SIZE)
-#endif
-
-#define STRUCTSIZE(structptr, lastmember) \
-( \
- (size_t) &structptr->lastmember + \
- sizeof(structptr->lastmember) - \
- (size_t) structptr \
-)
-
-#define GET_MAP_HANDLE(map) \
-( \
- ((struct bvbuffmapinfo *) map->handle)->handle \
-)
-
-#define GC_CLIP_RESET_LEFT ((unsigned short) 0)
-#define GC_CLIP_RESET_TOP ((unsigned short) 0)
-#define GC_CLIP_RESET_RIGHT ((unsigned short) ((1 << 15) - 1))
-#define GC_CLIP_RESET_BOTTOM ((unsigned short) ((1 << 15) - 1))
-
-#define BVSETERROR(error, message, ...) \
-do { \
- struct gccontext *tmpcontext = get_context(); \
- snprintf(tmpcontext->bverrorstr, sizeof(tmpcontext->bverrorstr), \
- message, ##__VA_ARGS__); \
- GCDUMPSTRING("%s(%d): [ERROR] %s\n", __func__, __LINE__, \
- tmpcontext->bverrorstr); \
- bverror = error; \
-} while (0)
-
-#define BVSETBLTERROR(error, message, ...) \
-do { \
- struct gccontext *tmpcontext = get_context(); \
- snprintf(tmpcontext->bverrorstr, sizeof(tmpcontext->bverrorstr), \
- message, ##__VA_ARGS__); \
- GCDUMPSTRING("%s(%d): [ERROR] %s\n", __func__, __LINE__, \
- tmpcontext->bverrorstr); \
- bvbltparams->errdesc = tmpcontext->bverrorstr; \
- bverror = error; \
-} while (0)
-
-#define GCPRINT_RECT(zone, name, rect) \
-{ \
- GCDBG(zone, \
- name " = (%d,%d)-(%d,%d), %dx%d\n", \
- (rect)->left, (rect)->top, \
- (rect)->right, (rect)->bottom, \
- (rect)->right - (rect)->left, \
- (rect)->bottom - (rect)->top); \
-}
-
-
-/*******************************************************************************
- * Kernel table definitions.
- */
-
-#define GC_TAP_COUNT 9
-#define GC_PHASE_BITS 5
-#define GC_PHASE_MAX_COUNT (1 << GC_PHASE_BITS)
-#define GC_PHASE_LOAD_COUNT (GC_PHASE_MAX_COUNT / 2 + 1)
-#define GC_COEFFICIENT_COUNT (GC_PHASE_LOAD_COUNT * GC_TAP_COUNT)
-#define GC_FILTER_CACHE_MAX 10
-
-enum gcfiltertype {
- GC_FILTER_SYNC,
- GC_FILTER_BLUR,
-
- /* Number of supported filter types. */
- GC_FILTER_COUNT
-};
-
-struct gcfilterkernel {
- enum gcfiltertype type;
- unsigned int kernelsize;
- unsigned int srcsize;
- unsigned int dstsize;
- unsigned int scalefactor;
- short kernelarray[GC_COEFFICIENT_COUNT];
- struct list_head link;
-};
-
-struct gcfiltercache {
- unsigned int count;
- struct list_head list; /* gcfilterkernel */
-};
-
-
-/*******************************************************************************
- * Global data structure.
- */
-
-struct gccontext {
- /* Last generated error message. */
- char bverrorstr[128];
-
- /* Capabilities and characteristics. */
- unsigned int gcmodel;
- unsigned int gcrevision;
- unsigned int gcdate;
- unsigned int gctime;
- union gcfeatures gcfeatures;
- union gcfeatures0 gcfeatures0;
- union gcfeatures1 gcfeatures1;
- union gcfeatures2 gcfeatures2;
- union gcfeatures3 gcfeatures3;
-
- /* Dynamically allocated structure cache. */
- struct bvbuffmap *buffmapvac; /* bvbuffmap */
- struct list_head unmapvac; /* gcschedunmap */
- struct list_head buffervac; /* gcbuffer */
- struct list_head fixupvac; /* gcfixup */
- struct list_head batchvac; /* gcbatch */
-
- /* Callback lists. */
- struct list_head callbacklist; /* gccallbackinfo */
- struct list_head callbackvac; /* gccallbackinfo */
-
- /* Access locks. */
- GCLOCK_TYPE batchlock;
- GCLOCK_TYPE bufferlock;
- GCLOCK_TYPE fixuplock;
- GCLOCK_TYPE maplock;
- GCLOCK_TYPE callbacklock;
-
- /* Kernel table cache. */
- struct gcfilterkernel *loadedfilter; /* gcfilterkernel */
- struct gcfiltercache filtercache[GC_FILTER_COUNT][GC_TAP_COUNT];
-
- /* Temporary buffer descriptor. */
- struct bvbuffdesc *tmpbuffdesc;
- void *tmpbuff;
-};
-
-
-/*******************************************************************************
- * Mapping structures.
- */
-
-/* bvbuffmap struct attachment. */
-struct bvbuffmapinfo {
- /* Mapped handle for the buffer. */
- unsigned long handle;
-
- /* Number of times the client explicitly mapped this buffer. */
- int usermap;
-
- /* Number of times implicit mapping happened. */
- int automap;
-};
-
-
-/*******************************************************************************
- * Color format.
- */
-
-#define BVFMT_RGB 1
-#define BVFMT_YUV 2
-
-struct bvcomponent {
- unsigned int shift;
- unsigned int size;
- unsigned int mask;
-};
-
-struct bvcsrgb {
- struct bvcomponent r;
- struct bvcomponent g;
- struct bvcomponent b;
- struct bvcomponent a;
-};
-
-struct bvformatxlate {
- unsigned int type;
- unsigned int bitspp;
- unsigned int allocbitspp;
- unsigned int format;
- unsigned int swizzle;
- bool premultiplied;
-
- union {
- struct {
- const struct bvcsrgb *comp;
- } rgb;
-
- struct {
- unsigned int std;
- unsigned int planecount;
- unsigned int xsample;
- unsigned int ysample;
- } yuv;
- } cs;
-};
-
-
-/*******************************************************************************
- * Alpha blending.
- */
-
-/* Alpha blending hardware configuration. */
-struct gcblendconfig {
- unsigned char factor_mode;
- unsigned char color_reverse;
-
- bool src1used;
- bool src2used;
-};
-
-/* Alpha blending descriptor. */
-struct gcalpha {
- unsigned int src_global_color;
- unsigned int dst_global_color;
-
- unsigned char src_global_alpha_mode;
- unsigned char dst_global_alpha_mode;
-
- struct gcblendconfig *k1;
- struct gcblendconfig *k2;
-
- struct gcblendconfig *srcconfig;
- struct gcblendconfig *dstconfig;
-
- bool src1used;
- bool src2used;
-};
-
-
-/*******************************************************************************
- * Rotation and mirror defines.
- */
-
-#define GCREG_ROT_ANGLE_ROT0 0x0
-#define GCREG_ROT_ANGLE_ROT90 0x4
-#define GCREG_ROT_ANGLE_ROT180 0x5
-#define GCREG_ROT_ANGLE_ROT270 0x6
-
-#define ROT_ANGLE_INVALID -1
-#define ROT_ANGLE_0 0
-#define ROT_ANGLE_90 1
-#define ROT_ANGLE_180 2
-#define ROT_ANGLE_270 3
-
-#define GCREG_MIRROR_NONE 0x0
-#define GCREG_MIRROR_X 0x1
-#define GCREG_MIRROR_Y 0x2
-#define GCREG_MIRROR_XY 0x3
-
-extern const unsigned int rotencoding[];
-
-
-/*******************************************************************************
- * Surface descriptor.
- */
-
-struct surfaceinfo {
- /* BLTsville source index (-1 for dst, 0 for src1 and 1 for src2). */
- int index;
-
- /* Surface buffer descriptor. */
- union bvinbuff buf;
-
- /* Surface geometry. */
- struct bvsurfgeom *geom;
- bool newgeom;
-
- /* Rectangle to source from/render to. */
- struct gcrect rect;
- bool newrect;
-
- /* Surface format. */
- struct bvformatxlate format;
-
- /* Physical size of the surface (accounted for rotation). */
- unsigned int physwidth;
- unsigned int physheight;
-
- /* Base address alignment. */
- int xpixalign;
- int ypixalign;
- int bytealign;
- int bytealign2;
- int bytealign3;
- int stride2;
- int stride3;
-
- /* Rotation angle. */
- int angle;
-
- /* Mirror setting. */
- unsigned int mirror;
-
- /* ROP. */
- unsigned short rop;
-
- /* Blending info. */
- struct gcalpha *gca;
-};
-
-
-/*******************************************************************************
- * Batch structures.
- */
-
-/* Operation finalization call. */
-struct gcbatch;
-typedef enum bverror (*gcbatchend) (struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch);
-
-/* Blit states. */
-struct gcblit {
- /* Number of sources in the operation. */
- unsigned int srccount;
-
- /* Multi source enable flag. */
- unsigned int multisrc;
-
- /* Computed destination rectangle coordinates; in multi-source
- * setup can be modified to match new destination and source
- * geometry. */
- struct gcrect dstrect;
-
- /* Block walker enable. */
- int blockenable;
-
- /* Destination format and swizzle */
- unsigned int format;
- unsigned int swizzle;
-};
-
-/* Filter states. */
-struct gcfilter {
- /* Kernel size. */
- unsigned int horkernelsize;
- unsigned int verkernelsize;
-
- /* Scale factors. */
- unsigned int horscalefactor;
- unsigned int verscalefactor;
-
- /* Destination angle. */
- bool angleoverride;
- int dstangle;
-
- /* Geometry size that follows angle adjustments. */
- struct bvsurfgeom dstgeom;
-
- /* Original source and destination rectangles adjusted
- * by the source angle. */
- struct gcrect dstrect;
- struct gcrect dstrectaux;
-
- /* Clipped destination rectangle adjusted by the source angle. */
- struct gcrect dstclipped;
- struct gcrect dstclippedaux;
-
- /* Destination rectangles that were clipped, adjusted for
- * the surface misalignment and the source angle. */
- struct gcrect dstadjusted;
- struct gcrect dstadjustedaux;
-};
-
-/* Batch header. */
-struct gcbatch {
- /* Used to ID structure version. */
- unsigned int structsize;
-
- /* Batch change flags. */
- unsigned long batchflags;
-
- /* Pointer to the function to finalize the current operation. */
- gcbatchend batchend;
-
- /* State of the current operation. */
- struct {
- struct gcblit blit;
- struct gcfilter filter;
- } op;
-
- /* Destination surface. */
- struct surfaceinfo dstinfo;
-
- /* Aux rectangle present. */
- bool haveaux;
- struct gcrect dstrectaux;
-
- /* Clipped destination rectangle coordinates. */
- struct gcrect dstclipped;
- struct gcrect dstclippedaux;
-
- /* Destination rectangles that were clipped and adjusted for
- * surface misalignment if any. */
- struct gcrect dstadjusted;
- struct gcrect dstadjustedaux;
-
- /* Clipping deltas; used to correct the source coordinates for
- * single source blits. */
- struct gcrect clipdelta;
-
- /* Adjusted geometry size of the destination surface. */
- unsigned int dstwidth;
- unsigned int dstheight;
-
- /* Physical size of the source and destination surfaces. */
- unsigned int srcphyswidth;
- unsigned int srcphysheight;
- unsigned int dstphyswidth;
- unsigned int dstphysheight;
-
- /* Alignment byte offset for the destination surface; in multi-
- * source setup can be modified to match new destination and source
- * geometry. */
- int dstbyteshift;
-
- /* Destination rectangle adjustment offsets. */
- int dstoffsetX;
- int dstoffsetY;
-
-#if GCDEBUG_ENABLE
- /* Rectangle validation storage. */
- struct bvrect prevdstrect;
- struct bvrect prevsrc1rect;
- struct bvrect prevsrc2rect;
- struct bvrect prevmaskrect;
-#endif
-
- /* Total size of the command buffer. */
- unsigned int size;
-
- /* Command buffer list (gcbuffer). */
- struct list_head buffer;
-
- /* Scheduled implicit unmappings (gcschedunmap). */
- struct list_head unmap;
-
- /* Batch linked list (gcbatch). */
- struct list_head link;
-};
-
-
-/*******************************************************************************
- * Internal API entries.
- */
-
-/* Get the pointer to the context. */
-struct gccontext *get_context(void);
-
-/* Validation. */
-bool valid_rect(struct bvsurfgeom *bvsurfgeom, struct gcrect *gcrect);
-
-/* Parsers. */
-enum bverror parse_format(struct bvbltparams *bvbltparams,
- struct surfaceinfo *surfaceinfo);
-enum bverror parse_blend(struct bvbltparams *bvbltparams,
- enum bvblend blend,
- struct gcalpha *gca);
-enum bverror parse_destination(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch);
-enum bverror parse_source(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch,
- struct bvrect *srcrect,
- struct surfaceinfo *srcinfo);
-enum bverror parse_scalemode(struct bvbltparams *bvbltparams,
- struct gcbatch *batch);
-
-/* Setup destination rotation parameters. */
-void process_dest_rotation(struct bvbltparams *bvbltparams,
- struct gcbatch *batch);
-
-/* Return surface alignment offset. */
-int get_pixel_offset(struct surfaceinfo *surfaceinfo, int offset);
-
-/* Buffer mapping. */
-enum bverror do_map(struct bvbuffdesc *bvbuffdesc,
- struct gcbatch *gcbatch,
- struct bvbuffmap **map);
-void do_unmap_implicit(struct gcbatch *gcbatch);
-
-/* Batch/command buffer management. */
-enum bverror do_end(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch);
-enum bverror allocate_batch(struct bvbltparams *bvbltparams,
- struct gcbatch **gcbatch);
-void free_batch(struct gcbatch *gcbatch);
-enum bverror append_buffer(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch,
- struct gcbuffer **gcbuffer);
-
-enum bverror add_fixup(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch,
- unsigned int *fixup,
- unsigned int surfoffset);
-enum bverror claim_buffer(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch,
- unsigned int size,
- void **buffer);
-
-/* Temporary buffer management. */
-enum bverror allocate_temp(struct bvbltparams *bvbltparams,
- unsigned int size);
-enum bverror free_temp(bool schedule);
-
-/* Program the destination. */
-enum bverror set_dst(struct bvbltparams *bltparams,
- struct gcbatch *batch,
- struct bvbuffmap *dstmap);
-
-/* Program blending. */
-enum bverror set_blending(struct bvbltparams *bvbltparams,
- struct gcbatch *batch,
- struct surfaceinfo *srcinfo);
-enum bverror set_blending_index(struct bvbltparams *bvbltparams,
- struct gcbatch *batch,
- struct surfaceinfo *srcinfo,
- unsigned int index);
-
-/* Program YUV source. */
-void set_computeyuv(struct surfaceinfo *srcinfo, int x, int y);
-enum bverror set_yuvsrc(struct bvbltparams *bvbltparams,
- struct gcbatch *batch,
- struct surfaceinfo *srcinfo,
- struct bvbuffmap *srcmap);
-enum bverror set_yuvsrc_index(struct bvbltparams *bvbltparams,
- struct gcbatch *batch,
- struct surfaceinfo *srcinfo,
- struct bvbuffmap *srcmap,
- unsigned int index);
-
-/* Rendering entry points. */
-enum bverror do_fill(struct bvbltparams *bltparams,
- struct gcbatch *gcbatch,
- struct surfaceinfo *srcinfo);
-enum bverror do_blit(struct bvbltparams *bltparams,
- struct gcbatch *gcbatch,
- struct surfaceinfo *srcinfo);
-enum bverror do_filter(struct bvbltparams *bvbltparams,
- struct gcbatch *gcbatch,
- struct surfaceinfo *srcinfo);
-
-#endif