fa2d7017d669d4e8c8e16a966ba304029cac00b3
[platform/upstream/libva.git] / i965_drv_video / i965_post_processing.h
1 /*
2  * Copyright © 2010 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  *
24  * Authors:
25  *    Xiang Haihao <haihao.xiang@intel.com>
26  *
27  */
28
29 #ifndef __I965_POST_PROCESSING_H__
30 #define __I965_POST_PROCESSING_H__
31
32 #define MAX_PP_SURFACES 32
33
34 #define I965_PP_FLAG_DEINTERLACING      1
35 #define I965_PP_FLAG_AVS                2
36
37 enum
38 {
39     PP_NULL = 0,
40     PP_NV12_LOAD_SAVE,
41     PP_NV12_SCALING,
42     PP_NV12_AVS,
43     PP_NV12_DNDI,
44 };
45
46 struct pp_load_save_context
47 {
48     int dest_w;
49     int dest_h;
50 };
51
52 struct pp_scaling_context
53 {
54     int dest_w;
55     int dest_h;
56 };
57
58 struct pp_avs_context
59 {
60     int dest_w;
61     int dest_h;
62     int src_w;
63     int src_h;
64 };
65
66 struct pp_dndi_context
67 {
68     int dest_w;
69     int dest_h;
70
71 };
72
73 struct i965_post_processing_context
74 {
75     int current_pp;
76
77     struct {
78         dri_bo *bo;
79     } curbe;
80
81     struct {
82         dri_bo *ss_bo;
83         dri_bo *s_bo;
84     } surfaces[MAX_PP_SURFACES];
85
86     struct {
87         dri_bo *bo;
88     } binding_table;
89
90     struct {
91         dri_bo *bo;
92         int num_interface_descriptors;
93     } idrt;
94
95     struct {
96         dri_bo *bo;
97     } vfe_state;
98
99     struct {
100         dri_bo *bo;
101         dri_bo *bo_8x8;
102         dri_bo *bo_8x8_uv;
103     } sampler_state_table;
104
105     struct {
106         unsigned int size;
107
108         unsigned int vfe_start;
109         unsigned int cs_start;
110
111         unsigned int num_vfe_entries;
112         unsigned int num_cs_entries;
113
114         unsigned int size_vfe_entry;
115         unsigned int size_cs_entry;
116     } urb;
117
118     struct {
119         dri_bo *bo;
120     } stmm;
121
122     union {
123         struct pp_load_save_context pp_load_save_context;
124         struct pp_scaling_context pp_scaling_context;
125         struct pp_avs_context pp_avs_context;
126         struct pp_dndi_context pp_dndi_context;
127     } private_context;
128
129     int (*pp_x_steps)(void *private_context);
130     int (*pp_y_steps)(void *private_context);
131     int (*pp_set_block_parameter)(void *private_context, int x, int y);
132 };
133
134 void
135 i965_post_processing(VADriverContextP ctx,
136                      VASurfaceID surface,
137                      short srcx,
138                      short srcy,
139                      unsigned short srcw,
140                      unsigned short srch,
141                      short destx,
142                      short desty,
143                      unsigned short destw,
144                      unsigned short desth,
145                      unsigned int pp_index);
146 Bool
147 i965_post_processing_terminate(VADriverContextP ctx);
148 Bool
149 i965_post_processing_init(VADriverContextP ctx);
150
151 #endif /* __I965_POST_PROCESSING_H__ */