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); } 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: 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);