1428d7b3dSmrg/*
2428d7b3dSmrg * Copyright (c) 2011 Intel Corporation
3428d7b3dSmrg *
4428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
5428d7b3dSmrg * copy of this software and associated documentation files (the "Software"),
6428d7b3dSmrg * to deal in the Software without restriction, including without limitation
7428d7b3dSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8428d7b3dSmrg * and/or sell copies of the Software, and to permit persons to whom the
9428d7b3dSmrg * Software is furnished to do so, subject to the following conditions:
10428d7b3dSmrg *
11428d7b3dSmrg * The above copyright notice and this permission notice (including the next
12428d7b3dSmrg * paragraph) shall be included in all copies or substantial portions of the
13428d7b3dSmrg * Software.
14428d7b3dSmrg *
15428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16428d7b3dSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17428d7b3dSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18428d7b3dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19428d7b3dSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20428d7b3dSmrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21428d7b3dSmrg * SOFTWARE.
22428d7b3dSmrg *
23428d7b3dSmrg * Authors:
24428d7b3dSmrg *    Chris Wilson <chris@chris-wilson.co.uk>
25428d7b3dSmrg *
26428d7b3dSmrg */
27428d7b3dSmrg
28428d7b3dSmrg#include "brw_test.h"
29428d7b3dSmrg
30428d7b3dSmrg#include <string.h>
31428d7b3dSmrg
32428d7b3dSmrgstatic const uint32_t ps_kernel_nomask_affine[][4] = {
33428d7b3dSmrg#include "exa_wm_src_affine.g7b"
34428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
35428d7b3dSmrg#include "exa_wm_write.g7b"
36428d7b3dSmrg};
37428d7b3dSmrg
38428d7b3dSmrgstatic const uint32_t ps_kernel_nomask_projective[][4] = {
39428d7b3dSmrg#include "exa_wm_src_projective.g7b"
40428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
41428d7b3dSmrg#include "exa_wm_write.g7b"
42428d7b3dSmrg};
43428d7b3dSmrg
44428d7b3dSmrgstatic const uint32_t ps_kernel_maskca_affine[][4] = {
45428d7b3dSmrg#include "exa_wm_src_affine.g7b"
46428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
47428d7b3dSmrg#include "exa_wm_mask_affine.g7b"
48428d7b3dSmrg#include "exa_wm_mask_sample_argb.g7b"
49428d7b3dSmrg#include "exa_wm_ca.g6b"
50428d7b3dSmrg#include "exa_wm_write.g7b"
51428d7b3dSmrg};
52428d7b3dSmrg
53428d7b3dSmrgstatic const uint32_t ps_kernel_maskca_projective[][4] = {
54428d7b3dSmrg#include "exa_wm_src_projective.g7b"
55428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
56428d7b3dSmrg#include "exa_wm_mask_projective.g7b"
57428d7b3dSmrg#include "exa_wm_mask_sample_argb.g7b"
58428d7b3dSmrg#include "exa_wm_ca.g6b"
59428d7b3dSmrg#include "exa_wm_write.g7b"
60428d7b3dSmrg};
61428d7b3dSmrg
62428d7b3dSmrgstatic const uint32_t ps_kernel_maskca_srcalpha_affine[][4] = {
63428d7b3dSmrg#include "exa_wm_src_affine.g7b"
64428d7b3dSmrg#include "exa_wm_src_sample_a.g7b"
65428d7b3dSmrg#include "exa_wm_mask_affine.g7b"
66428d7b3dSmrg#include "exa_wm_mask_sample_argb.g7b"
67428d7b3dSmrg#include "exa_wm_ca_srcalpha.g6b"
68428d7b3dSmrg#include "exa_wm_write.g7b"
69428d7b3dSmrg};
70428d7b3dSmrg
71428d7b3dSmrgstatic const uint32_t ps_kernel_maskca_srcalpha_projective[][4] = {
72428d7b3dSmrg#include "exa_wm_src_projective.g7b"
73428d7b3dSmrg#include "exa_wm_src_sample_a.g7b"
74428d7b3dSmrg#include "exa_wm_mask_projective.g7b"
75428d7b3dSmrg#include "exa_wm_mask_sample_argb.g7b"
76428d7b3dSmrg#include "exa_wm_ca_srcalpha.g6b"
77428d7b3dSmrg#include "exa_wm_write.g7b"
78428d7b3dSmrg};
79428d7b3dSmrg
80428d7b3dSmrgstatic const uint32_t ps_kernel_masknoca_affine[][4] = {
81428d7b3dSmrg#include "exa_wm_src_affine.g7b"
82428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
83428d7b3dSmrg#include "exa_wm_mask_affine.g7b"
84428d7b3dSmrg#include "exa_wm_mask_sample_a.g7b"
85428d7b3dSmrg#include "exa_wm_noca.g6b"
86428d7b3dSmrg#include "exa_wm_write.g7b"
87428d7b3dSmrg};
88428d7b3dSmrg
89428d7b3dSmrgstatic const uint32_t ps_kernel_masknoca_projective[][4] = {
90428d7b3dSmrg#include "exa_wm_src_projective.g7b"
91428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
92428d7b3dSmrg#include "exa_wm_mask_projective.g7b"
93428d7b3dSmrg#include "exa_wm_mask_sample_a.g7b"
94428d7b3dSmrg#include "exa_wm_noca.g6b"
95428d7b3dSmrg#include "exa_wm_write.g7b"
96428d7b3dSmrg};
97428d7b3dSmrg
98428d7b3dSmrgstatic const uint32_t ps_kernel_packed[][4] = {
99428d7b3dSmrg#include "exa_wm_src_affine.g7b"
100428d7b3dSmrg#include "exa_wm_src_sample_argb.g7b"
101428d7b3dSmrg#include "exa_wm_yuv_rgb.g7b"
102428d7b3dSmrg#include "exa_wm_write.g7b"
103428d7b3dSmrg};
104428d7b3dSmrg
105428d7b3dSmrgstatic const uint32_t ps_kernel_planar[][4] = {
106428d7b3dSmrg#include "exa_wm_src_affine.g7b"
107428d7b3dSmrg#include "exa_wm_src_sample_planar.g7b"
108428d7b3dSmrg#include "exa_wm_yuv_rgb.g7b"
109428d7b3dSmrg#include "exa_wm_write.g7b"
110428d7b3dSmrg};
111428d7b3dSmrg
112428d7b3dSmrg#define compare(old) brw_test_compare(__FUNCTION__, p.gen, p.store, p.nr_insn, (struct brw_instruction *)old, ARRAY_SIZE(old))
113428d7b3dSmrg#define GEN 070
114428d7b3dSmrg
115428d7b3dSmrgstatic void gen7_ps_nomask_affine(void)
116428d7b3dSmrg{
117428d7b3dSmrg	uint32_t store[1024];
118428d7b3dSmrg	struct brw_compile p;
119428d7b3dSmrg
120428d7b3dSmrg	brw_compile_init(&p, GEN, store);
121428d7b3dSmrg	brw_wm_kernel__affine(&p, 8);
122428d7b3dSmrg
123428d7b3dSmrg	compare(ps_kernel_nomask_affine);
124428d7b3dSmrg}
125428d7b3dSmrg
126428d7b3dSmrgstatic void gen7_ps_mask_affine(void)
127428d7b3dSmrg{
128428d7b3dSmrg	uint32_t store[1024];
129428d7b3dSmrg	struct brw_compile p;
130428d7b3dSmrg
131428d7b3dSmrg	brw_compile_init(&p, GEN, store);
132428d7b3dSmrg	brw_wm_kernel__affine_mask(&p, 8);
133428d7b3dSmrg
134428d7b3dSmrg	compare(ps_kernel_masknoca_affine);
135428d7b3dSmrg}
136428d7b3dSmrg
137428d7b3dSmrgstatic void gen7_ps_maskca_affine(void)
138428d7b3dSmrg{
139428d7b3dSmrg	uint32_t store[1024];
140428d7b3dSmrg	struct brw_compile p;
141428d7b3dSmrg
142428d7b3dSmrg	brw_compile_init(&p, GEN, store);
143428d7b3dSmrg	brw_wm_kernel__affine_mask_ca(&p, 8);
144428d7b3dSmrg
145428d7b3dSmrg	compare(ps_kernel_maskca_affine);
146428d7b3dSmrg}
147428d7b3dSmrg
148428d7b3dSmrgstatic void gen7_ps_masksa_affine(void)
149428d7b3dSmrg{
150428d7b3dSmrg	uint32_t store[1024];
151428d7b3dSmrg	struct brw_compile p;
152428d7b3dSmrg
153428d7b3dSmrg	brw_compile_init(&p, GEN, store);
154428d7b3dSmrg	brw_wm_kernel__affine_mask_sa(&p, 8);
155428d7b3dSmrg
156428d7b3dSmrg	compare(ps_kernel_maskca_srcalpha_affine);
157428d7b3dSmrg}
158428d7b3dSmrg
159428d7b3dSmrgstatic void gen7_ps_nomask_projective(void)
160428d7b3dSmrg{
161428d7b3dSmrg	uint32_t store[1024];
162428d7b3dSmrg	struct brw_compile p;
163428d7b3dSmrg
164428d7b3dSmrg	brw_compile_init(&p, GEN, store);
165428d7b3dSmrg	brw_wm_kernel__projective(&p, 8);
166428d7b3dSmrg
167428d7b3dSmrg	compare(ps_kernel_nomask_projective);
168428d7b3dSmrg}
169428d7b3dSmrg
170428d7b3dSmrgstatic void gen7_ps_opacity(void)
171428d7b3dSmrg{
172428d7b3dSmrg	uint32_t store[1024];
173428d7b3dSmrg	struct brw_compile p;
174428d7b3dSmrg
175428d7b3dSmrg	brw_compile_init(&p, GEN, store);
176428d7b3dSmrg	brw_wm_kernel__affine_opacity(&p, 16);
177428d7b3dSmrg
178428d7b3dSmrg	compare(ps_kernel_nomask_affine);
179428d7b3dSmrg}
180428d7b3dSmrg
181428d7b3dSmrgvoid brw_test_gen7(void)
182428d7b3dSmrg{
183428d7b3dSmrg	gen7_ps_nomask_affine();
184428d7b3dSmrg	gen7_ps_mask_affine();
185428d7b3dSmrg	gen7_ps_maskca_affine();
186428d7b3dSmrg	gen7_ps_masksa_affine();
187428d7b3dSmrg
188428d7b3dSmrg	gen7_ps_nomask_projective();
189428d7b3dSmrg
190428d7b3dSmrg	gen7_ps_opacity();
191428d7b3dSmrg}
192