summaryrefslogtreecommitdiffstats
path: root/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
commitf8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch)
tree26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
parentInitial commit. (diff)
downloadvirtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.tar.xz
virtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.zip
Adding upstream version 6.0.4-dfsg.upstream/6.0.4-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py')
-rwxr-xr-xsrc/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py249
1 files changed, 249 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 100755
index 00000000..c4cae06e
--- /dev/null
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
@@ -0,0 +1,249 @@
+from __future__ import print_function
+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;
+""")
+for pname in sorted(params.keys()):
+ print("\tfEnabled = pRec->pDispatch->IsEnabled(%s);" % pname)
+ print("\tcrDmpStrF(pRec->pDumper, \"%s = %%d;\", fEnabled);" % pname)
+
+for pname in sorted(extended_params.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==");
+""")
+
+for target in sorted(texenv_mappings.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==");
+}
+""")