summaryrefslogtreecommitdiff
path: root/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py')
-rw-r--r--src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py257
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==");
+}
+"""