Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5361 serge 1
/*
2
 * Copyright © 2013 Intel Corporation
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice (including the next
12
 * paragraph) shall be included in all copies or substantial portions of the
13
 * Software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
 * IN THE SOFTWARE.
22
 *
23
 * Authors:
24
 *    Wang Zhenyu 
25
 *    Keith Packard 
26
 *    Zhao Yakui 
27
 */
28
 
29
/* Sample the src surface in planar format */
30
 
31
include(`exa_wm.g4i')
32
 
33
/* Ivybridge uses GRFs in SEND instruction */
34
define(`src_msg_gen8',   `g65')
35
define(`src_msg_ind_gen8',`65')
36
/* UV flag */
37
define(`uv_flag', `g6.0<0,1,0>UW')
38
 
39
/* prepare sampler read back gX register, which would be written back to output */
40
 
41
/* use simd16 sampler, param 0 is u, param 1 is v. */
42
/* 'payload' loading, assuming tex coord start from g4 */
43
cmp.e.f0.0 (1) null uv_flag 0x1UW {align1};
44
(f0.0) jmpi INTERLEAVED_UV;
45
 
46
cmp.e.f0.0 (1) null uv_flag 0x2UW {align1};
47
(f0.0) jmpi CONSTANT_UV;
48
 
49
/* load r */
50
mov (1) g0.8<1>UD               0x0000e000UD { align1 mask_disable };
51
mov (8) src_msg_gen8<1>UD       g0<8,8,1>UD  { align1 mask_disable };
52
 
53
/* emit sampler 'send' cmd */
54
 
55
/* sample U (Cr) */
56
send (16) src_msg_ind_gen8		/* msg reg index */
57
	src_sample_g<1>UW 	/* readback */
58
	null
59
	sampler (3,2,F)		/* sampler message description, (binding_table,sampler_index,datatype)
60
				/* here(src->dst) we should use src_sampler and src_surface */
61
	mlen 5 rlen 2 { align1 };   /* required message len 5, readback len 8 */
62
 
63
/* sample V (Cb) */
64
mov (1) g0.8<1>UD	0x0000e000UD { align1 mask_disable };
65
mov (8) src_msg_gen8<1>UD	g0<8,8,1>UD  { align1 mask_disable };
66
 
67
send (16) src_msg_ind_gen8		/* msg reg index */
68
	src_sample_b<1>UW 	/* readback */
69
	null
70
	sampler (5,4,F)		/* sampler message description, (binding_table,sampler_index,datatype)
71
				/* here(src->dst) we should use src_sampler and src_surface */
72
	mlen 5 rlen 2 { align1 };   /* required message len 5, readback len 8 */
73
 
74
jmpi SAMPLE_Y;
75
 
76
CONSTANT_UV:
77
mov (16)        src_sample_g<1>f        0.5f { compr align1 mask_disable };
78
mov (16)        src_sample_b<1>f        0.5f { compr align1 mask_disable };
79
 
80
jmpi SAMPLE_Y;
81
 
82
INTERLEAVED_UV:
83
mov (1) g0.8<1>UD       0x0000c000UD { align1 mask_disable };
84
mov (8) src_msg_gen8<1>UD    g0<8,8,1>UD  { align1 mask_disable };
85
 
86
/* sample UV (CrCb) */
87
send (16) src_msg_ind_gen8           /* msg reg index */
88
        src_sample_g<1>UW       /* readback */
89
        null
90
        sampler (3,2,F)         /* sampler message description, (binding_table,sampler_index,datatype)
91
                                /* here(src->dst) we should use src_sampler and src_surface */
92
        mlen 5 rlen 4 { align1 };   /* required message len 5, readback len 8 */
93
 
94
 
95
SAMPLE_Y:
96
mov (1) g0.8<1>UD	0x0000e000UD { align1 mask_disable };
97
mov (8) src_msg_gen8<1>UD	g0<8,8,1>UD  { align1 mask_disable };
98
 
99
/* sample Y */
100
send (16) src_msg_ind_gen8		/* msg reg index */
101
	src_sample_r<1>UW 	/* readback */
102
	null
103
	sampler (1,0,F)		/* sampler message description, (binding_table,sampler_index,datatype)
104
				/* here(src->dst) we should use src_sampler and src_surface */
105
	mlen 5 rlen 2 { align1 };   /* required message len 5, readback len 8 */
106