From 16ad7524a7531a4210e4b76ff2b61f8dad11e4ae Mon Sep 17 00:00:00 2001 From: Christoph Neuhauser Date: Fri, 10 Oct 2025 16:35:30 +0200 Subject: [PATCH 1/5] Fix: EEVEE: Write to vertex shader outputs to avoid Intel linking errors eevee_geom_world_vert.glsl and eevee_geom_volume_vert.glsl do not support shadows, but the shader validation pipeline still compiles the shadow variant of these shaders. This results in the fragment shader reading from inputs that are not written to as vertex shader outputs. On the Intel Windows OpenGL driver, this leads to a shader linking failure. This PR avoids the issue by writing zeros to the interface variables when MAT_SHADOW is defined. --- .../engines/eevee/shaders/eevee_geom_volume_vert.glsl | 8 ++++++++ .../draw/engines/eevee/shaders/eevee_geom_world_vert.glsl | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl b/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl index bffd8f6b165..6e96373fc00 100644 --- a/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl @@ -28,4 +28,12 @@ void main() interp.P = drw_point_object_to_world(lP); gl_Position = reverse_z::transform(drw_point_world_to_homogenous(interp.P)); + +#ifdef MAT_SHADOW + /* Volumes currently do not support shadow. But the shader validation pipeline still compiles the + * shadow variant of this shader. Avoid linking error on Intel Windows drivers. */ + shadow_iface.shadow_view_id = 0; + shadow_clip.position = float3(0); + shadow_clip.vector = float3(0); +#endif } diff --git a/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl b/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl index a9ab71bad4e..428b9486f45 100644 --- a/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl @@ -29,4 +29,12 @@ void main() interp.N = float3(1); gl_Position = reverse_z::transform(gl_Position); + +#ifdef MAT_SHADOW + /* This shader currently does not support shadow. But the shader validation pipeline still + * compiles the shadow variant of this shader. Avoid linking error on Intel Windows drivers. */ + shadow_iface.shadow_view_id = 0; + shadow_clip.position = float3(0); + shadow_clip.vector = float3(0); +#endif } From 7b5dfdf759b151812f4412c0c409a2fadd409b12 Mon Sep 17 00:00:00 2001 From: Christoph Neuhauser Date: Fri, 10 Oct 2025 17:23:05 +0200 Subject: [PATCH 2/5] Revert "Fix: EEVEE: Write to vertex shader outputs to avoid Intel linking errors" This reverts commit 16ad7524a7531a4210e4b76ff2b61f8dad11e4ae. The commit was accidentally pushed to the upstream branch instead of a fork branch. --- .../engines/eevee/shaders/eevee_geom_volume_vert.glsl | 8 -------- .../draw/engines/eevee/shaders/eevee_geom_world_vert.glsl | 8 -------- 2 files changed, 16 deletions(-) diff --git a/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl b/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl index 6e96373fc00..bffd8f6b165 100644 --- a/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/eevee_geom_volume_vert.glsl @@ -28,12 +28,4 @@ void main() interp.P = drw_point_object_to_world(lP); gl_Position = reverse_z::transform(drw_point_world_to_homogenous(interp.P)); - -#ifdef MAT_SHADOW - /* Volumes currently do not support shadow. But the shader validation pipeline still compiles the - * shadow variant of this shader. Avoid linking error on Intel Windows drivers. */ - shadow_iface.shadow_view_id = 0; - shadow_clip.position = float3(0); - shadow_clip.vector = float3(0); -#endif } diff --git a/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl b/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl index 428b9486f45..a9ab71bad4e 100644 --- a/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/eevee_geom_world_vert.glsl @@ -29,12 +29,4 @@ void main() interp.N = float3(1); gl_Position = reverse_z::transform(gl_Position); - -#ifdef MAT_SHADOW - /* This shader currently does not support shadow. But the shader validation pipeline still - * compiles the shadow variant of this shader. Avoid linking error on Intel Windows drivers. */ - shadow_iface.shadow_view_id = 0; - shadow_clip.position = float3(0); - shadow_clip.vector = float3(0); -#endif } From 38adb8f1a410786f9ed519afcedc3ce51e18881f Mon Sep 17 00:00:00 2001 From: Nikita Sirgienko Date: Fri, 10 Oct 2025 17:25:29 +0200 Subject: [PATCH 3/5] Cycles: oneAPI: Fix duplicated GPU device entries on some setups In some hardware configurations, it is possible that DPC++ or Intel Drivers wrongfully report all devices twice. It is already being worked on internally, and the fixes will be available in the future - but for now, we need a workaround for this problem in Blender as well, to ensure that our end-users are not impacted. Pull Request: https://projects.blender.org/blender/blender/pulls/147731 --- intern/cycles/device/oneapi/device_impl.cpp | 46 +++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/intern/cycles/device/oneapi/device_impl.cpp b/intern/cycles/device/oneapi/device_impl.cpp index 3d38f0fdd30..dc483487cc0 100644 --- a/intern/cycles/device/oneapi/device_impl.cpp +++ b/intern/cycles/device/oneapi/device_impl.cpp @@ -1531,6 +1531,52 @@ std::vector available_sycl_devices(bool *multiple_dgpus_detected = } } } + + /* NOTE(sirgienko) Due to some changes in the latest Intel Drivers, the currently used + * DPC++ compiler will duplicate devices on some platforms, which have a discrete Intel GPU + * together with 11th-14th Gen CPUs, with iGPU enabled. This will be fixed in upstream + * DPC++ 6.3, but for now, in order to not confuse our Blender end-users with several + * duplicated GPUs, we will avoid adding duplicates into the device list. */ + /* The order of adding devices is not important, as both duplicated GPUs are fully + * functional and performant, so we can pick up the first one we find. */ + if (!filter_out) { + for (const sycl::device &already_available_device : available_devices) { + std::array devices = {already_available_device, device}; + std::vector uuids; + for (int i = 0; i < 2; i++) { + /* As this is an Intel-specific enumeration issue - we are collecting Intel UUID + * expecting it to be supported on Intel GPUs. */ + if (devices[i].has(sycl::aspect::ext_intel_device_info_uuid)) { + uuids.push_back(devices[i].get_info()); + } + else if (devices[i].get_platform().get_info() == + "Intel(R) Corporation") + { + /* Better to ensure that our expectation that all Intel devices support the UUID + * extension is correct. If one day this is not true, then we will at least have a + * warning message in the log. */ + const std::string &device_name = devices[i].get_info(); + LOG_WARNING << "Despite expectation, Intel oneAPI device '" << device_name + << "' is not supporting Intel SYCL UUID extension."; + } + } + if (uuids.size() == 2) { + if (uuids[0] == uuids[1]) { + const std::string &device_name = device.get_info(); + const std::string &platform_name = + device.get_platform().get_info(); + LOG_DEBUG + << "Detecting that oneAPI device '" << device_name << "' of platform '" + << platform_name + << "' is identical (by UUID comparison) to an already added device in the " + "list of available devices, so it will not be added again."; + filter_out = true; + break; + } + } + } + } + if (!filter_out) { available_devices.push_back(device); } From 88308e108ebea1d70b51e167aa4d7432e99aeadb Mon Sep 17 00:00:00 2001 From: Janne Nylander Date: Fri, 10 Oct 2025 17:29:08 +0200 Subject: [PATCH 4/5] Fix #147739: Python animation baking script was checking bone selection from wrong type of bone The script was checking if a bone was selected via Bone.select. As of 5.0, this is not available. Instead, PoseBone.select should be used. Pull Request: https://projects.blender.org/blender/blender/pulls/147743 --- scripts/modules/bpy_extras/anim_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/modules/bpy_extras/anim_utils.py b/scripts/modules/bpy_extras/anim_utils.py index d0fbfd7f108..eb5475fd9cd 100644 --- a/scripts/modules/bpy_extras/anim_utils.py +++ b/scripts/modules/bpy_extras/anim_utils.py @@ -465,7 +465,7 @@ def bake_action_iter( frame=f, group_name="Armature Custom Properties") for name, pbone in obj.pose.bones.items(): - if bake_options.only_selected and not pbone.bone.select: + if bake_options.only_selected and not pbone.select: continue if bake_options.do_constraint_clear: From 0262b939a04feaa31b1d072916c71d13a50b40b6 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Fri, 10 Oct 2025 18:18:58 +0200 Subject: [PATCH 5/5] Fix #147804: Alignment of Playhead parts With changes to the playhead to correctly draw when separated from the vertical line (for time stretching) some parts are slightly misaligned. This PR corrects the vertical alignment of the top of the triangular part to the number box. It also corrects horizontal alignment of the vertical line to be pixel-aligned based on the interior, not the shadow exterior. Pull Request: https://projects.blender.org/blender/blender/pulls/147825 --- source/blender/editors/animation/time_scrub_ui.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/animation/time_scrub_ui.cc b/source/blender/editors/animation/time_scrub_ui.cc index 285b3ac5580..4dfbc0728c2 100644 --- a/source/blender/editors/animation/time_scrub_ui.cc +++ b/source/blender/editors/animation/time_scrub_ui.cc @@ -94,7 +94,7 @@ static void draw_current_frame(const Scene *scene, const float box_width = std::max(text_width + (2.0f * text_padding), box_min_width); const float box_margin = 2.0f * UI_SCALE_FAC; const float shadow_width = UI_SCALE_FAC; - const float tri_top = floor(scrub_region_rect->ymin + box_margin); + const float tri_top = ceil(scrub_region_rect->ymin + box_margin); const float tri_half_width = 6.0f * UI_SCALE_FAC; const float tri_height = 6.0f * UI_SCALE_FAC; rctf rect{}; @@ -123,8 +123,8 @@ static void draw_current_frame(const Scene *scene, immUnbindProgram(); /* Vertical line. */ - rect.xmin = floor(subframe_x - U.pixelsize - shadow_width); - rect.xmax = floor(subframe_x + U.pixelsize + 1.0f + shadow_width); + rect.xmin = floor(subframe_x - U.pixelsize) - shadow_width; + rect.xmax = floor(subframe_x + U.pixelsize + 1.0f) + shadow_width; rect.ymin = 0.0f; rect.ymax = ceil(scrub_region_rect->ymax - box_margin + shadow_width); UI_draw_roundbox_4fv_ex(&rect, fg_color, nullptr, 1.0f, bg_color, shadow_width, 0.0f);