1/*
2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3 * Copyright (c) Imagination Technologies Limited, UK
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial portions
15 * of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 * Authors:
26 *    Binglin Chen <binglin.chen@intel.com>
27 *    Zhaohan Ren  <zhaohan.ren@intel.com>
28 *    Shengquan Yuan  <shengquan.yuan@intel.com>
29 *
30 */
31
32#ifndef         PSB_TEXTURE_H_
33# define        PSB_TEXTURE_H_
34
35#include "mrst/pvr2d.h"
36#include <img_types.h>
37
38#define DRI2_BACK_BUFFER_EXPORT_TYPE_BUFFERS 1
39#define DRI2_BACK_BUFFER_EXPORT_TYPE_SWAPCHAIN 2
40
41#define DRI2_FLIP_BUFFERS_NUM           2
42#define DRI2_BLIT_BUFFERS_NUM           2
43#define DRI2_MAX_BUFFERS_NUM            MAX( DRI2_FLIP_BUFFERS_NUM, DRI2_BLIT_BUFFERS_NUM )
44#define VIDEO_BUFFER_NUM                20
45
46
47typedef struct _psb_coeffs_ {
48    signed char rY;
49    signed char rU;
50    signed char rV;
51    signed char gY;
52    signed char gU;
53    signed char gV;
54    signed char bY;
55    signed char bU;
56    signed char bV;
57    unsigned char rShift;
58    unsigned char gShift;
59    unsigned char bShift;
60    signed short rConst;
61    signed short gConst;
62    signed short bConst;
63} psb_coeffs_s, *psb_coeffs_p;
64
65typedef struct _sgx_psb_fixed32 {
66    union {
67        struct {
68            unsigned short Fraction;
69            short Value;
70        };
71        long ll;
72    };
73} sgx_psb_fixed32;
74
75typedef struct _PVRDRI2BackBuffersExport_ {
76    IMG_UINT32 ui32Type;
77    //pixmap handles
78    PVR2D_HANDLE hBuffers[3];
79
80    IMG_UINT32 ui32BuffersCount;
81    IMG_UINT32 ui32SwapChainID;
82} PVRDRI2BackBuffersExport;
83
84struct psb_texture_s {
85    struct _WsbmBufferObject *vaSrf;
86
87    unsigned int video_transfermatrix;
88    unsigned int src_nominalrange;
89    unsigned int dst_nominalrange;
90
91    uint32_t gamma0;
92    uint32_t gamma1;
93    uint32_t gamma2;
94    uint32_t gamma3;
95    uint32_t gamma4;
96    uint32_t gamma5;
97
98    sgx_psb_fixed32 brightness;
99    sgx_psb_fixed32 contrast;
100    sgx_psb_fixed32 saturation;
101    sgx_psb_fixed32 hue;
102
103    psb_coeffs_s coeffs;
104
105    uint32_t update_coeffs;
106    PVRDRI2BackBuffersExport dri2_bb_export;
107    PVRDRI2BackBuffersExport extend_dri2_bb_export;
108
109    /* struct dri_drawable *extend_dri_drawable; */
110    /* struct dri_drawable *dri_drawable; */
111    unsigned char *extend_dri_drawable;
112    unsigned char *dri_drawable;
113
114    uint32_t dri_init_flag;
115    uint32_t extend_dri_init_flag;
116    uint32_t adjust_window_flag;
117    uint32_t current_blt_buffer;
118
119    uint32_t extend_current_blt_buffer;
120    uint32_t destw_save;
121    uint32_t desth_save;
122    uint32_t drawable_update_flag; /* drawable resize or switch between window <==> pixmap */
123    uint32_t local_rotation_save;
124    uint32_t extend_rotation_save;
125
126    PVR2DMEMINFO *pal_meminfo[6];
127    PVR2DMEMINFO *blt_meminfo_pixmap;
128    PVR2DMEMINFO *blt_meminfo[DRI2_BLIT_BUFFERS_NUM];
129    PVR2DMEMINFO *flip_meminfo[DRI2_FLIP_BUFFERS_NUM];
130    PVR2DMEMINFO *extend_blt_meminfo[DRI2_BLIT_BUFFERS_NUM];
131};
132
133int psb_ctexture_init(VADriverContextP ctx);
134
135void psb_ctexture_deinit(VADriverContextP ctx);
136
137void blit_texture_to_buf(VADriverContextP ctx, unsigned char * data, int src_x, int src_y, int src_w,
138                         int src_h, int dst_x, int dst_y, int dst_w, int dst_h,
139                         int width, int height, int src_pitch, struct _WsbmBufferObject * src_buf,
140                         unsigned int placement);
141
142void psb_putsurface_textureblit(
143    VADriverContextP ctx, unsigned char *dst, VASurfaceID surface, int src_x, int src_y, int src_w,
144    int src_h, int dst_x, int dst_y, int dst_w, int dst_h, unsigned int subtitle,
145    int width, int height,
146    int src_pitch, struct _WsbmBufferObject * src_buf,
147    unsigned int placement, int wrap_dst);
148
149#endif      /* !PSB_TEXTURE_H_ */
150