2 #include "vl_context.h"
4 #include <pipe/p_context.h>
5 #include <pipe/p_state.h>
6 #include <util/u_memory.h>
8 #include "vl_r16snorm_mc_buf.h"
10 #include "vl_basic_csc.h"
12 static int vlInitCommon(struct vlContext
*context
)
14 struct pipe_context
*pipe
;
15 struct pipe_rasterizer_state rast
;
16 struct pipe_blend_state blend
;
17 struct pipe_depth_stencil_alpha_state dsa
;
25 rast
.flatshade_first
= 0;
26 rast
.light_twoside
= 0;
27 rast
.front_winding
= PIPE_WINDING_CCW
;
28 rast
.cull_mode
= PIPE_WINDING_CW
;
29 rast
.fill_cw
= PIPE_POLYGON_MODE_FILL
;
30 rast
.fill_ccw
= PIPE_POLYGON_MODE_FILL
;
35 rast
.poly_stipple_enable
= 0;
36 rast
.point_sprite
= 0;
37 rast
.point_size_per_vertex
= 0;
40 rast
.line_stipple_enable
= 0;
41 rast
.line_stipple_factor
= 0;
42 rast
.line_stipple_pattern
= 0;
43 rast
.line_last_pixel
= 0;
44 rast
.bypass_vs_clip_and_viewport
= 0;
45 rast
.origin_lower_left
= 0;
47 rast
.point_smooth
= 0;
49 rast
.offset_units
= 1;
50 rast
.offset_scale
= 1;
51 /*rast.sprite_coord_mode[i] = ;*/
52 context
->raster
= pipe
->create_rasterizer_state(pipe
, &rast
);
53 pipe
->bind_rasterizer_state(pipe
, context
->raster
);
55 blend
.blend_enable
= 0;
56 blend
.rgb_func
= PIPE_BLEND_ADD
;
57 blend
.rgb_src_factor
= PIPE_BLENDFACTOR_ONE
;
58 blend
.rgb_dst_factor
= PIPE_BLENDFACTOR_ONE
;
59 blend
.alpha_func
= PIPE_BLEND_ADD
;
60 blend
.alpha_src_factor
= PIPE_BLENDFACTOR_ONE
;
61 blend
.alpha_dst_factor
= PIPE_BLENDFACTOR_ONE
;
62 blend
.logicop_enable
= 0;
63 blend
.logicop_func
= PIPE_LOGICOP_CLEAR
;
64 /* Needed to allow color writes to FB, even if blending disabled */
65 blend
.colormask
= PIPE_MASK_RGBA
;
67 context
->blend
= pipe
->create_blend_state(pipe
, &blend
);
68 pipe
->bind_blend_state(pipe
, context
->blend
);
70 dsa
.depth
.enabled
= 0;
71 dsa
.depth
.writemask
= 0;
72 dsa
.depth
.func
= PIPE_FUNC_ALWAYS
;
73 dsa
.depth
.occlusion_count
= 0;
74 for (i
= 0; i
< 2; ++i
)
76 dsa
.stencil
[i
].enabled
= 0;
77 dsa
.stencil
[i
].func
= PIPE_FUNC_ALWAYS
;
78 dsa
.stencil
[i
].fail_op
= PIPE_STENCIL_OP_KEEP
;
79 dsa
.stencil
[i
].zpass_op
= PIPE_STENCIL_OP_KEEP
;
80 dsa
.stencil
[i
].zfail_op
= PIPE_STENCIL_OP_KEEP
;
81 dsa
.stencil
[i
].ref_value
= 0;
82 dsa
.stencil
[i
].valuemask
= 0;
83 dsa
.stencil
[i
].writemask
= 0;
85 dsa
.alpha
.enabled
= 0;
86 dsa
.alpha
.func
= PIPE_FUNC_ALWAYS
;
87 dsa
.alpha
.ref_value
= 0;
88 context
->dsa
= pipe
->create_depth_stencil_alpha_state(pipe
, &dsa
);
89 pipe
->bind_depth_stencil_alpha_state(pipe
, context
->dsa
);
96 struct vlScreen
*screen
,
97 struct pipe_context
*pipe
,
98 unsigned int picture_width
,
99 unsigned int picture_height
,
100 enum vlFormat picture_format
,
101 enum vlProfile profile
,
102 enum vlEntryPoint entry_point
,
103 struct vlContext
**context
106 struct vlContext
*ctx
;
112 ctx
= CALLOC_STRUCT(vlContext
);
117 ctx
->screen
= screen
;
119 ctx
->picture_width
= picture_width
;
120 ctx
->picture_height
= picture_height
;
121 ctx
->picture_format
= picture_format
;
122 ctx
->profile
= profile
;
123 ctx
->entry_point
= entry_point
;
127 vlCreateR16SNormBufferedMC(pipe
, picture_width
, picture_height
, picture_format
, &ctx
->render
);
128 vlCreateBasicCSC(pipe
, &ctx
->csc
);
137 struct vlContext
*context
142 /* XXX: Must unbind shaders before we can delete them for some reason */
143 context
->pipe
->bind_vs_state(context
->pipe
, NULL
);
144 context
->pipe
->bind_fs_state(context
->pipe
, NULL
);
146 context
->render
->vlDestroy(context
->render
);
147 context
->csc
->vlDestroy(context
->csc
);
149 context
->pipe
->delete_blend_state(context
->pipe
, context
->blend
);
150 context
->pipe
->delete_rasterizer_state(context
->pipe
, context
->raster
);
151 context
->pipe
->delete_depth_stencil_alpha_state(context
->pipe
, context
->dsa
);
158 struct vlScreen
* vlContextGetScreen
160 struct vlContext
*context
165 return context
->screen
;
168 struct pipe_context
* vlGetPipeContext
170 struct vlContext
*context
175 return context
->pipe
;
178 unsigned int vlGetPictureWidth
180 struct vlContext
*context
185 return context
->picture_width
;
188 unsigned int vlGetPictureHeight
190 struct vlContext
*context
195 return context
->picture_height
;
198 enum vlFormat vlGetPictureFormat
200 struct vlContext
*context
205 return context
->picture_format
;