i965_drv_video: store kernel info in the corresponding context
[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 #define NUM_PP_MODULES                  5
47
48 struct pp_load_save_context
49 {
50     int dest_w;
51     int dest_h;
52 };
53
54 struct pp_scaling_context
55 {
56     int dest_w;
57     int dest_h;
58 };
59
60 struct pp_avs_context
61 {
62     int dest_w;
63     int dest_h;
64     int src_w;
65     int src_h;
66 };
67
68 struct pp_dndi_context
69 {
70     int dest_w;
71     int dest_h;
72
73 };
74
75 struct pp_module
76 {
77     struct i965_kernel kernel;
78     
79     /* others */
80     void (*initialize)(VADriverContextP ctx, VASurfaceID surface, int input,
81                        unsigned short srcw, unsigned short srch,
82                        unsigned short destw, unsigned short desth);
83 };
84
85 struct i965_post_processing_context
86 {
87     int current_pp;
88     struct pp_module pp_modules[NUM_PP_MODULES];
89
90     struct {
91         dri_bo *bo;
92     } curbe;
93
94     struct {
95         dri_bo *ss_bo;
96         dri_bo *s_bo;
97     } surfaces[MAX_PP_SURFACES];
98
99     struct {
100         dri_bo *bo;
101     } binding_table;
102
103     struct {
104         dri_bo *bo;
105         int num_interface_descriptors;
106     } idrt;
107
108     struct {
109         dri_bo *bo;
110     } vfe_state;
111
112     struct {
113         dri_bo *bo;
114         dri_bo *bo_8x8;
115         dri_bo *bo_8x8_uv;
116     } sampler_state_table;
117
118     struct {
119         unsigned int size;
120
121         unsigned int vfe_start;
122         unsigned int cs_start;
123
124         unsigned int num_vfe_entries;
125         unsigned int num_cs_entries;
126
127         unsigned int size_vfe_entry;
128         unsigned int size_cs_entry;
129     } urb;
130
131     struct {
132         dri_bo *bo;
133     } stmm;
134
135     union {
136         struct pp_load_save_context pp_load_save_context;
137         struct pp_scaling_context pp_scaling_context;
138         struct pp_avs_context pp_avs_context;
139         struct pp_dndi_context pp_dndi_context;
140     } private_context;
141
142     int (*pp_x_steps)(void *private_context);
143     int (*pp_y_steps)(void *private_context);
144     int (*pp_set_block_parameter)(void *private_context, int x, int y);
145 };
146
147 void
148 i965_post_processing(VADriverContextP ctx,
149                      VASurfaceID surface,
150                      short srcx,
151                      short srcy,
152                      unsigned short srcw,
153                      unsigned short srch,
154                      short destx,
155                      short desty,
156                      unsigned short destw,
157                      unsigned short desth,
158                      unsigned int pp_index);
159 Bool
160 i965_post_processing_terminate(VADriverContextP ctx);
161 Bool
162 i965_post_processing_init(VADriverContextP ctx);
163
164 #endif /* __I965_POST_PROCESSING_H__ */