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