e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncimport sys
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Two different paths to the packer and opengl_stub directories since this
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# script will be called from both cr/state_tracker/ and cr/spu/tilesort/.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncsys.path.append( '../packer' )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncsys.path.append( '../../packer' )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncsys.path.append( '../glapi_parser' )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncsys.path.append( '../../glapi_parser' )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfrom pack_currenttypes import *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncimport apiutil
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncapiutil.CopyrightC()
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncprint '''
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic double __read_double( const void *src )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const unsigned int *ui = (const unsigned int *) src;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync double d;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync ((unsigned int *) &d)[0] = ui[0];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync ((unsigned int *) &d)[1] = ui[1];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return d;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync'''
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfor k in gltypes.keys():
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for i in range(1,5):
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print 'static void __convert_%s%d (GLfloat *dst, const %s *src) {' % (k,i,gltypes[k]['type'])
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if k == 'd':
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for j in range(i-1):
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst++ = (GLfloat) __read_double(src++);'
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst = (GLfloat) __read_double(src);'
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for j in range(i-1):
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst++ = (GLfloat) *src++;';
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst = (GLfloat) *src;';
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '}\n';
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncscale = {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'ub' : 'CR_MAXUBYTE',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'b' : 'CR_MAXBYTE',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'us' : 'CR_MAXUSHORT',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 's' : 'CR_MAXSHORT',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'ui' : 'CR_MAXUINT',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'i' : 'CR_MAXINT',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'f' : '',
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync 'd' : ''
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfor k in gltypes.keys():
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if k != 'f' and k != 'd' and k != 'l':
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if k[0:1] == "N":
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync k2 = k[1:]
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync k2 = k
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for i in range(1,5):
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print 'static void __convert_rescale_%s%d (GLfloat *dst, const %s *src) {' % (k,i,gltypes[k2]['type'])
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for j in range(i-1):
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst++ = ((GLfloat) *src++) / %s;' % scale[k2]
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '\t*dst = ((GLfloat) *src) / %s;' % scale[k2]
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync print '}\n'
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncprint '''
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void __convert_boolean (GLboolean *dst, const GLboolean *src) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *dst = *src;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync'''