Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJeroen Bakker <jbakker>2022-08-01 11:57:18 +0300
committerJeroen Bakker <jeroen@blender.org>2022-08-01 11:57:32 +0300
commit3393b7137e247383477eb38d938239fbb9221680 (patch)
treece0ae31d19aee50eb03dabd6467cb9ccbe64455a /tests
parent6749a4a8f02900db9f2ecae79820d9b418694706 (diff)
RenderReport: Add option to add platform specific overrides.
Reference images in the reference_override_dir will be chosen before images in reference_dir. This allows platform specific reference images, with a common base. Ignored when set to None. The caller is responsible of setting the reference override dir as the unit test is more aware what the definition of a platform is. Patch adds `gpu.platform.device_type_get` function to get the device type that blender has detected. Reviewed By: brecht Maniphest Tasks: T99046 Differential Revision: https://developer.blender.org/D15265
Diffstat (limited to 'tests')
-rw-r--r--tests/python/eevee_render_tests.py27
-rw-r--r--tests/python/gpu_info.py24
-rwxr-xr-xtests/python/modules/render_report.py17
3 files changed, 65 insertions, 3 deletions
diff --git a/tests/python/eevee_render_tests.py b/tests/python/eevee_render_tests.py
index 68895291044..34c15872a11 100644
--- a/tests/python/eevee_render_tests.py
+++ b/tests/python/eevee_render_tests.py
@@ -3,6 +3,7 @@
import argparse
import os
+import pathlib
import shlex
import shutil
import subprocess
@@ -98,6 +99,26 @@ if inside_blender:
print(e)
sys.exit(1)
+def get_gpu_device_type(blender):
+ command = [
+ blender,
+ "-noaudio",
+ "--background"
+ "--factory-startup",
+ "--python",
+ str(pathlib.Path(__file__).parent / "gpu_info.py")
+ ]
+ try:
+ completed_process = subprocess.run(command, stdout=subprocess.PIPE)
+ for line in completed_process.stdout.read_text():
+ if line.startswith("GPU_DEVICE_TYPE:"):
+ vendor = line.split(':')[1]
+ return vendor
+ except BaseException as e:
+ return None
+ return None
+
+
def get_arguments(filepath, output_filepath):
return [
@@ -134,10 +155,16 @@ def main():
idiff = args.idiff[0]
output_dir = args.outdir[0]
+ gpu_device_type = get_gpu_device_type(blender)
+ reference_override_dir = None
+ if gpu_device_type == "AMD":
+ reference_override_dir = "eevee_renders/amd"
+
from modules import render_report
report = render_report.Report("Eevee", output_dir, idiff)
report.set_pixelated(True)
report.set_reference_dir("eevee_renders")
+ report.set_reference_override_dir(reference_override_dir)
report.set_compare_engine('cycles', 'CPU')
test_dir_name = Path(test_dir).name
diff --git a/tests/python/gpu_info.py b/tests/python/gpu_info.py
new file mode 100644
index 00000000000..1df23d68000
--- /dev/null
+++ b/tests/python/gpu_info.py
@@ -0,0 +1,24 @@
+"""
+ Prints GPU backend information to the console and exits.
+
+ Use this script as `blender --background --python gpu_info.py`.
+"""
+import bpy
+import gpu
+import sys
+
+# Render with workbench to initialize the GPU backend otherwise it would fail when running in
+# background mode as the GPU backend won't be initialized.
+scene = bpy.context.scene
+scene.render.resolution_x = 1
+scene.render.resolution_y = 1
+scene.render.engine = "BLENDER_WORKBENCH"
+bpy.ops.render.render(animation=False, write_still=False)
+
+
+print('GPU_VENDOR:' + gpu.platform.vendor_get())
+print('GPU_RENDERER:' + gpu.platform.renderer_get())
+print('GPU_VERSION:' + gpu.platform.version_get())
+print('GPU_DEVICE_TYPE:' + gpu.platform.device_type_get())
+
+sys.exit(0) \ No newline at end of file
diff --git a/tests/python/modules/render_report.py b/tests/python/modules/render_report.py
index 15441918800..52f388586d8 100755
--- a/tests/python/modules/render_report.py
+++ b/tests/python/modules/render_report.py
@@ -78,12 +78,18 @@ def test_get_name(filepath):
return os.path.splitext(filename)[0]
-def test_get_images(output_dir, filepath, reference_dir):
+def test_get_images(output_dir, filepath, reference_dir, reference_override_dir):
testname = test_get_name(filepath)
dirpath = os.path.dirname(filepath)
old_dirpath = os.path.join(dirpath, reference_dir)
old_img = os.path.join(old_dirpath, testname + ".png")
+ if reference_override_dir:
+ override_dirpath = os.path.join(dirpath, reference_override_dir)
+ override_img = os.path.join(override_dirpath, testname + ".png")
+ if os.path.exists(override_img):
+ old_dirpath = override_dirpath
+ old_img = override_img
ref_dirpath = os.path.join(output_dir, os.path.basename(dirpath), "ref")
ref_img = os.path.join(ref_dirpath, testname + ".png")
@@ -108,6 +114,7 @@ class Report:
'output_dir',
'global_dir',
'reference_dir',
+ 'reference_override_dir',
'idiff',
'pixelated',
'fail_threshold',
@@ -127,6 +134,7 @@ class Report:
self.output_dir = output_dir
self.global_dir = os.path.dirname(output_dir)
self.reference_dir = 'reference_renders'
+ self.reference_override_dir = None
self.idiff = idiff
self.compare_engine = None
self.fail_threshold = 0.016
@@ -161,6 +169,9 @@ class Report:
def set_reference_dir(self, reference_dir):
self.reference_dir = reference_dir
+ def set_reference_override_dir(self, reference_override_dir):
+ self.reference_override_dir = reference_override_dir
+
def set_compare_engine(self, other_engine, other_device=None):
self.compare_engine = (other_engine, other_device)
@@ -343,7 +354,7 @@ class Report:
name = test_get_name(filepath)
name = name.replace('_', ' ')
- old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir)
+ old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir, self.reference_override_dir)
status = error if error else ""
tr_style = """ class="table-danger" """ if error else ""
@@ -390,7 +401,7 @@ class Report:
self.compare_tests += test_html
def _diff_output(self, filepath, tmp_filepath):
- old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir)
+ old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir, self.reference_override_dir)
# Create reference render directory.
old_dirpath = os.path.dirname(old_img)