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#include "packer.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_protocol.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackBegin( GLenum mode )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_PACKER_CONTEXT(pc);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync (void) pc;
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync
022e56bff837db399121bc76e4f404a6cd959d6evboxsync if (CR_CMDBLOCK_IS_STARTED(pc, CRPACKBLOCKSTATE_OP_BEGIN))
022e56bff837db399121bc76e4f404a6cd959d6evboxsync {
022e56bff837db399121bc76e4f404a6cd959d6evboxsync WARN(("recursive begin?"));
022e56bff837db399121bc76e4f404a6cd959d6evboxsync return;
022e56bff837db399121bc76e4f404a6cd959d6evboxsync }
022e56bff837db399121bc76e4f404a6cd959d6evboxsync
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync CR_CMDBLOCK_BEGIN( pc, CRPACKBLOCKSTATE_OP_BEGIN );
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync#ifndef VBOX
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (pc->buffer.canBarf)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (!pc->buffer.holds_BeginEnd)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->Flush( pc->flush_arg );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.in_BeginEnd = 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.holds_BeginEnd = 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync#endif
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH(pc, 4, GL_FALSE);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.begin_data = data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.begin_op = pc->buffer.opcode_current;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.attribsUsedMask = 0;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, mode );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_OPCODE( pc, CR_BEGIN_OPCODE );
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackBeginSWAP( GLenum mode )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_PACKER_CONTEXT(pc);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync (void) pc;
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync#ifndef VBOX
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (pc->buffer.canBarf)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (!pc->buffer.holds_BeginEnd)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->Flush( pc->flush_arg );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.in_BeginEnd = 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.holds_BeginEnd = 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync#endif
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH(pc, 4, GL_FALSE);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.begin_data = data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.begin_op = pc->buffer.opcode_current;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->current.attribsUsedMask = 0;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, SWAP32(mode) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_OPCODE( pc, CR_BEGIN_OPCODE );
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackEnd( void )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_PACKER_CONTEXT(pc);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync (void) pc;
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_BUFFERED_POINTER_NO_ARGS( pc );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_OPCODE( pc, CR_END_OPCODE );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.in_BeginEnd = 0;
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync CR_CMDBLOCK_END( pc, CRPACKBLOCKSTATE_OP_BEGIN );
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackEndSWAP( void )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_PACKER_CONTEXT(pc);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync (void) pc;
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_BUFFERED_POINTER_NO_ARGS( pc );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_OPCODE( pc, CR_END_OPCODE );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync pc->buffer.in_BeginEnd = 0;
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync CR_CMDBLOCK_END( pc, CRPACKBLOCKSTATE_OP_BEGIN );
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}