summaryrefslogtreecommitdiffstats
path: root/src/VBox/GuestHost/OpenGL/packer/pack_init.c
blob: 8332a5c35736f47c170d39e9a78fffbb70736041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Copyright (c) 2001, Stanford University
 * All rights reserved
 *
 * See the file LICENSE.txt for information on redistributing this software.
 */

#include "cr_error.h"
#include "cr_mem.h"
#include "packer.h"
#include <stdio.h>

#ifdef CHROMIUM_THREADSAFE
CRtsd _PackerTSD;
int cr_packer_globals;  /* dummy - for the sake of packer.def */
#else
int _PackerTSD;         /* dummy - for the sake of packer.def */  /* drm1 */
DLLDATA(CRPackContext) cr_packer_globals;
#endif

uint32_t cr_packer_cmd_blocks_enabled = 0;

CRPackContext *crPackNewContext( int swapping )
{
#ifdef CHROMIUM_THREADSAFE
    CRPackContext *pc = crCalloc(sizeof(CRPackContext));
    if (!pc)
        return NULL;
    crInitMutex(&pc->mutex);
#else
    GET_PACKER_CONTEXT(pc);
        crMemZero( pc, sizeof(CRPackContext));
#endif
    pc->u32CmdBlockState = 0;
    pc->swapping = swapping;
    pc->Flush = NULL;
    pc->SendHuge = NULL;
    pc->updateBBOX = 0;
    return pc;
}

void crPackDeleteContext(CRPackContext *pc)
{
#ifdef CHROMIUM_THREADSAFE
    crFreeMutex(&pc->mutex);
    crFree(pc);
#endif
}

/* Set packing context for the calling thread */
void crPackSetContext( CRPackContext *pc )
{
#ifdef CHROMIUM_THREADSAFE
    crSetTSD( &_PackerTSD, pc );
#else
    CRASSERT( pc == &cr_packer_globals );
    (void)pc;
#endif
}


/* Return packing context for the calling thread */
CRPackContext *crPackGetContext( void )
{
#ifdef CHROMIUM_THREADSAFE
    return (CRPackContext *) crGetTSD( &_PackerTSD );
#else
    return &cr_packer_globals;
#endif
}

void crPackCapsSet(uint32_t u32Caps)
{
    cr_packer_cmd_blocks_enabled = (u32Caps & (CR_VBOX_CAP_CMDBLOCKS_FLUSH | CR_VBOX_CAP_CMDBLOCKS));
}