From c390377c3c4c8e15ad017989abe6a967229091bc Mon Sep 17 00:00:00 2001 From: 101001000 Date: Mon, 4 Sep 2023 05:16:11 +0200 Subject: [PATCH] added multiplatform --- src/CommandManager.cpp | 1 + src/Managers.cpp | 16 ++++++++++------ src/kernel.h | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/CommandManager.cpp b/src/CommandManager.cpp index 9275739..2453269 100644 --- a/src/CommandManager.cpp +++ b/src/CommandManager.cpp @@ -162,6 +162,7 @@ RenderParameters ConfigTCPLoadInputCommand::load() { json_data["sample_target"].as_int64(), json_data["denoise"].as_bool(), json_data["device"].as_string().c_str(), + json_data["platform"].as_string().c_str(), json_data["block_size"].as_int64()); } catch (std::exception const& e) { diff --git a/src/Managers.cpp b/src/Managers.cpp index e125217..7d45c08 100644 --- a/src/Managers.cpp +++ b/src/Managers.cpp @@ -190,12 +190,15 @@ class CUDASelector : public sycl::device_selector { class NameSelector : public sycl::device_selector { public: - std::string name; + std::string name, platname; - NameSelector(std::string _name) : name(_name) {}; + NameSelector(std::string _name, std::string _platname) : name(_name), platname(_platname) {}; int operator()(const sycl::device& device) const override { - if (device.get_info() == name) { + + sycl::platform plat = device.get_info(); + + if (device.get_info() == name && plat.get_info() == platname) { return 1; } else { @@ -238,8 +241,8 @@ void RenderingManager::start_rendering(Scene* scene) { LOG(trace) << "RenderingManager::start_rendering()"; try { - k_q = sycl::queue(NameSelector(rd.pars.device)); - d_q = sycl::queue(NameSelector(rd.pars.device)); + k_q = sycl::queue(NameSelector(rd.pars.device, rd.pars.platform)); + d_q = sycl::queue(NameSelector(rd.pars.device, rd.pars.platform)); } catch (std::exception const& e) { LOG(error) << e.what(); @@ -248,6 +251,7 @@ void RenderingManager::start_rendering(Scene* scene) { sycl::device device = k_q.get_device(); LOG(info) << "Device selected: " << device.get_info(); + LOG(info) << "Platform selected: " << device.get_info().get_info(); auto work_item_dim = device.get_info(); //auto work_item_size = device.get_info(); @@ -255,7 +259,7 @@ void RenderingManager::start_rendering(Scene* scene) { //auto test = sycl::info::device::max_work_item_dimensions - //LOG(info) << "dim " << work_item_dim << " is_x: " << work_item_size[0] << " is_y: " << work_item_size[1] << " is_z: " << work_item_size[2] << " gs: " << work_item_group_size; + LOG(info) << "dim " << work_item_dim << " gs: " << work_item_group_size; dev_scene = sycl::malloc_device(1, k_q); diff --git a/src/kernel.h b/src/kernel.h index 0960e50..4c3dccd 100644 --- a/src/kernel.h +++ b/src/kernel.h @@ -53,12 +53,12 @@ struct RenderParameters { unsigned int width, height; unsigned int sampleTarget; unsigned int block_size; - std::string device; + std::string device, platform; bool denoise; bool passes_enabled[PASSES_COUNT]; - RenderParameters(unsigned int width, unsigned int height, unsigned int sampleTarget, bool denoise, std::string _device, unsigned int _block_size) : width(width), height(height), sampleTarget(sampleTarget), denoise(denoise), device(_device), block_size(_block_size) { + RenderParameters(unsigned int width, unsigned int height, unsigned int sampleTarget, bool denoise, std::string _device, std::string _platform, unsigned int _block_size) : width(width), height(height), sampleTarget(sampleTarget), denoise(denoise), device(_device), platform(_platform), block_size(_block_size) { passes_enabled[BEAUTY] = true; passes_enabled[DENOISE] = true; passes_enabled[NORMAL] = true;