import sys import apiutil import sys, re, string line_re = re.compile(r'^(\S+)\s+(GL_\S+)\s+(.*)\s*$') extensions_line_re = re.compile(r'^(\S+)\s+(GL_\S+)\s(\S+)\s+(.*)\s*$') params = {} extended_params = {} input = open( sys.argv[2]+"/state_isenabled.txt", 'r' ) for line in input.readlines(): match = line_re.match( line ) if match: type = match.group(1) pname = match.group(2) fields = string.split( match.group(3) ) params[pname] = ( type, fields ) input = open( sys.argv[2]+"/state_extensions_isenabled.txt", 'r' ) for line in input.readlines(): match = extensions_line_re.match( line ) if match: type = match.group(1) pname = match.group(2) ifdef = match.group(3) fields = string.split( match.group(4) ) extended_params[pname] = ( type, ifdef, fields ) apiutil.CopyrightC() print """#include "cr_blitter.h" #include "cr_spu.h" #include "chromium.h" #include "cr_error.h" #include "cr_net.h" #include "cr_rand.h" #include "cr_mem.h" #include "cr_string.h" #include #include "cr_pixeldata.h" #include #include #include #include #ifdef VBOX_WITH_CRDUMPER """ from get_sizes import *; getprops = apiutil.ParamProps("GetDoublev") enableprops = apiutil.ParamProps("Enable") #print "//missing get props:" #for prop in getprops: # try: # tmp = num_get_values[prop] # except KeyError: # try: # keyvalues = extensions_num_get_values[prop] # except KeyError: # print "//%s" % prop # print """ static void crRecDumpPrintVal(CR_DUMPER *pDumper, struct nv_struct *pDesc, float *pfData) { char aBuf[4096]; crDmpFormatArray(aBuf, sizeof (aBuf), "%f", sizeof (float), pfData, pDesc->num_values); crDmpStrF(pDumper, "%s = %s;", pDesc->pszName, aBuf); } void crRecDumpGlGetState(CR_RECORDER *pRec, CRContext *ctx) { float afData[CR_MAX_GET_VALUES]; struct nv_struct *pDesc; for (pDesc = num_values_array; pDesc->num_values != 0 ; pDesc++) { memset(afData, 0, sizeof(afData)); pRec->pDispatch->GetFloatv(pDesc->pname, afData); crRecDumpPrintVal(pRec->pDumper, pDesc, afData); } } void crRecDumpGlEnableState(CR_RECORDER *pRec, CRContext *ctx) { GLboolean fEnabled; """ keys = params.keys() keys.sort(); for pname in keys: print "\tfEnabled = pRec->pDispatch->IsEnabled(%s);" % pname print "\tcrDmpStrF(pRec->pDumper, \"%s = %%d;\", fEnabled);" % pname keys = extended_params.keys(); keys.sort() for pname in keys: (srctype,ifdef,fields) = extended_params[pname] ext = ifdef[3:] # the extension name with the "GL_" prefix removed ext = ifdef print '#ifdef CR_%s' % ext print "\tfEnabled = pRec->pDispatch->IsEnabled(%s);" % pname print "\tcrDmpStrF(pRec->pDumper, \"%s = %%d;\", fEnabled);" % pname print '#endif /* CR_%s */' % ext #print "//missing enable props:" #for prop in enableprops: # try: # keyvalues = params[prop] # except KeyError: # try: # keyvalues = extended_params[prop] # except KeyError: # print "//%s" % prop # print """ } #endif """ texenv_mappings = { 'GL_TEXTURE_ENV' : [ 'GL_TEXTURE_ENV_MODE', 'GL_TEXTURE_ENV_COLOR', 'GL_COMBINE_RGB', 'GL_COMBINE_ALPHA', 'GL_RGB_SCALE', 'GL_ALPHA_SCALE', 'GL_SRC0_RGB', 'GL_SRC1_RGB', 'GL_SRC2_RGB', 'GL_SRC0_ALPHA', 'GL_SRC1_ALPHA', 'GL_SRC2_ALPHA' ], 'GL_TEXTURE_FILTER_CONTROL' : [ 'GL_TEXTURE_LOD_BIAS' ], 'GL_POINT_SPRITE' : [ 'GL_COORD_REPLACE' ] } texgen_coords = [ 'GL_S', 'GL_T', 'GL_R', 'GL_Q' ] texgen_names = [ 'GL_TEXTURE_GEN_MODE', 'GL_OBJECT_PLANE', 'GL_EYE_PLANE' ] texparam_names = [ 'GL_TEXTURE_MAG_FILTER', 'GL_TEXTURE_MIN_FILTER', 'GL_TEXTURE_MIN_LOD', 'GL_TEXTURE_MAX_LOD', 'GL_TEXTURE_BASE_LEVEL', 'GL_TEXTURE_MAX_LEVEL', 'GL_TEXTURE_WRAP_S', 'GL_TEXTURE_WRAP_T', 'GL_TEXTURE_WRAP_R', 'GL_TEXTURE_BORDER_COLOR', 'GL_TEXTURE_PRIORITY', 'GL_TEXTURE_RESIDENT', 'GL_TEXTURE_COMPARE_MODE', 'GL_TEXTURE_COMPARE_FUNC', 'GL_DEPTH_TEXTURE_MODE', 'GL_GENERATE_MIPMAP' ] print """ void crRecDumpTexParam(CR_RECORDER *pRec, CRContext *ctx, GLenum enmTarget) { GLfloat afBuf[4]; char acBuf[1024]; unsigned int cComponents; crDmpStrF(pRec->pDumper, "==TEX_PARAM for target(0x%x)==", enmTarget); """ for pname in texparam_names: print "\tcComponents = crStateHlpComponentsCount(%s);" % pname print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));" print "\tmemset(afBuf, 0, sizeof (afBuf));" print "\tpRec->pDispatch->GetTexParameterfv(enmTarget, %s, afBuf);" % pname print "\tcrDmpFormatArray(acBuf, sizeof (acBuf), \"%f\", sizeof (afBuf[0]), afBuf, cComponents);" print "\tcrDmpStrF(pRec->pDumper, \"%s = %%s;\", acBuf);" % pname print """ crDmpStrF(pRec->pDumper, "==Done TEX_PARAM for target(0x%x)==", enmTarget); } """ print """ void crRecDumpTexEnv(CR_RECORDER *pRec, CRContext *ctx) { GLfloat afBuf[4]; char acBuf[1024]; unsigned int cComponents; crDmpStrF(pRec->pDumper, "==TEX_ENV=="); """ keys = texenv_mappings.keys() keys.sort(); for target in keys: print "\tcrDmpStrF(pRec->pDumper, \"===%s===\");" % target values = texenv_mappings[target] for pname in values: print "\tcComponents = crStateHlpComponentsCount(%s);" % pname print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));" print "\tmemset(afBuf, 0, sizeof (afBuf));" print "\tpRec->pDispatch->GetTexEnvfv(%s, %s, afBuf);" % (target, pname) print "\tcrDmpFormatArray(acBuf, sizeof (acBuf), \"%f\", sizeof (afBuf[0]), afBuf, cComponents);" print "\tcrDmpStrF(pRec->pDumper, \"%s = %%s;\", acBuf);" % pname print "\tcrDmpStrF(pRec->pDumper, \"===Done %s===\");" % target print """ crDmpStrF(pRec->pDumper, "==Done TEX_ENV=="); } """ print """ void crRecDumpTexGen(CR_RECORDER *pRec, CRContext *ctx) { GLdouble afBuf[4]; char acBuf[1024]; unsigned int cComponents; crDmpStrF(pRec->pDumper, "==TEX_GEN=="); """ for coord in texgen_coords: print "\tcrDmpStrF(pRec->pDumper, \"===%s===\");" % coord for pname in texgen_names: print "\tcComponents = crStateHlpComponentsCount(%s);" % pname print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));" print "\tmemset(afBuf, 0, sizeof (afBuf));" print "\tpRec->pDispatch->GetTexGendv(%s, %s, afBuf);" % (coord, pname) print "\tcrDmpFormatArray(acBuf, sizeof (acBuf), \"%f\", sizeof (afBuf[0]), afBuf, cComponents);" print "\tcrDmpStrF(pRec->pDumper, \"%s = %%s;\", acBuf);" % pname print "\tcrDmpStrF(pRec->pDumper, \"===Done %s===\");" % coord print """ crDmpStrF(pRec->pDumper, "==Done TEX_GEN=="); } """