Home | History | Annotate | Download | only in compiler
      1 /*
      2  * Copyright (C) 2009 Nicolai Haehnle.
      3  *
      4  * All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining
      7  * a 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, sublicense, 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 above copyright notice and this permission notice (including the
     15  * next paragraph) shall be included in all copies or substantial
     16  * portions of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     19  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     21  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
     22  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     23  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     24  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  */
     27 
     28 #ifndef RADEON_SWIZZLE_H
     29 #define RADEON_SWIZZLE_H
     30 
     31 #include "radeon_program.h"
     32 
     33 struct rc_swizzle_split {
     34 	unsigned char NumPhases;
     35 	unsigned char Phase[4];
     36 };
     37 
     38 /**
     39  * Describe the swizzling capability of target hardware.
     40  */
     41 struct rc_swizzle_caps {
     42 	/**
     43 	 * Check whether the given swizzle, absolute and negate combination
     44 	 * can be implemented natively by the hardware for this opcode.
     45 	 *
     46 	 * \return 1 if the swizzle is native for the given opcode
     47 	 */
     48 	int (*IsNative)(rc_opcode opcode, struct rc_src_register reg);
     49 
     50 	/**
     51 	 * Determine how to split access to the masked channels of the
     52 	 * given source register to obtain ALU-native swizzles.
     53 	 */
     54 	void (*Split)(struct rc_src_register reg, unsigned int mask, struct rc_swizzle_split * split);
     55 };
     56 
     57 extern struct rc_swizzle_caps r300_vertprog_swizzle_caps;
     58 
     59 #endif /* RADEON_SWIZZLE_H */
     60