Merge branch 'blender-v4.5-release'

This commit is contained in:
Brecht Van Lommel
2025-06-05 20:37:59 +02:00
4 changed files with 70 additions and 7 deletions

View File

@@ -764,6 +764,41 @@ void OneapiDevice::tex_alloc(device_texture &mem)
sycl::ext::oneapi::experimental::image_descriptor desc{};
if (mem.data_height > 0) {
const sycl::device &device = reinterpret_cast<sycl::queue *>(queue)->get_device();
if (mem.data_depth > 1) {
const size_t max_width = device.get_info<sycl::info::device::image3d_max_width>();
const size_t max_height = device.get_info<sycl::info::device::image3d_max_height>();
const size_t max_depth = device.get_info<sycl::info::device::image3d_max_depth>();
if (mem.data_width > max_width || mem.data_height > max_height ||
mem.data_depth > max_depth)
{
set_error(string_printf(
"Maximum GPU 3D texture size exceeded (max %zux%zux%zu, found %zux%zux%zu)",
max_width,
max_height,
max_depth,
mem.data_width,
mem.data_height,
mem.data_depth));
return;
}
}
else {
const size_t max_width = device.get_info<sycl::info::device::image2d_max_width>();
const size_t max_height = device.get_info<sycl::info::device::image2d_max_height>();
if (mem.data_width > max_width || mem.data_height > max_height) {
set_error(
string_printf("Maximum GPU 2D texture size exceeded (max %zux%zu, found %zux%zu)",
max_width,
max_height,
mem.data_width,
mem.data_height));
return;
}
}
/* 2D/3D texture -- Tile optimized */
size_t depth = mem.data_depth == 1 ? 0 : mem.data_depth;
desc = sycl::ext::oneapi::experimental::image_descriptor(
@@ -775,6 +810,10 @@ void OneapiDevice::tex_alloc(device_texture &mem)
sycl::ext::oneapi::experimental::image_mem_handle memHandle =
sycl::ext::oneapi::experimental::alloc_image_mem(desc, *queue);
if (!memHandle.raw_handle) {
set_error("GPU texture allocation failed: Raw handle is null");
return;
}
/* Copy data from host to the texture properly based on the texture description */
queue->ext_oneapi_copy(mem.host_pointer, memHandle, desc);
@@ -848,8 +887,7 @@ void OneapiDevice::tex_alloc(device_texture &mem)
}
}
catch (sycl::exception const &e) {
set_error("oneAPI texture allocation error: got runtime exception \"" + string(e.what()) +
"\"");
set_error("GPU texture allocation failed: runtime exception \"" + string(e.what()) + "\"");
}
}

View File

@@ -12,6 +12,8 @@
namespace blender::asset_system {
class AssetLibraryService;
/**
* All catalogs that are owned by a single asset library, and managed by a single instance of
* #AssetCatalogService. The undo system for asset catalog edits contains historical copies of this
@@ -35,6 +37,7 @@ class AssetCatalogCollection {
bool has_unsaved_changes_ = false;
friend AssetCatalogService;
friend AssetLibraryService;
public:
AssetCatalogCollection() = default;

View File

@@ -9,6 +9,7 @@
#include "BKE_blender.hh"
#include "BKE_preferences.h"
#include "BLI_fileops.h" // IWYU pragma: keep
#include "BLI_path_utils.hh"
#include "BLI_string_ref.hh"
@@ -20,6 +21,8 @@
#include "AS_asset_library.hh"
#include "AS_essentials_library.hh"
#include "all_library.hh"
#include "asset_catalog_collection.hh"
#include "asset_catalog_definition_file.hh" // IWYU pragma: keep
#include "asset_library_service.hh"
#include "essentials_library.hh"
#include "on_disk_library.hh"
@@ -251,13 +254,24 @@ AssetLibrary *AssetLibraryService::move_runtime_current_file_into_on_disk_librar
library_service.current_file_library_->catalog_service_);
}
on_disk_library->catalog_service().asset_library_root_ = on_disk_library->root_path();
AssetCatalogService &catalog_service = on_disk_library->catalog_service();
catalog_service.asset_library_root_ = on_disk_library->root_path();
/* The catalogs are not stored on disk, so there should not be any CDF. Otherwise, we'd have to
* remap their stored file-path too (#AssetCatalogDefinitionFile.file_path). */
BLI_assert_msg(on_disk_library->catalog_service().get_catalog_definition_file() == nullptr,
BLI_assert_msg(catalog_service.get_catalog_definition_file() == nullptr,
"new on-disk library shouldn't have catalog definition files - root path "
"changed, so they would have to be relocated");
{
char asset_lib_cdf_path[PATH_MAX];
BLI_path_join(asset_lib_cdf_path,
sizeof(asset_lib_cdf_path),
on_disk_library->root_path().c_str(),
AssetCatalogService::DEFAULT_CATALOG_FILENAME.c_str());
catalog_service.catalog_collection_->catalog_definition_file_ =
catalog_service.construct_cdf_in_memory(asset_lib_cdf_path);
}
library_service.current_file_library_ = nullptr;
return on_disk_library;

View File

@@ -1095,14 +1095,22 @@ void transform_convert_mesh_connectivity_distance(BMesh *bm,
}
if (bmesh_test_dist_add(v2, v1, nullptr, dists, index, mtx)) {
/* Add adjacent loose edges to the queue, or all edges if this is a loose edge.
* Other edges are handled by propagation across edges below. */
/* Add adjacent edges to the queue if:
* - Adjacent edge is loose
* - Edge itself is loose
* - Edge has vertex that was originally selected
* In all these cases a direct distance along the edge is accurate and
* required to make sure we visit all edges. Other edges are handled by
* propagation across edges below. */
const bool need_direct_distance = BM_elem_flag_test(e, tag_loose) ||
BM_elem_flag_test(v1, BM_ELEM_SELECT) ||
BM_elem_flag_test(v2, BM_ELEM_SELECT);
BMEdge *e_other;
BMIter eiter;
BM_ITER_ELEM (e_other, &eiter, v2, BM_EDGES_OF_VERT) {
if (e_other != e && BM_elem_flag_test(e_other, tag_queued) == 0 &&
!BM_elem_flag_test(e_other, BM_ELEM_HIDDEN) &&
(BM_elem_flag_test(e, tag_loose) || BM_elem_flag_test(e_other, tag_loose)))
(need_direct_distance || BM_elem_flag_test(e_other, tag_loose)))
{
BM_elem_flag_enable(e_other, tag_queued);
BLI_LINKSTACK_PUSH(queue_next, e_other);