e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_STATE_REGCOMBINER_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_STATE_REGCOMBINER_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_limits.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/cdefs.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum a, b, c, d;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum aMapping, bMapping, cMapping, dMapping;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum aPortion, bPortion, cPortion, dPortion;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum scale, bias;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum abOutput, cdOutput, sumOutput;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean abDotProduct, cdDotProduct, muxSum;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRRegCombinerPortionState;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enabledRegCombiners;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enabledPerStageConstants;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLcolorf constantColor0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLcolorf constantColor1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLcolorf stageConstantColor0[CR_MAX_GENERAL_COMBINERS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLcolorf stageConstantColor1[CR_MAX_GENERAL_COMBINERS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean colorSumClamp;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint numGeneralCombiners;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRRegCombinerPortionState rgb[CR_MAX_GENERAL_COMBINERS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRRegCombinerPortionState alpha[CR_MAX_GENERAL_COMBINERS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum a, b, c, d, e, f, g;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum aMapping, bMapping, cMapping, dMapping, eMapping, fMapping, gMapping;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum aPortion, bPortion, cPortion, dPortion, ePortion, fPortion, gPortion;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRRegCombinerState;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue dirty[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerVars[CR_MAX_BITARRAY]; /* numGeneralCombiners, colorSumClamp */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerColor0[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerColor1[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerStageColor0[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerStageColor1[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerInput[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY]; /* rgb/alpha[].a/b/c/d, .aMapping, .aPortion */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerOutput[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY]; /* rgb/alpha[].abOutput, .cdOutput, .sumOutput, .scale, .bias, .abDotProduct, .cdDotProduct, .muxSum */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue regCombinerFinalInput[CR_MAX_BITARRAY]; /* a/b/c/d/e/f/g, aMapping, aPortion */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRRegCombinerBits;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateRegCombinerInit( CRContext *ctx );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateRegCombinerDiff(CRRegCombinerBits *b, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateRegCombinerSwitch( CRRegCombinerBits *b, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_REGCOMBINER_H */