vl_idct.h revision fcf765620d803b376582afb618b1f643242b641b
1/************************************************************************** 2 * 3 * Copyright 2010 Christian König 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 TUNGSTEN GRAPHICS 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_idct_h 29#define vl_idct_h 30 31#include <pipe/p_state.h> 32 33/* shader based inverse distinct cosinus transformation 34 * expect usage of vl_vertex_buffers as a todo list 35 */ 36struct vl_idct 37{ 38 struct pipe_context *pipe; 39 40 unsigned buffer_width; 41 unsigned buffer_height; 42 unsigned blocks_x, blocks_y; 43 unsigned nr_of_render_targets; 44 45 void *rs_state; 46 47 void *samplers[2]; 48 49 void *matrix_vs, *transpose_vs; 50 void *matrix_fs, *transpose_fs; 51 52 struct pipe_sampler_view *matrix; 53}; 54 55/* a set of buffers to work with */ 56struct vl_idct_buffer 57{ 58 struct pipe_viewport_state viewport[2]; 59 struct pipe_framebuffer_state fb_state[2]; 60 61 union 62 { 63 struct pipe_sampler_view *all[4]; 64 struct pipe_sampler_view *stage[2][2]; 65 struct { 66 struct pipe_sampler_view *matrix, *source; 67 struct pipe_sampler_view *transpose, *intermediate; 68 } individual; 69 } sampler_views; 70}; 71 72/* upload the idct matrix, which can be shared by all idct instances of a pipe */ 73struct pipe_sampler_view *vl_idct_upload_matrix(struct pipe_context *pipe, float scale); 74 75/* init an idct instance */ 76bool vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe, 77 unsigned buffer_width, unsigned buffer_height, 78 unsigned blocks_x, unsigned blocks_y, 79 unsigned nr_of_render_targets, 80 struct pipe_sampler_view *matrix); 81 82/* destroy an idct instance */ 83void vl_idct_cleanup(struct vl_idct *idct); 84 85/* init a buffer assosiated with agiven idct instance */ 86bool vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer, 87 struct pipe_sampler_view *source, 88 struct pipe_sampler_view *intermediate, 89 struct pipe_surface *destination); 90 91/* cleanup a buffer of an idct instance */ 92void vl_idct_cleanup_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer); 93 94/* flush the buffer and start rendering, vertex buffers needs to be setup before calling this */ 95void vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_verts); 96 97#endif 98