103b705cfSriastradh/*
203b705cfSriastradh * Copyright (c) 2011 Intel Corporation
303b705cfSriastradh *
403b705cfSriastradh * Permission is hereby granted, free of charge, to any person obtaining a
503b705cfSriastradh * copy of this software and associated documentation files (the "Software"),
603b705cfSriastradh * to deal in the Software without restriction, including without limitation
703b705cfSriastradh * the rights to use, copy, modify, merge, publish, distribute, sublicense,
803b705cfSriastradh * and/or sell copies of the Software, and to permit persons to whom the
903b705cfSriastradh * Software is furnished to do so, subject to the following conditions:
1003b705cfSriastradh *
1103b705cfSriastradh * The above copyright notice and this permission notice (including the next
1203b705cfSriastradh * paragraph) shall be included in all copies or substantial portions of the
1303b705cfSriastradh * Software.
1403b705cfSriastradh *
1503b705cfSriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1603b705cfSriastradh * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1703b705cfSriastradh * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1803b705cfSriastradh * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1903b705cfSriastradh * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2003b705cfSriastradh * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2103b705cfSriastradh * SOFTWARE.
2203b705cfSriastradh *
2303b705cfSriastradh * Authors:
2403b705cfSriastradh *    Chris Wilson <chris@chris-wilson.co.uk>
2503b705cfSriastradh *
2603b705cfSriastradh */
2703b705cfSriastradh
2803b705cfSriastradh#include "brw_test.h"
2903b705cfSriastradh
3003b705cfSriastradh#include <string.h>
3103b705cfSriastradh
3203b705cfSriastradhstatic const uint32_t ps_kernel_nomask_affine[][4] = {
3303b705cfSriastradh#include "exa_wm_src_affine.g6b"
3403b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
3503b705cfSriastradh#include "exa_wm_write.g6b"
3603b705cfSriastradh};
3703b705cfSriastradh
3803b705cfSriastradhstatic const uint32_t ps_kernel_nomask_projective[][4] = {
3903b705cfSriastradh#include "exa_wm_src_projective.g6b"
4003b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
4103b705cfSriastradh#include "exa_wm_write.g6b"
4203b705cfSriastradh};
4303b705cfSriastradh
4403b705cfSriastradhstatic const uint32_t ps_kernel_maskca_affine[][4] = {
4503b705cfSriastradh#include "exa_wm_src_affine.g6b"
4603b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
4703b705cfSriastradh#include "exa_wm_mask_affine.g6b"
4803b705cfSriastradh#include "exa_wm_mask_sample_argb.g6b"
4903b705cfSriastradh#include "exa_wm_ca.g6b"
5003b705cfSriastradh#include "exa_wm_write.g6b"
5103b705cfSriastradh};
5203b705cfSriastradh
5303b705cfSriastradhstatic const uint32_t ps_kernel_maskca_projective[][4] = {
5403b705cfSriastradh#include "exa_wm_src_projective.g6b"
5503b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
5603b705cfSriastradh#include "exa_wm_mask_projective.g6b"
5703b705cfSriastradh#include "exa_wm_mask_sample_argb.g6b"
5803b705cfSriastradh#include "exa_wm_ca.g6b"
5903b705cfSriastradh#include "exa_wm_write.g6b"
6003b705cfSriastradh};
6103b705cfSriastradh
6203b705cfSriastradhstatic const uint32_t ps_kernel_maskca_srcalpha_affine[][4] = {
6303b705cfSriastradh#include "exa_wm_src_affine.g6b"
6403b705cfSriastradh#include "exa_wm_src_sample_a.g6b"
6503b705cfSriastradh#include "exa_wm_mask_affine.g6b"
6603b705cfSriastradh#include "exa_wm_mask_sample_argb.g6b"
6703b705cfSriastradh#include "exa_wm_ca_srcalpha.g6b"
6803b705cfSriastradh#include "exa_wm_write.g6b"
6903b705cfSriastradh};
7003b705cfSriastradh
7103b705cfSriastradhstatic const uint32_t ps_kernel_maskca_srcalpha_projective[][4] = {
7203b705cfSriastradh#include "exa_wm_src_projective.g6b"
7303b705cfSriastradh#include "exa_wm_src_sample_a.g6b"
7403b705cfSriastradh#include "exa_wm_mask_projective.g6b"
7503b705cfSriastradh#include "exa_wm_mask_sample_argb.g6b"
7603b705cfSriastradh#include "exa_wm_ca_srcalpha.g6b"
7703b705cfSriastradh#include "exa_wm_write.g6b"
7803b705cfSriastradh};
7903b705cfSriastradh
8003b705cfSriastradhstatic const uint32_t ps_kernel_masknoca_affine[][4] = {
8103b705cfSriastradh#include "exa_wm_src_affine.g6b"
8203b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
8303b705cfSriastradh#include "exa_wm_mask_affine.g6b"
8403b705cfSriastradh#include "exa_wm_mask_sample_a.g6b"
8503b705cfSriastradh#include "exa_wm_noca.g6b"
8603b705cfSriastradh#include "exa_wm_write.g6b"
8703b705cfSriastradh};
8803b705cfSriastradh
8903b705cfSriastradhstatic const uint32_t ps_kernel_masknoca_projective[][4] = {
9003b705cfSriastradh#include "exa_wm_src_projective.g6b"
9103b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
9203b705cfSriastradh#include "exa_wm_mask_projective.g6b"
9303b705cfSriastradh#include "exa_wm_mask_sample_a.g6b"
9403b705cfSriastradh#include "exa_wm_noca.g6b"
9503b705cfSriastradh#include "exa_wm_write.g6b"
9603b705cfSriastradh};
9703b705cfSriastradh
9803b705cfSriastradhstatic const uint32_t ps_kernel_packed[][4] = {
9903b705cfSriastradh#include "exa_wm_src_affine.g6b"
10003b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
101fe8aea9eSmrg#include "exa_wm_yuv_rgb_bt601.g6b"
10203b705cfSriastradh#include "exa_wm_write.g6b"
10303b705cfSriastradh};
10403b705cfSriastradh
10503b705cfSriastradhstatic const uint32_t ps_kernel_planar[][4] = {
10603b705cfSriastradh#include "exa_wm_src_affine.g6b"
10703b705cfSriastradh#include "exa_wm_src_sample_planar.g6b"
108fe8aea9eSmrg#include "exa_wm_yuv_rgb_bt601.g6b"
10903b705cfSriastradh#include "exa_wm_write.g6b"
11003b705cfSriastradh};
11103b705cfSriastradh
11203b705cfSriastradh#define compare(old) brw_test_compare(__FUNCTION__, p.gen, p.store, p.nr_insn, (struct brw_instruction *)old, ARRAY_SIZE(old))
11303b705cfSriastradh
11403b705cfSriastradh#if 0
11503b705cfSriastradhstatic void wm_src_affine(struct brw_compile *p)
11603b705cfSriastradh{
11703b705cfSriastradh	brw_PLN(p, brw_message_reg(2), brw_vec1_grf(6,0), brw_vec8_grf(2,0));
11803b705cfSriastradh	brw_PLN(p, brw_message_reg(3), brw_vec1_grf(6,0), brw_vec8_grf(4,0));
11903b705cfSriastradh	brw_PLN(p, brw_message_reg(4), brw_vec1_grf(6,4), brw_vec8_grf(2,0));
12003b705cfSriastradh	brw_PLN(p, brw_message_reg(5), brw_vec1_grf(6,4), brw_vec8_grf(4,0));
12103b705cfSriastradh}
12203b705cfSriastradh
12303b705cfSriastradhstatic void wm_src_sample_argb(struct brw_compile *p)
12403b705cfSriastradh{
12503b705cfSriastradh	static const uint32_t fragment[][4] = {
12603b705cfSriastradh#include "exa_wm_src_affine.g6b"
12703b705cfSriastradh#include "exa_wm_src_sample_argb.g6b"
12803b705cfSriastradh#include "exa_wm_write.g6b"
12903b705cfSriastradh	};
13003b705cfSriastradh	int n;
13103b705cfSriastradh
13203b705cfSriastradh	brw_push_insn_state(p);
13303b705cfSriastradh	brw_set_mask_control(p, BRW_MASK_DISABLE);
13403b705cfSriastradh	brw_set_compression_control(p, BRW_COMPRESSION_NONE);
13503b705cfSriastradh	brw_MOV(p,
13603b705cfSriastradh		retype(brw_vec1_grf(0,2), BRW_REGISTER_TYPE_UD),
13703b705cfSriastradh		brw_imm_ud(0));
13803b705cfSriastradh	brw_pop_insn_state(p);
13903b705cfSriastradh
14003b705cfSriastradh	brw_SAMPLE(p,
14103b705cfSriastradh		   retype(vec16(brw_vec8_grf(14, 0)), BRW_REGISTER_TYPE_UW),
14203b705cfSriastradh		   1,
14303b705cfSriastradh		   retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD),
14403b705cfSriastradh		   1, 0,
14503b705cfSriastradh		   WRITEMASK_XYZW,
14603b705cfSriastradh		   GEN5_SAMPLER_MESSAGE_SAMPLE,
14703b705cfSriastradh		   8,
14803b705cfSriastradh		   5,
14903b705cfSriastradh		   true,
15003b705cfSriastradh		   BRW_SAMPLER_SIMD_MODE_SIMD16);
15103b705cfSriastradh
15203b705cfSriastradh
15303b705cfSriastradh	for (n = 0; n < p->nr_insn; n++) {
15403b705cfSriastradh		brw_disasm(stdout, &p->store[n], 60);
15503b705cfSriastradh	}
15603b705cfSriastradh
15703b705cfSriastradh	printf("\n\n");
15803b705cfSriastradh	for (n = 0; n < ARRAY_SIZE(fragment); n++) {
15903b705cfSriastradh		brw_disasm(stdout,
16003b705cfSriastradh			   (const struct brw_instruction *)&fragment[n][0],
16103b705cfSriastradh			   60);
16203b705cfSriastradh	}
16303b705cfSriastradh}
16403b705cfSriastradh
16503b705cfSriastradhstatic void wm_write(struct brw_compile *p)
16603b705cfSriastradh{
16703b705cfSriastradh}
16803b705cfSriastradh#endif
16903b705cfSriastradh
17003b705cfSriastradhstatic void gen6_ps_nomask_affine(void)
17103b705cfSriastradh{
17203b705cfSriastradh	uint32_t store[1024];
17303b705cfSriastradh	struct brw_compile p;
17403b705cfSriastradh
17513496ba1Ssnj	brw_compile_init(&p, 060, store);
17603b705cfSriastradh	brw_wm_kernel__affine(&p, 16);
17703b705cfSriastradh
17803b705cfSriastradh	compare(ps_kernel_nomask_affine);
17903b705cfSriastradh}
18003b705cfSriastradh
18103b705cfSriastradhstatic void gen6_ps_mask_affine(void)
18203b705cfSriastradh{
18303b705cfSriastradh	uint32_t store[1024];
18403b705cfSriastradh	struct brw_compile p;
18503b705cfSriastradh
18613496ba1Ssnj	brw_compile_init(&p, 060, store);
18703b705cfSriastradh	brw_wm_kernel__affine_mask(&p, 16);
18803b705cfSriastradh
18903b705cfSriastradh	compare(ps_kernel_masknoca_affine);
19003b705cfSriastradh}
19103b705cfSriastradh
19203b705cfSriastradhstatic void gen6_ps_nomask_projective(void)
19303b705cfSriastradh{
19403b705cfSriastradh	uint32_t store[1024];
19503b705cfSriastradh	struct brw_compile p;
19603b705cfSriastradh
19713496ba1Ssnj	brw_compile_init(&p, 060, store);
19803b705cfSriastradh	brw_wm_kernel__projective(&p, 16);
19903b705cfSriastradh
20003b705cfSriastradh	compare(ps_kernel_nomask_projective);
20103b705cfSriastradh}
20203b705cfSriastradh
20303b705cfSriastradhvoid brw_test_gen6(void)
20403b705cfSriastradh{
20503b705cfSriastradh	gen6_ps_nomask_affine();
20603b705cfSriastradh	gen6_ps_mask_affine();
20703b705cfSriastradh
20803b705cfSriastradh	gen6_ps_nomask_projective();
20903b705cfSriastradh}
210