unpack_arrays.c revision 4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4ae
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 "cr_error.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "unpack_extend.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "unpacker.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \mainpage Unpacker
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \section UnpackerIntroduction Introduction
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Chromium consists of all the top-level files in the cr
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * directory. The unpacker module basically takes care of API dispatch,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * and OpenGL state management.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendVertexPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 8, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 12, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 16, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = (GLintptrARB) READ_DATA( 20, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexPointer( size, type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendTexCoordPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 8, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 12, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 16, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 20, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.TexCoordPointer( size, type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendNormalPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 8, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 12, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 16, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.NormalPointer( type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendIndexPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 8, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 12, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 16, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.IndexPointer( type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendEdgeFlagPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 8, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 12, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.EdgeFlagPointer( stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendColorPointer(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 8, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 12, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 16, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 20, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.ColorPointer( size, type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendFogCoordPointerEXT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 8, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 12, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 16, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.FogCoordPointerEXT( type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendSecondaryColorPointerEXT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 8, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 12, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 16, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 20, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.SecondaryColorPointerEXT( size, type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendVertexAttribPointerARB(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLuint index = READ_DATA( 8, GLuint);
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 12, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 16, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLboolean normalized = READ_DATA( 20, GLboolean );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 24, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 28, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexAttribPointerARB( index, size, type, normalized, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendVertexAttribPointerNV(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLuint index = READ_DATA( 8, GLuint);
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLint size = READ_DATA( 12, GLint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum type = READ_DATA( 16, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 20, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 24, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexAttribPointerNV( index, size, type, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendInterleavedArrays(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLenum format = READ_DATA( 8, GLenum );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync GLsizei stride = READ_DATA( 12, GLsizei );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = READ_DATA( 16, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.InterleavedArrays( format, stride, (void *) pointer );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendDrawElements(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLenum mode = READ_DATA( 8, GLenum );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLsizei count = READ_DATA( 12, GLsizei );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLenum type = READ_DATA( 16, GLenum );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB indices = READ_DATA( 20, GLuint );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync void * indexptr;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#ifdef CR_ARB_vertex_buffer_object
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLboolean hasidxdata = READ_DATA(24, GLboolean);
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync indexptr = hasidxdata ? DATA_POINTER(24+sizeof(GLboolean), void) : (void*)indices;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#else
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync indexptr = DATA_POINTER(24, void);
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#endif
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync cr_unpackDispatch.DrawElements(mode, count, type, indexptr);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackExtendDrawRangeElements(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLenum mode = READ_DATA( 8, GLenum );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLuint start = READ_DATA( 12, GLuint );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLuint end = READ_DATA( 16, GLuint );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLsizei count = READ_DATA( 20, GLsizei );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLenum type = READ_DATA( 24, GLenum );
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB indices = READ_DATA( 28, GLuint );
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync void * indexptr;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#ifdef CR_ARB_vertex_buffer_object
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync GLboolean hasidxdata = READ_DATA(32, GLboolean);
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync indexptr = hasidxdata ? DATA_POINTER(32+sizeof(GLboolean), void) : (void*)indices;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#else
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync indexptr = DATA_POINTER(32, void);
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync#endif
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync cr_unpackDispatch.DrawRangeElements(mode, start, end, count, type, indexptr);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackMultiDrawArraysEXT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync crError( "Can't decode MultiDrawArraysEXT" );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crUnpackMultiDrawElementsEXT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync crError( "Can't decode MultiDrawElementsEXT" );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}