Path: blob/master/libmupen64plus/mupen64plus-video-rice/src/CombinerDefs.h
2 views
/*1Copyright (C) 2002 Rice196423This program is free software; you can redistribute it and/or4modify it under the terms of the GNU General Public License5as published by the Free Software Foundation; either version 26of the License, or (at your option) any later version.78This program is distributed in the hope that it will be useful,9but WITHOUT ANY WARRANTY; without even the implied warranty of10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the11GNU General Public License for more details.1213You should have received a copy of the GNU General Public License14along with this program; if not, write to the Free Software15Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.1617*/1819#ifndef _COMBINER_DEFS_H_20#define _COMBINER_DEFS_H_2122#include "typedefs.h"2324#define MUX_MASK 0x1F25#define MUX_MASK_WITH_ALPHA 0x5F26#define MUX_MASK_WITH_NEG 0x3F27#define MUX_MASK_WITH_COMP 0x9F28enum29{30MUX_0 = 0,31MUX_1,32MUX_COMBINED,33MUX_TEXEL0,34MUX_TEXEL1,35MUX_PRIM,36MUX_SHADE,37MUX_ENV,38MUX_COMBALPHA,39MUX_T0_ALPHA,40MUX_T1_ALPHA,41MUX_PRIM_ALPHA,42MUX_SHADE_ALPHA,43MUX_ENV_ALPHA,44MUX_LODFRAC,45MUX_PRIMLODFRAC,46MUX_K5,47MUX_UNK, //Use this if you want to factor to be set to 04849// Don't change value of these three flags, then need to be within 1 uint850MUX_NEG = 0x20, //Support by NVidia register combiner51MUX_ALPHAREPLICATE = 0x40,52MUX_COMPLEMENT = 0x80,53MUX_FORCE_0 = 0xFE,54MUX_ERR = 0xFF,55};565758enum CombinerFormatType59{60CM_FMT_TYPE_NOT_USED,61CM_FMT_TYPE_D, // = A can mapped to SEL(arg1)62CM_FMT_TYPE_A_MOD_C, // = A*C can mapped to MOD(arg1,arg2)63CM_FMT_TYPE_A_ADD_D, // = A+D can mapped to ADD(arg1,arg2)64CM_FMT_TYPE_A_SUB_B, // = A-B can mapped to SUB(arg1,arg2)65CM_FMT_TYPE_A_MOD_C_ADD_D, // = A*C+D can mapped to MULTIPLYADD(arg1,arg2,arg0)66CM_FMT_TYPE_A_LERP_B_C, // = (A-B)*C+B can mapped to LERP(arg1,arg2,arg0)67// or mapped to BLENDALPHA(arg1,arg2) if C is68// alpha channel or DIF, TEX, FAC, CUR69CM_FMT_TYPE_A_SUB_B_ADD_D, // = A-B+C can not map very well in 1 stage70CM_FMT_TYPE_A_SUB_B_MOD_C, // = (A-B)*C can not map very well in 1 stage71CM_FMT_TYPE_A_ADD_B_MOD_C, // = (A+B)*C can not map very well in 1 stage72CM_FMT_TYPE_A_B_C_D, // = (A-B)*C+D can not map very well in 1 stage73CM_FMT_TYPE_A_B_C_A, // = (A-B)*C+D can not map very well in 1 stage7475// Don't use these two types in default functions76CM_FMT_TYPE_AB_ADD_CD, // = A*B+C*D Use by nvidia video cards77CM_FMT_TYPE_AB_SUB_CD, // = A*B-C*D Use by nvidia video cards78CM_FMT_TYPE_AB_ADD_C, // = A*B+C Use by ATI video cards79CM_FMT_TYPE_AB_SUB_C, // = A*B-C Use by ATI video cards80CM_FMT_TYPE_NOT_CHECKED = 0xFF,81};828384typedef enum {85ENABLE_BOTH,86DISABLE_ALPHA,87DISABLE_COLOR,88DISABLE_BOTH,89COLOR_ONE,90ALPHA_ONE,91} BlendingFunc;929394typedef enum {95COLOR_CHANNEL,96ALPHA_CHANNEL,97} CombineChannel;9899100101typedef struct {102uint8 a;103uint8 b;104uint8 c;105uint8 d;106} N64CombinerType;107108#define CONST_FLAG4(a,b,c,d) (a|(b<<8)|(c<<16)|(d<<24)) //(A-B)*C+D109#define CONST_MOD(a,b) (a|(b<<16)) //A*B110#define CONST_SEL(a) (a<<24) //=D111#define CONST_ADD(a,b) (a|b<<24) //A+D112#define CONST_SUB(a,b) (a|b<<8) //A-B113#define CONST_MULADD(a,b,c) (a|b<<16|c<<24) //A*C+D114115#define G_CCMUX_TEXEL1 2116#define G_ACMUX_TEXEL1 2117118#define NOTUSED MUX_0119120enum { TEX_0=0, TEX_1=1};121122123124typedef struct {125uint32 op;126uint32 Arg1;127uint32 Arg2;128uint32 Arg0;129} StageOperate;130131#endif132133134135136137