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 STATE_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define STATE_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_glstate.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
925b21ef13312d51bd7746073d52acd167d2f448vboxsync#define CRSTATE_CHECKERR_RET(expr, result, message, ret) \
925b21ef13312d51bd7746073d52acd167d2f448vboxsync if (expr) { \
925b21ef13312d51bd7746073d52acd167d2f448vboxsync crStateError(__LINE__, __FILE__, result, message); \
925b21ef13312d51bd7746073d52acd167d2f448vboxsync return ret; \
925b21ef13312d51bd7746073d52acd167d2f448vboxsync }
925b21ef13312d51bd7746073d52acd167d2f448vboxsync
925b21ef13312d51bd7746073d52acd167d2f448vboxsync#define CRSTATE_NO_RETURN
925b21ef13312d51bd7746073d52acd167d2f448vboxsync
925b21ef13312d51bd7746073d52acd167d2f448vboxsync#define CRSTATE_CHECKERR(expr, result, message) CRSTATE_CHECKERR_RET(expr, result, message, CRSTATE_NO_RETURN)
925b21ef13312d51bd7746073d52acd167d2f448vboxsync
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsynctypedef struct _crCheckIDHWID {
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync GLuint id, hwid;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync} crCheckIDHWID_t;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern SPUDispatchTable diff_api;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern CRStateBits *__currentBits;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define GetCurrentBits() __currentBits
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CHROMIUM_THREADSAFE
6decafdf89f825b3af922ab6fa02345e08e5be7bvboxsync#include <cr_threads.h>
6decafdf89f825b3af922ab6fa02345e08e5be7bvboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern CRtsd __contextTSD;
6decafdf89f825b3af922ab6fa02345e08e5be7bvboxsync#define GetCurrentContext() VBoxTlsRefGetCurrent(CRContext, &__contextTSD)
11f375aeb42298e3def991f90f66f69a93d958ccvboxsync
18e44ea7c4a3dffc9f5d5052dfe6873ada58de57vboxsync/* NOTE: below SetCurrentContext stuff is supposed to be used only internally!!
11f375aeb42298e3def991f90f66f69a93d958ccvboxsync * it is placed here only to simplify things since some code besides state_init.c
11f375aeb42298e3def991f90f66f69a93d958ccvboxsync * (i.e. state_glsl.c) is using it */
6decafdf89f825b3af922ab6fa02345e08e5be7bvboxsync#define SetCurrentContext(_ctx) VBoxTlsRefSetCurrent(CRContext, &__contextTSD, _ctx)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern CRContext *__currentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define GetCurrentContext() __currentContext
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
0e30fe79e4624e42422e7eb3232c41f1832d69d9vboxsyncextern GLboolean g_bVBoxEnableDiffOnMakeCurrent;
0e30fe79e4624e42422e7eb3232c41f1832d69d9vboxsync
0e30fe79e4624e42422e7eb3232c41f1832d69d9vboxsyncextern CRContext *g_pAvailableContexts[CR_MAX_CONTEXTS];
e85b92d4df013df97a72864a412eb94eb3f70acevboxsyncextern uint32_t g_cContexts;
0e30fe79e4624e42422e7eb3232c41f1832d69d9vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern void crStateTextureInitTextureObj (CRContext *ctx, CRTextureObj *tobj, GLuint name, GLenum target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern void crStateTextureInitTextureFormat( CRTextureLevel *tl, GLenum internalFormat );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Normally these functions would have been in cr_bufferobject.h but
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * that led to a number of issues.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStateBufferObjectInit(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStateBufferObjectDestroy (CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStateBufferObjectDiff(CRBufferObjectBits *bb, CRbitvalue *bitID,
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStateBufferObjectSwitch(CRBufferObjectBits *bb, CRbitvalue *bitID,
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* These would normally be in cr_client.h */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStateClientDiff(CRClientBits *cb, CRbitvalue *bitID, CRContext *from, CRContext *to);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncvoid crStateClientSwitch(CRClientBits *cb, CRbitvalue *bitID, CRContext *from, CRContext *to);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncvoid crStateFreeBufferObject(void *data);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncvoid crStateFreeFBO(void *data);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncvoid crStateFreeRBO(void *data);
925b21ef13312d51bd7746073d52acd167d2f448vboxsync
925b21ef13312d51bd7746073d52acd167d2f448vboxsyncvoid crStateGenNames(CRContext *g, CRHashTable *table, GLsizei n, GLuint *names);
4889465c09b77293d26e548597b3181038e47e48vboxsyncvoid crStateRegNames(CRContext *g, CRHashTable *table, GLsizei n, GLuint *names);
4bf357e9215bcc257ba2a5e13ef1f083053cfeb9vboxsyncvoid crStateOnTextureUsageRelease(CRSharedState *pS, CRTextureObj *pObj);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif