Home | History | Annotate | Download | only in vl
      1 /**************************************************************************
      2  *
      3  * Copyright 2009 Younes Manton.
      4  * All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the
      8  * "Software"), to deal in the Software without restriction, including
      9  * without limitation the rights to use, copy, modify, merge, publish,
     10  * distribute, sub license, and/or sell copies of the Software, and to
     11  * permit persons to whom the Software is furnished to do so, subject to
     12  * the following conditions:
     13  *
     14  * The above copyright notice and this permission notice (including the
     15  * next paragraph) shall be included in all copies or substantial portions
     16  * of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     21  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
     22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  **************************************************************************/
     27 
     28 #ifndef vl_mc_h
     29 #define vl_mc_h
     30 
     31 #include "pipe/p_state.h"
     32 #include "pipe/p_video_state.h"
     33 
     34 #include "tgsi/tgsi_ureg.h"
     35 
     36 #include "vl_defines.h"
     37 #include "vl_types.h"
     38 
     39 #define VL_MC_NUM_BLENDERS (1 << VL_NUM_COMPONENTS)
     40 
     41 struct pipe_context;
     42 
     43 struct vl_mc
     44 {
     45    struct pipe_context *pipe;
     46    unsigned buffer_width;
     47    unsigned buffer_height;
     48    unsigned macroblock_size;
     49 
     50    void *rs_state;
     51 
     52    void *blend_clear[VL_MC_NUM_BLENDERS];
     53    void *blend_add[VL_MC_NUM_BLENDERS];
     54    void *blend_sub[VL_MC_NUM_BLENDERS];
     55    void *vs_ref, *vs_ycbcr;
     56    void *fs_ref, *fs_ycbcr, *fs_ycbcr_sub;
     57    void *sampler_ref;
     58 };
     59 
     60 struct vl_mc_buffer
     61 {
     62    bool surface_cleared;
     63 
     64    struct pipe_viewport_state viewport;
     65    struct pipe_framebuffer_state fb_state;
     66 };
     67 
     68 typedef void (*vl_mc_ycbcr_vert_shader)(void *priv, struct vl_mc *mc,
     69                                         struct ureg_program *shader,
     70                                         unsigned first_output,
     71                                         struct ureg_dst tex);
     72 
     73 typedef void (*vl_mc_ycbcr_frag_shader)(void *priv, struct vl_mc *mc,
     74                                         struct ureg_program *shader,
     75                                         unsigned first_input,
     76                                         struct ureg_dst dst);
     77 
     78 bool vl_mc_init(struct vl_mc *renderer, struct pipe_context *pipe,
     79                 unsigned picture_width, unsigned picture_height,
     80                 unsigned macroblock_size, float scale,
     81                 vl_mc_ycbcr_vert_shader vs_callback,
     82                 vl_mc_ycbcr_frag_shader fs_callback,
     83                 void *callback_priv);
     84 
     85 void vl_mc_cleanup(struct vl_mc *renderer);
     86 
     87 bool vl_mc_init_buffer(struct vl_mc *renderer, struct vl_mc_buffer *buffer);
     88 
     89 void vl_mc_cleanup_buffer(struct vl_mc_buffer *buffer);
     90 
     91 void vl_mc_set_surface(struct vl_mc_buffer *buffer, struct pipe_surface *surface);
     92 
     93 void vl_mc_render_ref(struct vl_mc *renderer, struct vl_mc_buffer *buffer, struct pipe_sampler_view *ref);
     94 
     95 void vl_mc_render_ycbcr(struct vl_mc *renderer, struct vl_mc_buffer *buffer, unsigned component, unsigned num_instances);
     96 
     97 #endif /* vl_mc_h */
     98