Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 1
/**************************************************************************
2
 *
3
 * Copyright 2010 VMware, Inc.
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 SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17
 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
 * USE OR OTHER DEALINGS IN THE SOFTWARE.
21
 *
22
 * The above copyright notice and this permission notice (including the
23
 * next paragraph) shall be included in all copies or substantial portions
24
 * of the Software.
25
 *
26
 **************************************************************************/
27
 
28
 
29
#ifndef LP_BLD_QUAD_H_
30
#define LP_BLD_QUAD_H_
31
 
32
 
33
#include "gallivm/lp_bld.h"
34
 
35
 
36
struct lp_build_context;
37
 
38
 
39
/*
40
 * Each quad is composed of four elements.
41
 *
42
 * #########
43
 * # 0 | 1 #
44
 * #---+---#
45
 * # 2 | 3 #
46
 * #########
47
 */
48
 
49
enum lp_bld_quad {
50
   LP_BLD_QUAD_TOP_LEFT     = 0,
51
   LP_BLD_QUAD_TOP_RIGHT    = 1,
52
   LP_BLD_QUAD_BOTTOM_LEFT  = 2,
53
   LP_BLD_QUAD_BOTTOM_RIGHT = 3
54
};
55
 
56
 
57
/*
58
 * (Vector) derivates.
59
 *
60
 * More than one quad is supported. The only requirement is that the vector
61
 * contains a whole number of quads:
62
 *
63
 * ######### ######### ...
64
 * # 0 | 1 # # 4 | 5 #
65
 * #---+---# #---+---# ...
66
 * # 2 | 3 # # 6 | 7 #
67
 * ######### ######### ...
68
 */
69
 
70
LLVMValueRef
71
lp_build_ddx(struct lp_build_context *bld,
72
             LLVMValueRef a);
73
 
74
 
75
LLVMValueRef
76
lp_build_ddy(struct lp_build_context *bld,
77
             LLVMValueRef a);
78
 
79
 
80
/*
81
 * Packed derivatives (one derivative for each direction per quad)
82
 */
83
LLVMValueRef
84
lp_build_packed_ddx_ddy_twocoord(struct lp_build_context *bld,
85
                                 LLVMValueRef a, LLVMValueRef b);
86
 
87
LLVMValueRef
88
lp_build_packed_ddx_ddy_onecoord(struct lp_build_context *bld,
89
                                 LLVMValueRef a);
90
 
91
/*
92
 * Twiddle from quad format to row format
93
 */
94
void
95
lp_bld_quad_twiddle(struct gallivm_state *gallivm,
96
                    struct lp_type lp_dst_type,
97
                    const LLVMValueRef* src,
98
                    unsigned src_count,
99
                    LLVMValueRef* dst);
100
 
101
#endif /* LP_BLD_QUAD_H_ */