| /********************************************************** |
| * Copyright 2007-2009 VMware, Inc. All rights reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person |
| * obtaining a copy of this software and associated documentation |
| * files (the "Software"), to deal in the Software without |
| * restriction, including without limitation the rights to use, copy, |
| * modify, merge, publish, distribute, sublicense, and/or sell copies |
| * of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be |
| * included in all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| * SOFTWARE. |
| * |
| **********************************************************/ |
| |
| /** |
| * @file |
| * SVGA Shader Token Definitions |
| * |
| * @author Michal Krol <michal@vmware.com> |
| */ |
| |
| #ifndef ST_SHADER_SVGA_H |
| #define ST_SHADER_SVGA_H |
| |
| #include "pipe/p_compiler.h" |
| |
| struct sh_op |
| { |
| unsigned opcode:16; |
| unsigned control:8; |
| unsigned length:4; |
| unsigned predicated:1; |
| unsigned unused:1; |
| unsigned coissue:1; |
| unsigned is_reg:1; |
| }; |
| |
| struct sh_reg |
| { |
| unsigned number:11; |
| unsigned type_hi:2; |
| unsigned relative:1; |
| unsigned unused:14; |
| unsigned type_lo:3; |
| unsigned is_reg:1; |
| }; |
| |
| static INLINE unsigned |
| sh_reg_type( struct sh_reg reg ) |
| { |
| return reg.type_lo | (reg.type_hi << 3); |
| } |
| |
| struct sh_cdata |
| { |
| float xyzw[4]; |
| }; |
| |
| struct sh_def |
| { |
| struct sh_op op; |
| struct sh_reg reg; |
| struct sh_cdata cdata; |
| }; |
| |
| struct sh_defb |
| { |
| struct sh_op op; |
| struct sh_reg reg; |
| uint data; |
| }; |
| |
| struct sh_idata |
| { |
| int xyzw[4]; |
| }; |
| |
| struct sh_defi |
| { |
| struct sh_op op; |
| struct sh_reg reg; |
| struct sh_idata idata; |
| }; |
| |
| #define PS_TEXTURETYPE_UNKNOWN SVGA3DSAMP_UNKNOWN |
| #define PS_TEXTURETYPE_2D SVGA3DSAMP_2D |
| #define PS_TEXTURETYPE_CUBE SVGA3DSAMP_CUBE |
| #define PS_TEXTURETYPE_VOLUME SVGA3DSAMP_VOLUME |
| |
| struct sh_sampleinfo |
| { |
| unsigned unused:27; |
| unsigned texture_type:4; |
| unsigned is_reg:1; |
| }; |
| |
| struct sh_semantic |
| { |
| unsigned usage:4; |
| unsigned unused1:12; |
| unsigned usage_index:4; |
| unsigned unused2:11; |
| unsigned is_reg:1; |
| }; |
| |
| #define SH_WRITEMASK_0 0x1 |
| #define SH_WRITEMASK_1 0x2 |
| #define SH_WRITEMASK_2 0x4 |
| #define SH_WRITEMASK_3 0x8 |
| #define SH_WRITEMASK_ALL 0xf |
| |
| #define SH_DSTMOD_NONE 0x0 |
| #define SH_DSTMOD_SATURATE 0x1 |
| #define SH_DSTMOD_PARTIALPRECISION 0x2 |
| #define SH_DSTMOD_MSAMPCENTROID 0x4 |
| |
| struct sh_dstreg |
| { |
| unsigned number:11; |
| unsigned type_hi:2; |
| unsigned relative:1; |
| unsigned unused:2; |
| unsigned write_mask:4; |
| unsigned modifier:4; |
| unsigned shift_scale:4; |
| unsigned type_lo:3; |
| unsigned is_reg:1; |
| }; |
| |
| static INLINE unsigned |
| sh_dstreg_type( struct sh_dstreg reg ) |
| { |
| return reg.type_lo | (reg.type_hi << 3); |
| } |
| |
| struct sh_dcl |
| { |
| struct sh_op op; |
| union { |
| struct sh_sampleinfo sampleinfo; |
| struct sh_semantic semantic; |
| } u; |
| struct sh_dstreg reg; |
| }; |
| |
| struct sh_srcreg |
| { |
| unsigned number:11; |
| unsigned type_hi:2; |
| unsigned relative:1; |
| unsigned unused:2; |
| unsigned swizzle_x:2; |
| unsigned swizzle_y:2; |
| unsigned swizzle_z:2; |
| unsigned swizzle_w:2; |
| unsigned modifier:4; |
| unsigned type_lo:3; |
| unsigned is_reg:1; |
| }; |
| |
| static INLINE unsigned |
| sh_srcreg_type( struct sh_srcreg reg ) |
| { |
| return reg.type_lo | (reg.type_hi << 3); |
| } |
| |
| struct sh_dstop |
| { |
| struct sh_op op; |
| struct sh_dstreg dst; |
| }; |
| |
| struct sh_srcop |
| { |
| struct sh_op op; |
| struct sh_srcreg src; |
| }; |
| |
| struct sh_src2op |
| { |
| struct sh_op op; |
| struct sh_srcreg src0; |
| struct sh_srcreg src1; |
| }; |
| |
| struct sh_unaryop |
| { |
| struct sh_op op; |
| struct sh_dstreg dst; |
| struct sh_srcreg src; |
| }; |
| |
| struct sh_binaryop |
| { |
| struct sh_op op; |
| struct sh_dstreg dst; |
| struct sh_srcreg src0; |
| struct sh_srcreg src1; |
| }; |
| |
| struct sh_trinaryop |
| { |
| struct sh_op op; |
| struct sh_dstreg dst; |
| struct sh_srcreg src0; |
| struct sh_srcreg src1; |
| struct sh_srcreg src2; |
| }; |
| |
| struct sh_comment |
| { |
| unsigned opcode:16; |
| unsigned size:16; |
| }; |
| |
| #endif /* ST_SHADER_SVGA_H */ |