cr_glstate.h revision f53ba2efceac1847585b2052ee98569305e9802d
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/* Copyright (c) 2001, Stanford University
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * All rights reserved.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync *
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * See the file LICENSE.txt for information on redistributing this software.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifndef CR_GLSTATE_H
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#define CR_GLSTATE_H
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/* Forward declaration since some of the state/cr_*.h files need the CRContext type */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncstruct CRContext;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef struct CRContext CRContext;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "cr_version.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_buffer.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_bufferobject.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_client.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_current.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_evaluators.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_feedback.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_fog.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_hint.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_lighting.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_limits.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_line.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_lists.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_multisample.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_occlude.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_pixel.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_point.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_polygon.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_program.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_regcombiner.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_stencil.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_texture.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_transform.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_viewport.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_attrib.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_framebuffer.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_glsl.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_statefuncs.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "state/cr_stateerror.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include "spu_dispatch_table.h"
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CHROMIUM_THREADSAFE
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync# include <cr_threads.h>
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#include <iprt/cdefs.h>
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifndef IN_GUEST
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync# include <VBox/vmm/ssm.h>
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#define CR_MAX_EXTENTS 256
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef __cplusplus
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncextern "C" {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/**
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * Bit vectors describing GL state
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef struct {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRAttribBits attrib;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRBufferBits buffer;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CR_ARB_vertex_buffer_object
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRBufferObjectBits bufferobject;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRClientBits client;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRCurrentBits current;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CREvaluatorBits eval;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRFeedbackBits feedback;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRFogBits fog;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHintBits hint;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRLightingBits lighting;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRLineBits line;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRListsBits lists;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRMultisampleBits multisample;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#if CR_ARB_occlusion_query
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CROcclusionBits occlusion;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPixelBits pixel;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPointBits point;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPolygonBits polygon;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRProgramBits program;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRRegCombinerBits regcombiner;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRSelectionBits selection;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRStencilBits stencil;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRTextureBits texture;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRTransformBits transform;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRViewportBits viewport;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync} CRStateBits;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef void (*CRStateFlushFunc)( void *arg );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef struct _CRSharedState {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *textureTable; /* all texture objects */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *dlistTable; /* all display lists */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *buffersTable; /* vbo/pbo */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *fbTable; /* frame buffers */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *rbTable; /* render buffers */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLint refCount;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLint id; /*unique shared state id, it's not always matching some existing context id!*/
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLint saveCount;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* Indicates that we have to resend data to GPU on first glMakeCurrent call with owning context */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLboolean bTexResyncNeeded;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLboolean bVBOResyncNeeded;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLboolean bFBOResyncNeeded;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync} CRSharedState;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/**
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * Chromium version of the state variables in OpenGL
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncstruct CRContext {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync int id;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CHROMIUM_THREADSAFE
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* we keep reference counting of context's makeCurrent for different threads
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * this is primarily needed to avoid having an invalid memory reference in the TLS
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * when the context is assigned to more than one threads and then destroyed from
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * one of those, i.e.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 1. Thread1 -> MakeCurrent(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 2. Thread2 -> MakeCurrent(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 3. Thread1 -> Destroy(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * => Thread2 still refers to destroyed ctx1
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync VBOXTLSREFDATA
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRbitvalue bitid[CR_MAX_BITARRAY];
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRbitvalue neg_bitid[CR_MAX_BITARRAY];
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRSharedState *shared;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLenum renderMode;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLenum error;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRStateFlushFunc flush_func;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync void *flush_arg;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRAttribState attrib;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRBufferState buffer;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CR_ARB_vertex_buffer_object
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRBufferObjectState bufferobject;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRClientState client;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRCurrentState current;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CREvaluatorState eval;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRExtensionState extensions;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRFeedbackState feedback;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRFogState fog;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHintState hint;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRLightingState lighting;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRLimitsState limits;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRLineState line;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRListsState lists;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRMultisampleState multisample;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#if CR_ARB_occlusion_query
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CROcclusionState occlusion;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPixelState pixel;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPointState point;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRPolygonState polygon;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRProgramState program;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRRegCombinerState regcombiner;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRSelectionState selection;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRStencilState stencil;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRTextureState texture;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRTransformState transform;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRViewportState viewport;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CR_EXT_framebuffer_object
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRFramebufferObjectState framebufferobject;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef CR_OPENGL_VERSION_2_0
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRGLSLState glsl;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /** For buffering vertices for selection/feedback */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /*@{*/
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLuint vCount;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRVertex vBuffer[4];
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLboolean lineReset;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLboolean lineLoop;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /*@}*/
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync};
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateInit(void);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDestroy(void);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateVBoxDetachThread();
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateVBoxAttachThread();
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(CRContext *) crStateCreateContext(const CRLimitsState *limits, GLint visBits, CRContext *share);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(CRContext *) crStateCreateContextEx(const CRLimitsState *limits, GLint visBits, CRContext *share, GLint presetID);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateMakeCurrent(CRContext *ctx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSetCurrent(CRContext *ctx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(CRContext *) crStateGetCurrent(void);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDestroyContext(CRContext *ctx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(GLboolean) crStateEnableDiffOnMakeCurrent(GLboolean fEnable);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncCRContext * crStateSwichPrepare(CRContext *toCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncvoid crStateSwichPostprocess(CRContext *fromCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateFlushFunc( CRStateFlushFunc ff );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateFlushArg( void *arg );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDiffAPI( SPUDispatchTable *api );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateUpdateColorBits( void );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSetCurrentPointers( CRContext *ctx, CRCurrentStatePointers *current );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateResetCurrentPointers( CRCurrentStatePointers *current );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSetExtensionString( CRContext *ctx, const GLubyte *extensions );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDiffContext( CRContext *from, CRContext *to );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSwitchContext( CRContext *from, CRContext *to );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateApplyFBImage(CRContext *to);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifndef IN_GUEST
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(int32_t) crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef DECLCALLBACK(CRContext*) FNCRSTATE_CONTEXT_GET(void*);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef FNCRSTATE_CONTEXT_GET *PFNCRSTATE_CONTEXT_GET;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(int32_t) crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRSTATE_CONTEXT_GET pfnCtxGet, PSSMHANDLE pSSM);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateFreeShared(CRSharedState *s);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* XXX move these! */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParameteriCR( GLenum target, GLint value );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParameterfCR( GLenum target, GLfloat value );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParametervCR( GLenum target, GLenum type, GLsizei count, const GLvoid *values );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateGetChromiumParametervCR( GLenum target, GLuint index, GLenum type,
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLsizei count, GLvoid *values );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLenum format, GLenum type, GLvoid *pixels );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateShareContext(GLboolean value);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateSetSharedContext(CRContext *pCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(GLboolean) STATE_APIENTRY crStateContextIsShared(CRContext *pCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateQueryHWState();
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#ifdef __cplusplus
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync}
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif /* CR_GLSTATE_H */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync