pack_misc.c revision 2f44080df90cb90c1e524d97c8e327b40298f3c6
de4157257515400c2c25373591135f110227b68cvboxsync/* Copyright (c) 2001, Stanford University
de4157257515400c2c25373591135f110227b68cvboxsync * All rights reserved
de4157257515400c2c25373591135f110227b68cvboxsync *
de4157257515400c2c25373591135f110227b68cvboxsync * See the file LICENSE.txt for information on redistributing this software.
de4157257515400c2c25373591135f110227b68cvboxsync */
de4157257515400c2c25373591135f110227b68cvboxsync
3d3defbbc6d46d5bbb80fca96508b609ef983948vboxsync#include "packer.h"
de4157257515400c2c25373591135f110227b68cvboxsync#include "cr_error.h"
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsyncvoid PACK_APIENTRY crPackChromiumParametervCR(GLenum target, GLenum type, GLsizei count, const GLvoid *values)
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync{
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync CR_GET_PACKER_CONTEXT(pc);
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync unsigned int header_length = 2 * sizeof(int) + sizeof(target) + sizeof(type) + sizeof(count);
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync unsigned int packet_length;
b263fac6f6e7fa933c7bfb2a45d598fe8e458c09vboxsync unsigned int params_length = 0;
de4157257515400c2c25373591135f110227b68cvboxsync unsigned char *data_ptr;
de4157257515400c2c25373591135f110227b68cvboxsync int i, pos;
de4157257515400c2c25373591135f110227b68cvboxsync
de4157257515400c2c25373591135f110227b68cvboxsync switch (type) {
de4157257515400c2c25373591135f110227b68cvboxsync case GL_BYTE:
de4157257515400c2c25373591135f110227b68cvboxsync case GL_UNSIGNED_BYTE:
de4157257515400c2c25373591135f110227b68cvboxsync params_length = sizeof(GLbyte) * count;
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_SHORT:
de4157257515400c2c25373591135f110227b68cvboxsync case GL_UNSIGNED_SHORT:
de4157257515400c2c25373591135f110227b68cvboxsync params_length = sizeof(GLshort) * count;
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_INT:
de4157257515400c2c25373591135f110227b68cvboxsync case GL_UNSIGNED_INT:
de4157257515400c2c25373591135f110227b68cvboxsync params_length = sizeof(GLint) * count;
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_FLOAT:
de4157257515400c2c25373591135f110227b68cvboxsync params_length = sizeof(GLfloat) * count;
de4157257515400c2c25373591135f110227b68cvboxsync break;
6dd8f5023a9ba7588212331db90059553136fe33vboxsync#if 0
de4157257515400c2c25373591135f110227b68cvboxsync case GL_DOUBLE:
de4157257515400c2c25373591135f110227b68cvboxsync params_length = sizeof(GLdouble) * count;
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync#endif
de4157257515400c2c25373591135f110227b68cvboxsync default:
de4157257515400c2c25373591135f110227b68cvboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
de4157257515400c2c25373591135f110227b68cvboxsync "crPackChromiumParametervCR(bad type)" );
de4157257515400c2c25373591135f110227b68cvboxsync return;
de4157257515400c2c25373591135f110227b68cvboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync
01a4740f743b850f8337988627cd58dd2abbb81bvboxsync packet_length = header_length + params_length;
de4157257515400c2c25373591135f110227b68cvboxsync
296a2ed12c9cf6041bb8006c2223605d2f56c6c9vboxsync CR_GET_BUFFERED_POINTER(pc, packet_length );
296a2ed12c9cf6041bb8006c2223605d2f56c6c9vboxsync WRITE_DATA( 0, GLint, packet_length );
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( 4, GLenum, CR_CHROMIUMPARAMETERVCR_EXTEND_OPCODE );
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( 8, GLenum, target );
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( 12, GLenum, type );
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( 16, GLsizei, count );
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
de4157257515400c2c25373591135f110227b68cvboxsync
de4157257515400c2c25373591135f110227b68cvboxsync pos = header_length;
de4157257515400c2c25373591135f110227b68cvboxsync
de4157257515400c2c25373591135f110227b68cvboxsync switch (type) {
de4157257515400c2c25373591135f110227b68cvboxsync case GL_BYTE:
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync case GL_UNSIGNED_BYTE:
de4157257515400c2c25373591135f110227b68cvboxsync for (i = 0; i < count; i++, pos += sizeof(GLbyte)) {
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( pos, GLbyte, ((GLbyte *) values)[i]);
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_SHORT:
de4157257515400c2c25373591135f110227b68cvboxsync case GL_UNSIGNED_SHORT:
de4157257515400c2c25373591135f110227b68cvboxsync for (i = 0; i < count; i++, pos += sizeof(GLshort)) {
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( pos, GLshort, ((GLshort *) values)[i]);
de4157257515400c2c25373591135f110227b68cvboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_INT:
de4157257515400c2c25373591135f110227b68cvboxsync case GL_UNSIGNED_INT:
de4157257515400c2c25373591135f110227b68cvboxsync for (i = 0; i < count; i++, pos += sizeof(GLint)) {
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( pos, GLint, ((GLint *) values)[i]);
de4157257515400c2c25373591135f110227b68cvboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync case GL_FLOAT:
de4157257515400c2c25373591135f110227b68cvboxsync for (i = 0; i < count; i++, pos += sizeof(GLfloat)) {
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA( pos, GLfloat, ((GLfloat *) values)[i]);
de4157257515400c2c25373591135f110227b68cvboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync#if 0
de4157257515400c2c25373591135f110227b68cvboxsync case GL_DOUBLE:
de4157257515400c2c25373591135f110227b68cvboxsync for (i = 0; i < count; i++) {
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_foo_DATA( sizeof(int) + 12, GLdouble, ((GLdouble *) values)[i]);
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync break;
de4157257515400c2c25373591135f110227b68cvboxsync#endif
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync default:
de4157257515400c2c25373591135f110227b68cvboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
de4157257515400c2c25373591135f110227b68cvboxsync "crPackChromiumParametervCR(bad type)" );
de4157257515400c2c25373591135f110227b68cvboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
de4157257515400c2c25373591135f110227b68cvboxsync return;
de4157257515400c2c25373591135f110227b68cvboxsync }
de4157257515400c2c25373591135f110227b68cvboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
de4157257515400c2c25373591135f110227b68cvboxsync}
de4157257515400c2c25373591135f110227b68cvboxsync
de4157257515400c2c25373591135f110227b68cvboxsyncvoid PACK_APIENTRY crPackDeleteQueriesARB(GLsizei n, const GLuint * ids)
de4157257515400c2c25373591135f110227b68cvboxsync{
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync unsigned char *data_ptr;
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync int packet_length = sizeof(GLenum)+sizeof(n)+n*sizeof(*ids);
de4157257515400c2c25373591135f110227b68cvboxsync if (!ids) return;
de4157257515400c2c25373591135f110227b68cvboxsync data_ptr = (unsigned char *) crPackAlloc(packet_length);
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA(0, GLenum, CR_DELETEQUERIESARB_EXTEND_OPCODE);
de4157257515400c2c25373591135f110227b68cvboxsync WRITE_DATA(4, GLsizei, n);
de4157257515400c2c25373591135f110227b68cvboxsync crMemcpy(data_ptr + 8, ids, n*sizeof(*ids));
de4157257515400c2c25373591135f110227b68cvboxsync crHugePacket(CR_EXTEND_OPCODE, data_ptr);
de4157257515400c2c25373591135f110227b68cvboxsync crPackFree(data_ptr);
de4157257515400c2c25373591135f110227b68cvboxsync}
de4157257515400c2c25373591135f110227b68cvboxsync