summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/libANGLE/gen_copy_conversion_table.py
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/libANGLE/gen_copy_conversion_table.py')
-rw-r--r--gfx/angle/src/libANGLE/gen_copy_conversion_table.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/gen_copy_conversion_table.py b/gfx/angle/src/libANGLE/gen_copy_conversion_table.py
new file mode 100644
index 000000000..f2c9603d5
--- /dev/null
+++ b/gfx/angle/src/libANGLE/gen_copy_conversion_table.py
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+# Copyright 2016 The ANGLE Project Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# gen_copy_conversion_table.py:
+# Code generation for ES3 valid copy conversions table format map.
+
+from datetime import date
+import sys
+
+sys.path.append('renderer')
+import angle_format
+
+template_cpp = """// GENERATED FILE - DO NOT EDIT.
+// Generated by {script_name} using data from {data_source_name}.
+//
+// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// format_map:
+// Determining the sized internal format from a (format,type) pair.
+// Also check es3 format combinations for validity.
+
+#include "angle_gl.h"
+#include "common/debug.h"
+
+namespace gl
+{{
+
+bool ValidES3CopyConversion(GLenum textureFormat, GLenum framebufferFormat)
+{{
+ switch (textureFormat)
+ {{
+{texture_format_cases} default:
+ break;
+ }}
+
+ return false;
+}}
+
+}} // namespace gl
+"""
+
+template_format_case = """ case {texture_format}:
+ switch (framebufferFormat)
+ {{
+{framebuffer_format_cases} return true;
+ default:
+ break;
+ }}
+ break;
+
+"""
+
+template_simple_case = """ case {key}:
+"""
+
+def parse_texture_format_case(texture_format, framebuffer_formats):
+ framebuffer_format_cases = ""
+ for framebuffer_format in sorted(framebuffer_formats):
+ framebuffer_format_cases += template_simple_case.format(key = framebuffer_format)
+ return template_format_case.format(
+ texture_format = texture_format, framebuffer_format_cases = framebuffer_format_cases)
+
+data_source_name = 'es3_copy_conversion_formats.json'
+
+json_data = angle_format.load_json(data_source_name)
+
+format_map = {}
+
+for description, data in json_data.iteritems():
+ for texture_format, framebuffer_format in data:
+ if texture_format not in format_map:
+ format_map[texture_format] = []
+ format_map[texture_format] += [ framebuffer_format ]
+
+texture_format_cases = ""
+
+for texture_format, framebuffer_formats in sorted(format_map.iteritems()):
+ texture_format_cases += parse_texture_format_case(texture_format, framebuffer_formats)
+
+with open('es3_copy_conversion_table_autogen.cpp', 'wt') as out_file:
+ output_cpp = template_cpp.format(
+ script_name = sys.argv[0],
+ data_source_name = data_source_name,
+ copyright_year = date.today().year,
+ texture_format_cases = texture_format_cases)
+ out_file.write(output_cpp)
+ out_file.close()