Fix #162523: GPU: Add mipmap workaround for Intel Arc Windows OpenGL

The compute-shader based function `update_mipmaps` can generate broken
mipmaps for Intel Arc Windows OpenGL. A workaround for falling back to
`generate_mipmap` is added to mitigate the issue. Furthermore, a render
test is added that catches the issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/162524
This commit is contained in:
Christoph Neuhauser 2026-08-13 16:03:06 +02:00
parent f6c6ee2405
commit 9dfdae1c36
7 changed files with 89 additions and 24 deletions

View file

@ -915,6 +915,7 @@ if((WITH_CYCLES OR WITH_GPU_RENDER_TESTS) AND TEST_SRC_DIR_EXISTS)
image_colorspace
image_data_types
image_mapping
image_mipmap
image_texture_limit
integrator
light
@ -998,7 +999,7 @@ if((WITH_CYCLES OR WITH_GPU_RENDER_TESTS) AND TEST_SRC_DIR_EXISTS)
"Supported devices are: ${_cycles_all_test_devices}")
endif()
string(TOLOWER "${_cycles_device}" _cycles_device_lower)
set(_cycles_render_tests bake;bake_raytrace;${render_tests};osl;image_mipmap;updates)
set(_cycles_render_tests bake;bake_raytrace;${render_tests};osl;updates)
set(_cycles_osl_test_type none)
if(WITH_CYCLES_OSL)

View file

@ -67,6 +67,17 @@ BLOCKLIST = [
"light_path_is_camera_ray.blend",
# Exhibit non-deterministic (to be fixed).
"background_scene.blend",
# Currently, the only image_mipmap test enabled for EEVEE is image_mipmap_large_tex.blend.
"image_cache_evict.blend",
"image_mipmap_area_light.blend",
"image_mipmap_filter_glossy.blend",
"image_mipmap_incomplete_derivs.blend",
"image_mipmap_light_tree.blend",
"image_mipmap_transparent_shadow.blend",
"image_mipmap_volume.blend",
"image_mipmap_working_space.blend",
"image_mipmap_world.blend",
"image_mipmap_world_sun.blend",
### Cycles only tests go here ###
]
@ -384,6 +395,10 @@ def main():
elif test_dir_name in {"texture"}:
report.set_fail_percent(0.14)
report.set_fail_threshold(6.0 / 255.0)
elif test_dir_name.startswith('image_mipmap'):
# Reference images on the CI worker seem to differ slightly from images on
# an NVIDIA RTX 4060 Ti with driver 610.74
report.set_fail_threshold(6.0 / 255.0)
elif test_dir_name.startswith('camera'):
# camera_stereo_panoramic have some platform specific small differences
report.set_fail_percent(0.14)
@ -474,6 +489,13 @@ def main():
# Some shadow difference, to be investigated
report.set_fail_percent(0.09)
report.set_fail_threshold(6.0 / 255.0)
elif test_dir_name.startswith('image_mipmap'):
# Texture interpolation can look slightly different.
if gpu_vendor == "AMD":
report.set_fail_percent(0.39)
else:
report.set_fail_percent(0.08)
report.set_fail_threshold(8.0 / 255.0)
ok = report.run(args.testdir, args.blender, get_arguments, batch=args.batch)
sys.exit(not ok)

View file

@ -24,6 +24,12 @@ except ImportError:
# this script is run during preparation steps.
pass
BLOCKLIST = [
# Currently, image_mipmap tests are not enabled for storm-usd
"image_cache_evict.blend",
"image_mipmap_.*.blend",
]
# Unsupported or broken scenarios for the Storm render engine
BLOCKLIST_HYDRA = [
# Corrupted output around borders
@ -235,7 +241,7 @@ def main():
parser = create_argparse()
args = parser.parse_args()
blocklist = []
blocklist = BLOCKLIST
if args.gpu_backend == "metal":
blocklist += BLOCKLIST_METAL
elif args.gpu_backend == "vulkan":