1d7db6343dd330cb8eb70e65190adb24dd350faccChristian König/**************************************************************************
2d7db6343dd330cb8eb70e65190adb24dd350faccChristian König *
3d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * Copyright 2012 Christian König.
4d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * All Rights Reserved.
5d7db6343dd330cb8eb70e65190adb24dd350faccChristian König *
6d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * Permission is hereby granted, free of charge, to any person obtaining a
7d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * copy of this software and associated documentation files (the
8d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * "Software"), to deal in the Software without restriction, including
9d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * without limitation the rights to use, copy, modify, merge, publish,
10d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * distribute, sub license, and/or sell copies of the Software, and to
11d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * permit persons to whom the Software is furnished to do so, subject to
12d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * the following conditions:
13d7db6343dd330cb8eb70e65190adb24dd350faccChristian König *
14d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * The above copyright notice and this permission notice (including the
15d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * next paragraph) shall be included in all copies or substantial portions
16d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * of the Software.
17d7db6343dd330cb8eb70e65190adb24dd350faccChristian König *
18d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24d7db6343dd330cb8eb70e65190adb24dd350faccChristian König * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25d7db6343dd330cb8eb70e65190adb24dd350faccChristian König *
26d7db6343dd330cb8eb70e65190adb24dd350faccChristian König **************************************************************************/
27d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
28d7db6343dd330cb8eb70e65190adb24dd350faccChristian König/* implementation of all matrix based filters like
29d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   gaussian, mean, laplacian, emboss, sharpness etc.. */
30d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
31d7db6343dd330cb8eb70e65190adb24dd350faccChristian König#ifndef vl_matrix_filter_h
32d7db6343dd330cb8eb70e65190adb24dd350faccChristian König#define vl_matrix_filter_h
33d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
34d7db6343dd330cb8eb70e65190adb24dd350faccChristian König#include "pipe/p_state.h"
35d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
36d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königstruct vl_matrix_filter
37d7db6343dd330cb8eb70e65190adb24dd350faccChristian König{
38d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   struct pipe_context *pipe;
39d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   struct pipe_vertex_buffer quad;
40d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
41d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   void *rs_state;
42d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   void *blend;
43d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   void *sampler;
44d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   void *ves;
45d7db6343dd330cb8eb70e65190adb24dd350faccChristian König   void *vs, *fs;
46d7db6343dd330cb8eb70e65190adb24dd350faccChristian König};
47d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
48d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königbool
49d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königvl_matrix_filter_init(struct vl_matrix_filter *filter, struct pipe_context *pipe,
50d7db6343dd330cb8eb70e65190adb24dd350faccChristian König                      unsigned video_width, unsigned video_height,
51d7db6343dd330cb8eb70e65190adb24dd350faccChristian König                      unsigned matrix_width, unsigned matrix_height,
52d7db6343dd330cb8eb70e65190adb24dd350faccChristian König                      const float *matrix_values);
53d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
54d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königvoid
55d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königvl_matrix_filter_cleanup(struct vl_matrix_filter *filter);
56d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
57d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
58d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königvoid
59d7db6343dd330cb8eb70e65190adb24dd350faccChristian Königvl_matrix_filter_render(struct vl_matrix_filter *filter,
60d7db6343dd330cb8eb70e65190adb24dd350faccChristian König                        struct pipe_sampler_view *src,
61d7db6343dd330cb8eb70e65190adb24dd350faccChristian König                        struct pipe_surface *dst);
62d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
63d7db6343dd330cb8eb70e65190adb24dd350faccChristian König
64d7db6343dd330cb8eb70e65190adb24dd350faccChristian König#endif /* vl_matrix_filter_h */
65