diff options
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py')
| -rw-r--r-- | src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py b/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py new file mode 100644 index 00000000..7103ed4e --- /dev/null +++ b/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py @@ -0,0 +1,257 @@ +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 <cr_dump.h> +#include "cr_pixeldata.h" + +#include <iprt/cdefs.h> +#include <iprt/types.h> +#include <iprt/mem.h> + +#include <stdio.h> + +#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=="); +} +""" |
