diff --git a/Ray.cpp b/Ray.cpp index f8547aa9..d4a7cdb5 100644 --- a/Ray.cpp +++ b/Ray.cpp @@ -46,9 +46,9 @@ LogNull g_null_log; LogStdout g_stdout_log; RENDERDOC_DevicePointer g_rdoc_device = {}; -extern const std::pair KnownGPUVendors[] = { +extern const std::pair KnownGPUVendors[] = { {0x1002, "AMD"}, {0x10DE, "NVIDIA"}, {0x8086, "INTEL"}, {0x13B5, "ARM"}}; -extern const int KnownGPUVendorsCount = 4; +extern const int KnownGPUVendorsCount = std::size(KnownGPUVendors); } // namespace Ray Ray::RendererBase *Ray::CreateRenderer(const settings_t &s, ILog *log, @@ -137,9 +137,9 @@ int Ray::QueryAvailableGPUDevices(ILog *log, gpu_device_t out_devices[], const i return count; } -bool Ray::MatchDeviceNames(const char *name, const char *pattern) { - std::regex match_name(pattern); - return std::regex_search(name, match_name) || strcmp(name, pattern) == 0; +bool Ray::MatchDeviceNames(std::string_view name, std::string_view pattern) { + std::regex match_name(pattern.data()); + return std::regex_search(name.data(), match_name) || name == pattern; } const char *Ray::Version() { return "v0.4.0-unknown-commit"; } diff --git a/Ray.h b/Ray.h index d72c8406..9d9dd80a 100644 --- a/Ray.h +++ b/Ray.h @@ -40,7 +40,7 @@ int QueryAvailableGPUDevices(ILog *log, gpu_device_t out_devices[], int capacity @param pattern regex pattern @return true if name matches pattern */ -bool MatchDeviceNames(const char *name, const char *pattern); +bool MatchDeviceNames(std::string_view name, std::string_view pattern); /** @brief Get version string @return version string diff --git a/RendererBase.cpp b/RendererBase.cpp index a2f5d048..3c363a3c 100644 --- a/RendererBase.cpp +++ b/RendererBase.cpp @@ -3,7 +3,7 @@ #include namespace Ray { -const char *RendererTypeName(const eRendererType rt) { +std::string_view RendererTypeName(const eRendererType rt) { switch (rt) { case eRendererType::Reference: return "REF"; @@ -28,24 +28,24 @@ const char *RendererTypeName(const eRendererType rt) { } } -eRendererType RendererTypeFromName(const char *name) { - if (strcmp(name, "REF") == 0) { +eRendererType RendererTypeFromName(std::string_view name) { + if (name == "REF") { return eRendererType::Reference; - } else if (strcmp(name, "SSE2") == 0) { + } else if (name == "SSE2") { return eRendererType::SIMD_SSE2; - } else if (strcmp(name, "SSE41") == 0) { + } else if (name == "SSE41") { return eRendererType::SIMD_SSE41; - } else if (strcmp(name, "AVX") == 0) { + } else if (name == "AVX") { return eRendererType::SIMD_AVX; - } else if (strcmp(name, "AVX2") == 0) { + } else if (name == "AVX2") { return eRendererType::SIMD_AVX2; - } else if (strcmp(name, "AVX512") == 0) { + } else if (name == "AVX512") { return eRendererType::SIMD_AVX512; - } else if (strcmp(name, "NEON") == 0) { + } else if (name == "NEON") { return eRendererType::SIMD_NEON; - } else if (strcmp(name, "VK") == 0) { + } else if (name == "VK") { return eRendererType::Vulkan; - } else if (strcmp(name, "DX") == 0) { + } else if (name == "DX") { return eRendererType::DirectX12; } return eRendererType::Reference; diff --git a/RendererBase.h b/RendererBase.h index fcc64c58..acac2df9 100644 --- a/RendererBase.h +++ b/RendererBase.h @@ -2,6 +2,7 @@ #include #include +#include #include "Config.h" #include "SceneBase.h" @@ -40,8 +41,8 @@ const Bitmask RendererCPU = Bitmask{eRendererType: // All GPU renderers const Bitmask RendererGPU = Bitmask{eRendererType::Vulkan} | eRendererType::DirectX12; -const char *RendererTypeName(eRendererType rt); -eRendererType RendererTypeFromName(const char *name); +std::string_view RendererTypeName(eRendererType rt); +eRendererType RendererTypeFromName(std::string_view name); /// Returns whether it is safe to call Render function for non-overlapping regions from different threads bool RendererSupportsMultithreading(eRendererType rt); @@ -51,7 +52,7 @@ bool RendererSupportsHWRT(eRendererType rt); /// Renderer settings struct settings_t { int w = 0, h = 0; - const char *preferred_device = nullptr; + std::string_view preferred_device; bool use_tex_compression = true; bool use_hwrt = true; bool use_bindless = true; @@ -141,7 +142,7 @@ class RendererBase { virtual ILog *log() const = 0; /// Name of the device - virtual const char *device_name() const = 0; + virtual std::string_view device_name() const = 0; /// Tells whether this is a hardware accelerated renderer virtual bool is_hwrt() const { return false; } diff --git a/SceneBase.h b/SceneBase.h index 44b48be2..bac03412 100644 --- a/SceneBase.h +++ b/SceneBase.h @@ -118,7 +118,7 @@ struct vtx_attribute_t { /// Mesh description struct mesh_desc_t { - const char *name = nullptr; ///< Mesh name (for debugging) + std::string_view name; ///< Mesh name (for debugging) ePrimType prim_type; ///< Primitive type vtx_attribute_t vtx_positions; ///< Vertex positions vtx_attribute_t vtx_normals; ///< Vertex normals @@ -178,7 +178,7 @@ struct tex_desc_t { eTextureFormat format; ///< Texture data format eTextureConvention convention = eTextureConvention::OGL; ///< Texture convention (affects normalmaps and BC-compressed textures) - const char *name = nullptr; ///< Debug name + std::string_view name; ///< Debug name Span data; ///< Texture data int w, ///< Texture width h; ///< Texture height diff --git a/internal/CDFUtils.h b/internal/CDFUtils.h index 94e66303..42454348 100644 --- a/internal/CDFUtils.h +++ b/internal/CDFUtils.h @@ -6,7 +6,8 @@ namespace Ray { // This mostly taken from Cycles source code -template inline std::vector CDFEvaluate(const int res, const float from, const float to, Func func) { +template +inline std::vector CDFEvaluate(const int res, const float from, const float to, Func func) { const int cdf_count = res + 1; const float range = to - from; @@ -30,7 +31,8 @@ template inline std::vector CDFEvaluate(const int res, co std::vector CDFInvert(int res, float from, float to, const std::vector &cdf, bool make_symmetric); template -inline std::vector CDFInverted(const int res, const float from, const float to, Func func, const bool make_symmetric) { +inline std::vector CDFInverted(const int res, const float from, const float to, Func func, + const bool make_symmetric) { const std::vector cdf = CDFEvaluate(res - 1, from, to, func); return CDFInvert(res, from, to, cdf, make_symmetric); } diff --git a/internal/Dx/BufferDX.cpp b/internal/Dx/BufferDX.cpp index 512698b0..c335666b 100644 --- a/internal/Dx/BufferDX.cpp +++ b/internal/Dx/BufferDX.cpp @@ -39,7 +39,7 @@ eResState GetInitialDxResourceState(const eBufType type) { int Ray::Dx::Buffer::g_GenCounter = 0; -Ray::Dx::Buffer::Buffer(const char *name, Context *ctx, const eBufType type, const uint32_t initial_size) +Ray::Dx::Buffer::Buffer(std::string_view name, Context *ctx, const eBufType type, const uint32_t initial_size) : ctx_(ctx), name_(name), type_(type), size_(0) { Resize(initial_size); } diff --git a/internal/Dx/BufferDX.h b/internal/Dx/BufferDX.h index 8fe153c8..a3e52237 100644 --- a/internal/Dx/BufferDX.h +++ b/internal/Dx/BufferDX.h @@ -78,7 +78,7 @@ class Buffer { public: Buffer() = default; - explicit Buffer(const char *name, Context *ctx, eBufType type, uint32_t initial_size); + explicit Buffer(std::string_view name, Context *ctx, eBufType type, uint32_t initial_size); Buffer(const Buffer &rhs) = delete; Buffer(Buffer &&rhs) noexcept { (*this) = std::move(rhs); } ~Buffer(); diff --git a/internal/Dx/ContextDX.cpp b/internal/Dx/ContextDX.cpp index b124be69..6bbfd2e6 100644 --- a/internal/Dx/ContextDX.cpp +++ b/internal/Dx/ContextDX.cpp @@ -1,7 +1,5 @@ #include "ContextDX.h" -#include - #include "../../Log.h" #include "../../Types.h" #include "../ScopeExit.h" @@ -23,9 +21,9 @@ #include namespace Ray { -bool MatchDeviceNames(const char *name, const char *pattern); +bool MatchDeviceNames(std::string_view name, std::string_view pattern); -extern const std::pair KnownGPUVendors[]; +extern const std::pair KnownGPUVendors[]; extern const int KnownGPUVendorsCount; extern RENDERDOC_DevicePointer g_rdoc_device; @@ -109,7 +107,7 @@ void Ray::Dx::Context::Destroy() { #undef SAFE_RELEASE } -bool Ray::Dx::Context::Init(ILog *log, const char *preferred_device, const int validation_level) { +bool Ray::Dx::Context::Init(ILog *log, std::string_view preferred_device, const int validation_level) { log_ = log; validation_level_ = validation_level; @@ -120,8 +118,6 @@ bool Ray::Dx::Context::Init(ILog *log, const char *preferred_device, const int v } } - std::wstring_convert, wchar_t> str_converter; - IDXGIFactory4 *dxgi_factory = nullptr; HRESULT hr = CreateDXGIFactory1(IID_PPV_ARGS(&dxgi_factory)); if (FAILED(hr)) { @@ -141,7 +137,19 @@ bool Ray::Dx::Context::Init(ILog *log, const char *preferred_device, const int v adapter_score += 1000; } - if (preferred_device && MatchDeviceNames(str_converter.to_bytes(desc.Description).c_str(), preferred_device)) { + const int utf8_len = WideCharToMultiByte(CP_UTF8, // Code page + 0, // Flags + desc.Description, // Wide char string to convert + -1, // Null-terminated input + nullptr, // Output buffer + 0, // Output buffer size (0 means we want the size) + nullptr, nullptr); + + std::string device_name(utf8_len, '\0'); + WideCharToMultiByte(CP_UTF8, 0, desc.Description, -1, device_name.data(), utf8_len, nullptr, nullptr); + device_name.pop_back(); + + if (!preferred_device.empty() && MatchDeviceNames(device_name, preferred_device)) { adapter_score += 100000; } @@ -232,15 +240,21 @@ bool Ray::Dx::Context::Init(ILog *log, const char *preferred_device, const int v DXGI_ADAPTER_DESC1 desc; best_adapter->GetDesc1(&desc); - device_name_ = str_converter.to_bytes(desc.Description); + { // Get device name + const int utf8_len = WideCharToMultiByte(CP_UTF8, 0, desc.Description, -1, nullptr, 0, nullptr, nullptr); + + device_name_.resize(utf8_len, '\0'); + WideCharToMultiByte(CP_UTF8, 0, desc.Description, -1, device_name_.data(), utf8_len, nullptr, nullptr); + device_name_.pop_back(); + } log_->Info("============================================================================"); log_->Info("Device info:"); auto it = find_if(KnownGPUVendors, KnownGPUVendors + KnownGPUVendorsCount, - [&](std::pair v) { return desc.VendorId == v.first; }); + [&](std::pair v) { return desc.VendorId == v.first; }); if (it != KnownGPUVendors + KnownGPUVendorsCount) { - log_->Info("\tVendor\t\t: %s", it->second); + log_->Info("\tVendor\t\t: %s", it->second.data()); } log_->Info("\tName\t\t: %s", device_name_.c_str()); @@ -510,8 +524,6 @@ int Ray::Dx::Context::QueryAvailableDevices(ILog *log, gpu_device_t out_devices[ return 0; } - std::wstring_convert, wchar_t> str_converter; - IDXGIAdapter1 *adapter = nullptr; int adapter_index = 0; @@ -525,8 +537,14 @@ int Ray::Dx::Context::QueryAvailableDevices(ILog *log, gpu_device_t out_devices[ continue; } - strncpy_s(out_devices[count].name, sizeof(out_devices[count].name), - str_converter.to_bytes(desc.Description).c_str(), sizeof(out_devices[count].name) - 1); + const int utf8_len = WideCharToMultiByte(CP_UTF8, 0, desc.Description, -1, nullptr, 0, nullptr, nullptr); + + std::string device_name(utf8_len, '\0'); + WideCharToMultiByte(CP_UTF8, 0, desc.Description, -1, device_name.data(), utf8_len, nullptr, nullptr); + device_name.pop_back(); + + strncpy_s(out_devices[count].name, sizeof(out_devices[count].name), device_name.c_str(), + sizeof(out_devices[count].name) - 1); ++count; ++adapter_index; diff --git a/internal/Dx/ContextDX.h b/internal/Dx/ContextDX.h index 032bc490..189a01e2 100644 --- a/internal/Dx/ContextDX.h +++ b/internal/Dx/ContextDX.h @@ -87,12 +87,12 @@ class Context { Context(); ~Context(); - bool Init(ILog *log, const char *preferred_device, int validation_level); + bool Init(ILog *log, std::string_view preferred_device, int validation_level); void Destroy(); ID3D12Device *device() const { return device_; } ID3D12Device5 *device5() const { return device5_; } - const std::string &device_name() const { return device_name_; } + std::string_view device_name() const { return device_name_; } ILog *log() const { return log_; } void *api() const { return nullptr; } @@ -148,7 +148,7 @@ class Context { bool frame_cpu_synced[MaxFramesInFlight] = {}; Buffer uniform_data_bufs[MaxFramesInFlight]; - uint32_t uniform_data_buf_offs[MaxFramesInFlight]; + uint32_t uniform_data_buf_offs[MaxFramesInFlight] = {}; // resources scheduled for deferred destruction SmallVector allocs_to_free[MaxFramesInFlight]; diff --git a/internal/Dx/DebugMarkerDX.cpp b/internal/Dx/DebugMarkerDX.cpp index 278137c8..2f142ade 100644 --- a/internal/Dx/DebugMarkerDX.cpp +++ b/internal/Dx/DebugMarkerDX.cpp @@ -1,6 +1,6 @@ #include "DebugMarkerDX.h" -#include +#include #include #ifndef NOMINMAX @@ -17,13 +17,19 @@ #include #endif -Ray::Dx::DebugMarker::DebugMarker(Context *, ID3D12GraphicsCommandList *_cmd_buf, const char *name) +Ray::Dx::DebugMarker::DebugMarker(Context *, ID3D12GraphicsCommandList *_cmd_buf, std::string_view name) : cmd_buf_(_cmd_buf) { #ifdef ENABLE_GPU_DEBUG #ifdef ENABLE_PIX PIXBeginEvent(cmd_buf_, 0, name); #else - std::wstring wstr(name, name + strlen(name)); + const int req_size = MultiByteToWideChar(CP_UTF8, 0, name.data(), -1, nullptr, 0); + assert(req_size > 0); + + std::wstring wstr(req_size, 0); + MultiByteToWideChar(CP_UTF8, 0, name.data(), -1, wstr.data(), req_size); + wstr.pop_back(); + cmd_buf_->BeginEvent(0, wstr.c_str(), UINT(wstr.length() * sizeof(wchar_t))); #endif #endif diff --git a/internal/Dx/DebugMarkerDX.h b/internal/Dx/DebugMarkerDX.h index 9cee4196..22eb9425 100644 --- a/internal/Dx/DebugMarkerDX.h +++ b/internal/Dx/DebugMarkerDX.h @@ -1,11 +1,13 @@ #pragma once +#include + struct ID3D12GraphicsCommandList; namespace Ray::Dx { class Context; struct DebugMarker { - explicit DebugMarker(Context *ctx, ID3D12GraphicsCommandList *cmd_buf, const char *name); + explicit DebugMarker(Context *ctx, ID3D12GraphicsCommandList *cmd_buf, std::string_view name); ~DebugMarker(); ID3D12GraphicsCommandList *cmd_buf_ = nullptr; diff --git a/internal/Dx/MemoryAllocatorDX.cpp b/internal/Dx/MemoryAllocatorDX.cpp index 0754c69d..07832433 100644 --- a/internal/Dx/MemoryAllocatorDX.cpp +++ b/internal/Dx/MemoryAllocatorDX.cpp @@ -20,7 +20,7 @@ void Ray::Dx::MemAllocation::Release() { } } -Ray::Dx::MemAllocator::MemAllocator(const char *name, Context *ctx, const uint32_t initial_pool_size, +Ray::Dx::MemAllocator::MemAllocator(std::string_view name, Context *ctx, const uint32_t initial_pool_size, D3D12_HEAP_TYPE heap_type, const float growth_factor, const uint32_t max_pool_size) : name_(name), ctx_(ctx), growth_factor_(growth_factor), max_pool_size_(max_pool_size), heap_type_(heap_type) { assert(growth_factor_ > 1.0f); diff --git a/internal/Dx/MemoryAllocatorDX.h b/internal/Dx/MemoryAllocatorDX.h index 211417b1..5fa3d6dd 100644 --- a/internal/Dx/MemoryAllocatorDX.h +++ b/internal/Dx/MemoryAllocatorDX.h @@ -67,7 +67,7 @@ class MemAllocator { bool AllocateNewPool(uint32_t size); public: - MemAllocator(const char *name, Context *ctx, uint32_t initial_pool_size, D3D12_HEAP_TYPE heap_type, + MemAllocator(std::string_view name, Context *ctx, uint32_t initial_pool_size, D3D12_HEAP_TYPE heap_type, float growth_factor, uint32_t max_pool_size); ~MemAllocator(); @@ -95,7 +95,7 @@ class MemAllocators { std::unique_ptr allocators_[8]; public: - MemAllocators(const char *name, Context *ctx, const uint32_t initial_pool_size, const float growth_factor, + MemAllocators(std::string_view name, Context *ctx, const uint32_t initial_pool_size, const float growth_factor, const uint32_t max_pool_size) : name_(name), ctx_(ctx), initial_pool_size_(initial_pool_size), growth_factor_(growth_factor), max_pool_size_(max_pool_size) {} @@ -104,7 +104,7 @@ class MemAllocators { if (!allocators_[heap_type]) { std::string name = name_; name += " (type " + std::to_string(heap_type) + ")"; - allocators_[heap_type] = std::make_unique(name.c_str(), ctx_, initial_pool_size_, heap_type, + allocators_[heap_type] = std::make_unique(name, ctx_, initial_pool_size_, heap_type, growth_factor_, max_pool_size_); } return allocators_[heap_type]->Allocate(alignment, size); diff --git a/internal/Dx/ProgramDX.cpp b/internal/Dx/ProgramDX.cpp index d48334a5..cba4a495 100644 --- a/internal/Dx/ProgramDX.cpp +++ b/internal/Dx/ProgramDX.cpp @@ -18,7 +18,7 @@ #pragma warning(disable : 4996) #endif -Ray::Dx::Program::Program(const char *name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, +Ray::Dx::Program::Program(std::string_view name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(vs_ref, fs_ref, tcs_ref, tes_ref, log)) { @@ -26,13 +26,13 @@ Ray::Dx::Program::Program(const char *name, Context *ctx, Shader *vs_ref, Shader } } -Ray::Dx::Program::Program(const char *name, Context *ctx, Shader *cs_ref, ILog *log) : name_(name), ctx_(ctx) { +Ray::Dx::Program::Program(std::string_view name, Context *ctx, Shader *cs_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(cs_ref, log)) { throw std::runtime_error("Program Init error!"); } } -Ray::Dx::Program::Program(const char *name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, +Ray::Dx::Program::Program(std::string_view name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, Shader *miss_ref, Shader *intersection_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(raygen_ref, closesthit_ref, anyhit_ref, miss_ref, intersection_ref, log)) { diff --git a/internal/Dx/ProgramDX.h b/internal/Dx/ProgramDX.h index 889d8204..16b61ae7 100644 --- a/internal/Dx/ProgramDX.h +++ b/internal/Dx/ProgramDX.h @@ -40,10 +40,10 @@ class Program { public: Program() = default; - Program(const char *name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, + Program(std::string_view name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, ILog *log); - Program(const char *name, Context *ctx, Shader *cs_ref, ILog *log); - Program(const char *name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, + Program(std::string_view name, Context *ctx, Shader *cs_ref, ILog *log); + Program(std::string_view name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, Shader *miss_ref, Shader *intersection_ref, ILog *log); Program(const Program &rhs) = delete; @@ -65,7 +65,7 @@ class Program { const std::string &name() const { return name_; } const Attribute &attribute(const int i) const { return attributes_[i]; } - const Attribute &attribute(const char *name) const { + const Attribute &attribute(std::string_view name) const { for (int i = 0; i < int(attributes_.size()); i++) { if (attributes_[i].name == name) { return attributes_[i]; @@ -75,7 +75,7 @@ class Program { } const Uniform &uniform(const int i) const { return uniforms_[i]; } - const Uniform &uniform(const char *name) const { + const Uniform &uniform(std::string_view name) const { for (int i = 0; i < int(uniforms_.size()); i++) { if (uniforms_[i].name == name) { return uniforms_[i]; diff --git a/internal/Dx/RenderPassDX.cpp b/internal/Dx/RenderPassDX.cpp index e6c06182..1d1e53e3 100644 --- a/internal/Dx/RenderPassDX.cpp +++ b/internal/Dx/RenderPassDX.cpp @@ -7,8 +7,7 @@ #define VERBOSE_LOGGING #endif -namespace Ray { -namespace Dx { +namespace Ray::Dx { /*static_assert(int(eImageLayout::Undefined) == VK_IMAGE_LAYOUT_UNDEFINED, "!"); static_assert(int(eImageLayout::General) == VK_IMAGE_LAYOUT_GENERAL, "!"); static_assert(int(eImageLayout::ColorAttachmentOptimal) == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "!"); @@ -25,22 +24,21 @@ extern const VkAttachmentLoadOp vk_load_ops[] = { VK_ATTACHMENT_LOAD_OP_DONT_CARE, // DontCare VK_ATTACHMENT_LOAD_OP_NONE_EXT // None }; -static_assert((sizeof(vk_load_ops) / sizeof(vk_load_ops[0])) == int(eLoadOp::_Count), "!"); +static_assert(std::size(vk_load_ops) == int(eLoadOp::_Count), "!"); extern const VkAttachmentStoreOp vk_store_ops[] = { VK_ATTACHMENT_STORE_OP_STORE, // Store VK_ATTACHMENT_STORE_OP_DONT_CARE, // DontCare VK_ATTACHMENT_STORE_OP_NONE_EXT // None }; -static_assert((sizeof(vk_store_ops) / sizeof(vk_store_ops[0])) == int(eStoreOp::_Count), "!"); +static_assert(std::size(vk_store_ops) == int(eStoreOp::_Count), "!"); // make sure we can simply cast these static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_1_BIT == 1, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_2_BIT == 2, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_4_BIT == 4, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_8_BIT == 8, "!");*/ -} // namespace Vk -} // namespace Ray +} // namespace Ray::Dx Ray::Dx::RenderPass &Ray::Dx::RenderPass::operator=(RenderPass &&rhs) noexcept { if (this == &rhs) { @@ -50,7 +48,7 @@ Ray::Dx::RenderPass &Ray::Dx::RenderPass::operator=(RenderPass &&rhs) noexcept { Destroy(); ctx_ = std::exchange(rhs.ctx_, nullptr); - //handle_ = std::exchange(rhs.handle_, {}); + // handle_ = std::exchange(rhs.handle_, {}); color_rts = std::move(rhs.color_rts); depth_rt = std::exchange(rhs.depth_rt, {}); @@ -147,12 +145,12 @@ bool Ray::Dx::RenderPass::Init(Context *ctx, Span _color } void Ray::Dx::RenderPass::Destroy() { - //if (handle_ != VK_NULL_HANDLE) { - // ctx_->render_passes_to_destroy[ctx_->backend_frame].push_back(handle_); - // handle_ = VK_NULL_HANDLE; - //} - //color_rts.clear(); - //depth_rt = {}; + // if (handle_ != VK_NULL_HANDLE) { + // ctx_->render_passes_to_destroy[ctx_->backend_frame].push_back(handle_); + // handle_ = VK_NULL_HANDLE; + // } + // color_rts.clear(); + // depth_rt = {}; } bool Ray::Dx::RenderPass::IsCompatibleWith(Span _color_rts, RenderTarget _depth_rt) { diff --git a/internal/Dx/ResourceDX.cpp b/internal/Dx/ResourceDX.cpp index bedf9053..eb1bda45 100644 --- a/internal/Dx/ResourceDX.cpp +++ b/internal/Dx/ResourceDX.cpp @@ -52,11 +52,11 @@ void Ray::Dx::TransitionResourceStates(ID3D12GraphicsCommandList *cmd_buf, const SmallVector barriers; for (const TransitionInfo &transition : transitions) { - if (transition.p_tex && *transition.p_tex) { + if (std::holds_alternative(transition.p_res) && *std::get(transition.p_res)) { eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_tex->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed continue; @@ -66,23 +66,24 @@ void Ray::Dx::TransitionResourceStates(ID3D12GraphicsCommandList *cmd_buf, const auto &new_barrier = barriers.emplace_back(); if (old_state != transition.new_state) { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - new_barrier.Transition.pResource = transition.p_tex->handle().img; + new_barrier.Transition.pResource = std::get(transition.p_res)->handle().img; new_barrier.Transition.StateBefore = DXResourceState(old_state); new_barrier.Transition.StateAfter = DXResourceState(transition.new_state); new_barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; } else { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; - new_barrier.UAV.pResource = transition.p_tex->handle().img; + new_barrier.UAV.pResource = std::get(transition.p_res)->handle().img; } if (transition.update_internal_state) { - transition.p_tex->resource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } - } else if (transition.p_buf && *transition.p_buf) { + } else if (std::holds_alternative(transition.p_res) && + *std::get(transition.p_res)) { eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_buf->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed continue; @@ -92,23 +93,24 @@ void Ray::Dx::TransitionResourceStates(ID3D12GraphicsCommandList *cmd_buf, const auto &new_barrier = barriers.emplace_back(); if (old_state != transition.new_state) { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - new_barrier.Transition.pResource = transition.p_buf->dx_resource(); + new_barrier.Transition.pResource = std::get(transition.p_res)->dx_resource(); new_barrier.Transition.StateBefore = DXResourceState(old_state); new_barrier.Transition.StateAfter = DXResourceState(transition.new_state); new_barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; } else { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; - new_barrier.UAV.pResource = transition.p_buf->dx_resource(); + new_barrier.UAV.pResource = std::get(transition.p_res)->dx_resource(); } if (transition.update_internal_state) { - transition.p_buf->resource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } - } else if (transition.p_tex_arr && transition.p_tex_arr->page_count()) { + } else if (std::holds_alternative(transition.p_res) && + std::get(transition.p_res)->page_count()) { eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_tex_arr->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state != eResState::Undefined && old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed @@ -119,17 +121,17 @@ void Ray::Dx::TransitionResourceStates(ID3D12GraphicsCommandList *cmd_buf, const auto &new_barrier = barriers.emplace_back(); if (old_state != transition.new_state) { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - new_barrier.Transition.pResource = transition.p_tex_arr->dx_resource(); + new_barrier.Transition.pResource = std::get(transition.p_res)->dx_resource(); new_barrier.Transition.StateBefore = DXResourceState(old_state); new_barrier.Transition.StateAfter = DXResourceState(transition.new_state); new_barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; } else { new_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; - new_barrier.UAV.pResource = transition.p_tex_arr->dx_resource(); + new_barrier.UAV.pResource = std::get(transition.p_res)->dx_resource(); } if (transition.update_internal_state) { - transition.p_tex_arr->resource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } } } diff --git a/internal/Dx/ResourceDX.h b/internal/Dx/ResourceDX.h index 6716e716..4cccf60e 100644 --- a/internal/Dx/ResourceDX.h +++ b/internal/Dx/ResourceDX.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "../../Bitmask.h" #include "../../Span.h" @@ -66,9 +67,7 @@ class Texture; class TextureAtlas; struct TransitionInfo { - const Texture *p_tex = nullptr; - const TextureAtlas *p_tex_arr = nullptr; - const Buffer *p_buf = nullptr; + std::variant p_res; eResState old_state = eResState::Undefined; eResState new_state = eResState::Undefined; @@ -77,11 +76,11 @@ struct TransitionInfo { TransitionInfo() = default; TransitionInfo(const Texture *_p_tex, eResState _new_state) - : p_tex(_p_tex), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_tex), new_state(_new_state), update_internal_state(true) {} TransitionInfo(const TextureAtlas *_p_tex_arr, eResState _new_state) - : p_tex_arr(_p_tex_arr), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_tex_arr), new_state(_new_state), update_internal_state(true) {} TransitionInfo(const Buffer *_p_buf, eResState _new_state) - : p_buf(_p_buf), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_buf), new_state(_new_state), update_internal_state(true) {} }; void TransitionResourceStates(ID3D12GraphicsCommandList *cmd_buf, Bitmask src_stages_mask, diff --git a/internal/Dx/ShaderDX.cpp b/internal/Dx/ShaderDX.cpp index be6cb27d..bc9b95ad 100644 --- a/internal/Dx/ShaderDX.cpp +++ b/internal/Dx/ShaderDX.cpp @@ -81,7 +81,7 @@ const uint32_t _DXC_PART_REFLECTION_DATA = _DXC_FOURCC('S', 'T', 'A', 'T'); } // namespace Dx } // namespace Ray -Ray::Dx::Shader::Shader(const char *name, Context *ctx, Span shader_code, const eShaderType type, +Ray::Dx::Shader::Shader(std::string_view name, Context *ctx, Span shader_code, const eShaderType type, ILog *log) { if (!Init(name, ctx, shader_code, type, log)) { throw std::runtime_error("Shader Init error!"); @@ -103,7 +103,7 @@ Ray::Dx::Shader &Ray::Dx::Shader::operator=(Shader &&rhs) noexcept { return (*this); } -bool Ray::Dx::Shader::Init(const char *name, Context *ctx, Span shader_code, const eShaderType type, +bool Ray::Dx::Shader::Init(std::string_view name, Context *ctx, Span shader_code, const eShaderType type, ILog *log) { name_ = name; device_ = ctx->device(); diff --git a/internal/Dx/ShaderDX.h b/internal/Dx/ShaderDX.h index 7bf40496..4f9121c2 100644 --- a/internal/Dx/ShaderDX.h +++ b/internal/Dx/ShaderDX.h @@ -60,7 +60,7 @@ class Shader { SmallVector pc_ranges; Shader() = default; - Shader(const char *name, Context *ctx, Span shader_code, eShaderType type, ILog *log); + Shader(std::string_view name, Context *ctx, Span shader_code, eShaderType type, ILog *log); Shader(const Shader &rhs) = delete; Shader(Shader &&rhs) noexcept { (*this) = std::move(rhs); } ~Shader(); @@ -74,7 +74,7 @@ class Shader { eShaderType type() const { return type_; } const std::string &name() const { return name_; } - bool Init(const char *name, Context *ctx, Span shader_code, eShaderType type, ILog *log); + bool Init(std::string_view name, Context *ctx, Span shader_code, eShaderType type, ILog *log); }; } // namespace Dx diff --git a/internal/Dx/TextureAtlasDX.cpp b/internal/Dx/TextureAtlasDX.cpp index ea708064..ad932b04 100644 --- a/internal/Dx/TextureAtlasDX.cpp +++ b/internal/Dx/TextureAtlasDX.cpp @@ -36,8 +36,8 @@ uint32_t D3D12CalcSubresource(uint32_t MipSlice, uint32_t ArraySlice, uint32_t P #define _MIN(x, y) ((x) < (y) ? (x) : (y)) -Ray::Dx::TextureAtlas::TextureAtlas(Context *ctx, const char *name, const eTexFormat format, const eTexFilter filter, - const int resx, const int resy, const int pages_count) +Ray::Dx::TextureAtlas::TextureAtlas(Context *ctx, std::string_view name, const eTexFormat format, + const eTexFilter filter, const int resx, const int resy, const int pages_count) : ctx_(ctx), name_(name), format_(format), filter_(filter), res_{resx, resy} { if (!Resize(pages_count)) { throw std::runtime_error("TextureAtlas cannot be resized!"); diff --git a/internal/Dx/TextureAtlasDX.h b/internal/Dx/TextureAtlasDX.h index 12b45bf6..6060c88a 100644 --- a/internal/Dx/TextureAtlasDX.h +++ b/internal/Dx/TextureAtlasDX.h @@ -28,7 +28,7 @@ class TextureAtlas { void WritePageData(int page, int posx, int posy, int sizex, int sizey, const void *data); public: - TextureAtlas(Context *ctx, const char *name, eTexFormat format, eTexFilter filter, int resx, int resy, + TextureAtlas(Context *ctx, std::string_view name, eTexFormat format, eTexFilter filter, int resx, int resy, int page_count = 0); ~TextureAtlas(); diff --git a/internal/Dx/TextureDX.cpp b/internal/Dx/TextureDX.cpp index 7d6e34b8..1eff6ba5 100644 --- a/internal/Dx/TextureDX.cpp +++ b/internal/Dx/TextureDX.cpp @@ -36,7 +36,7 @@ extern const float AnisotropyLevel; extern const DXGI_FORMAT g_formats_dx[] = { #include "../TextureFormat.inl" }; -static_assert(sizeof(g_formats_dx) / sizeof(g_formats_dx[0]) == size_t(eTexFormat::_Count), "!"); +static_assert(std::size(g_formats_dx) == size_t(eTexFormat::_Count), "!"); #undef X uint32_t TextureHandleCounter = 0; @@ -87,20 +87,18 @@ uint32_t D3D12CalcSubresource(uint32_t MipSlice, uint32_t ArraySlice, uint32_t P extern const int g_block_res[][2]; int round_up(int v, int align); - -bool EndsWith(const std::string &str1, const char *str2); } // namespace Ray Ray::eTexUsage Ray::Dx::TexUsageFromState(const eResState state) { return g_tex_usage_per_state[int(state)]; } -Ray::Dx::Texture::Texture(const char *name, Context *ctx, const TexParams &p, MemAllocators *mem_allocs, ILog *log) +Ray::Dx::Texture::Texture(std::string_view name, Context *ctx, const TexParams &p, MemAllocators *mem_allocs, ILog *log) : ctx_(ctx), name_(name) { Init(p, mem_allocs, log); } -Ray::Dx::Texture::Texture(const char *name, Context *ctx, const void *data, const uint32_t size, const TexParams &p, - Buffer &stage_buf, ID3D12GraphicsCommandList *cmd_buf, MemAllocators *mem_allocs, - eTexLoadStatus *load_status, ILog *log) +Ray::Dx::Texture::Texture(std::string_view name, Context *ctx, const void *data, const uint32_t size, + const TexParams &p, Buffer &stage_buf, ID3D12GraphicsCommandList *cmd_buf, + MemAllocators *mem_allocs, eTexLoadStatus *load_status, ILog *log) : ctx_(ctx), name_(name) { Init(data, size, p, stage_buf, cmd_buf, mem_allocs, load_status, log); } @@ -196,7 +194,7 @@ bool Ray::Dx::Texture::Realloc(const int w, const int h, int mip_count, const in new_alloc = mem_allocs->Allocate(uint32_t(tex_mem_req.size), uint32_t(tex_mem_req.alignment), FindMemoryType(&ctx_->mem_properties(), tex_mem_req.memoryTypeBits, img_tex_desired_mem_flags, uint32_t(tex_mem_req.size)), - name_.c_str()); + name_); if (!alloc_) { ctx_->log()->Warning("Not enough device memory, falling back to CPU RAM!"); img_tex_desired_mem_flags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; @@ -204,14 +202,14 @@ bool Ray::Dx::Texture::Realloc(const int w, const int h, int mip_count, const in alloc_ = mem_allocs->Allocate(uint32_t(tex_mem_req.size), uint32_t(tex_mem_req.alignment), FindMemoryType(&ctx_->mem_properties(), tex_mem_req.memoryTypeBits, img_tex_desired_mem_flags, uint32_t(tex_mem_req.size)), - name_.c_str()); + name_); if (!alloc_) { img_tex_desired_mem_flags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; alloc_ = mem_allocs->Allocate(uint32_t(tex_mem_req.size), uint32_t(tex_mem_req.alignment), FindMemoryType(&ctx_->mem_properties(), tex_mem_req.memoryTypeBits, img_tex_desired_mem_flags, uint32_t(tex_mem_req.size)), - name_.c_str()); + name_); } } diff --git a/internal/Dx/TextureDX.h b/internal/Dx/TextureDX.h index 7b001605..ec02b9d4 100644 --- a/internal/Dx/TextureDX.h +++ b/internal/Dx/TextureDX.h @@ -79,12 +79,12 @@ class Texture { mutable eResState resource_state = eResState::Undefined; Texture() = default; - Texture(const char *name, Context *ctx, const TexParams ¶ms, MemAllocators *mem_allocs, ILog *log); - Texture(const char *name, Context *ctx, + Texture(std::string_view name, Context *ctx, const TexParams ¶ms, MemAllocators *mem_allocs, ILog *log); + Texture(std::string_view name, Context *ctx, ID3D12Resource *img, // const VkImageView view, const VkSampler sampler, const TexParams &_params, ILog *log) : handle_{img, /*view, VK_NULL_HANDLE, sampler,*/ 0}, name_(name), params(_params) {} - Texture(const char *name, Context *ctx, const void *data, uint32_t size, const TexParams &p, Buffer &stage_buf, + Texture(std::string_view name, Context *ctx, const void *data, uint32_t size, const TexParams &p, Buffer &stage_buf, ID3D12GraphicsCommandList *cmd_buf, MemAllocators *mem_allocs, eTexLoadStatus *load_status, ILog *log); Texture(const Texture &rhs) = delete; Texture(Texture &&rhs) noexcept { (*this) = std::move(rhs); } diff --git a/internal/RendererCPU.h b/internal/RendererCPU.h index cc50db62..0308cb7e 100644 --- a/internal/RendererCPU.h +++ b/internal/RendererCPU.h @@ -23,7 +23,7 @@ namespace Ray { int round_up(int v, int align); -void WritePFM(const char *base_name, const float values[], int w, int h, int channels); +void WritePFM(std::string_view base_name, const float values[], int w, int h, int channels); namespace Ref { class SIMDPolicy { @@ -244,7 +244,7 @@ template class Renderer : public RendererBase, private SIM ILog *log() const override { return log_; } - const char *device_name() const override { return "CPU"; } + std::string_view device_name() const override { return "CPU"; } bool is_spatial_caching_enabled() const override { return use_spatial_cache_; } diff --git a/internal/RendererDX.cpp b/internal/RendererDX.cpp index 6c453093..4b5f15c6 100644 --- a/internal/RendererDX.cpp +++ b/internal/RendererDX.cpp @@ -252,7 +252,7 @@ Ray::Dx::Renderer::Renderer(const settings_t &s, ILog *log, Ray::eRendererType Ray::Dx::Renderer::type() const { return eRendererType::DirectX12; } -const char *Ray::Dx::Renderer::device_name() const { return ctx_->device_name().c_str(); } +std::string_view Ray::Dx::Renderer::device_name() const { return ctx_->device_name(); } inline void Ray::Dx::Renderer::Clear(const color_rgba_t &c) { CommandBuffer cmd_buf = BegSingleTimeCommands(ctx_->api(), ctx_->device(), ctx_->temp_command_pool()); diff --git a/internal/RendererGPU.h b/internal/RendererGPU.h index 7d68a198..b2b2a4ce 100644 --- a/internal/RendererGPU.h +++ b/internal/RendererGPU.h @@ -315,7 +315,7 @@ class Renderer : public RendererBase { ILog *log() const override { return ctx_->log(); } - const char *device_name() const override; + std::string_view device_name() const override; bool is_hwrt() const override { return use_hwrt_; } @@ -757,10 +757,10 @@ inline void Ray::NS::Renderer::RadixSort(CommandBuffer cmd_buf, const Buffer &in Buffer &count_table, const Buffer &counters, const Buffer &reduce_table) { DebugMarker _0(ctx_.get(), cmd_buf, "Radix Sort"); - static const char *MarkerStrings[] = {"Radix Sort Iter #0 [Bits 0-4]", "Radix Sort Iter #1 [Bits 4-8]", - "Radix Sort Iter #2 [Bits 8-12]", "Radix Sort Iter #3 [Bits 12-16]", - "Radix Sort Iter #4 [Bits 16-20]", "Radix Sort Iter #5 [Bits 20-24]", - "Radix Sort Iter #6 [Bits 24-28]", "Radix Sort Iter #7 [Bits 28-32]"}; + static std::string_view MarkerStrings[] = {"Radix Sort Iter #0 [Bits 0-4]", "Radix Sort Iter #1 [Bits 4-8]", + "Radix Sort Iter #2 [Bits 8-12]", "Radix Sort Iter #3 [Bits 12-16]", + "Radix Sort Iter #4 [Bits 16-20]", "Radix Sort Iter #5 [Bits 20-24]", + "Radix Sort Iter #6 [Bits 24-28]", "Radix Sort Iter #7 [Bits 28-32]"}; Buffer *hashes[] = {&_hashes[0], &_hashes[1]}; for (int shift = 0; shift < 32; shift += 4) { diff --git a/internal/RendererVK.cpp b/internal/RendererVK.cpp index 586a119f..232618a8 100644 --- a/internal/RendererVK.cpp +++ b/internal/RendererVK.cpp @@ -175,7 +175,7 @@ namespace Vk { #include "shaders/output/spatial_cache_update.comp.spv.inl" #include "shaders/output/spatial_cache_update_compat.comp.spv.inl" } // namespace Vk -void WritePFM(const char *base_name, const float values[], int w, int h, int channels); +void WritePFM(std::string_view base_name, const float values[], int w, int h, int channels); } // namespace Ray #if 0 @@ -298,7 +298,7 @@ Ray::Vk::Renderer::Renderer(const settings_t &s, ILog *log, Ray::eRendererType Ray::Vk::Renderer::type() const { return eRendererType::Vulkan; } -const char *Ray::Vk::Renderer::device_name() const { return ctx_->device_properties().deviceName; } +std::string_view Ray::Vk::Renderer::device_name() const { return ctx_->device_properties().deviceName; } void Ray::Vk::Renderer::Clear(const color_rgba_t &c) { CommandBuffer cmd_buf = {}; @@ -1808,7 +1808,8 @@ bool Ray::Vk::Renderer::InitUNetFilterPipelines( AGAIN: - SmallVector, eShaderType, bool>, 32> + SmallVector, eShaderType, bool>, + 32> shaders_to_init = { {sh_.convolution_Img_9_32, prog_.convolution_Img_9_32, pi_.convolution_Img_9_32, "Convolution Img 9 32", select_shader(internal_shaders_output_convolution_Img_9_32_fp32_comp_spv, @@ -2446,7 +2447,7 @@ bool Ray::Vk::Renderer::InitPipelines(ILog *log, : (use_subgroup_ ? atlas_subgroup_shader : atlas_shader); }; - SmallVector, eShaderType, bool>, 32> shaders_to_init = { + SmallVector, eShaderType, bool>, 32> shaders_to_init = { {sh_.prim_rays_gen_simple, "Primary Raygen Simple", internal_shaders_output_primary_ray_gen_simple_comp_spv, eShaderType::Comp, false}, {sh_.prim_rays_gen_adaptive, "Primary Raygen Adaptive", diff --git a/internal/SceneCPU.cpp b/internal/SceneCPU.cpp index 9090f2e6..50be57f0 100644 --- a/internal/SceneCPU.cpp +++ b/internal/SceneCPU.cpp @@ -182,7 +182,8 @@ Ray::TextureHandle Ray::Cpu::Scene::AddTexture(const tex_desc_t &_t) { return InvalidTextureHandle; } - log_->Info("Ray: Texture '%s' loaded (storage = %i, %ix%i)", _t.name ? _t.name : "(unknown)", storage, _t.w, _t.h); + log_->Info("Ray: Texture '%s' loaded (storage = %i, %ix%i)", !_t.name.empty() ? _t.name.data() : "(unknown)", + storage, _t.w, _t.h); log_->Info("Ray: Storages are (RGBA[%i], RGB[%i], RG[%i], R[%i], BC1[%i], BC3[%i], BC4[%i], BC5[%i])", tex_storage_rgba_.img_count(), tex_storage_rgb_.img_count(), tex_storage_rg_.img_count(), tex_storage_r_.img_count(), tex_storage_bc1_.img_count(), tex_storage_bc3_.img_count(), @@ -356,7 +357,7 @@ Ray::MeshHandle Ray::Cpu::Scene::AddMesh(const mesh_desc_t &_m) { PreprocessMesh(_m.vtx_positions, _m.vtx_indices, _m.base_vertex, s, temp_nodes, temp_tris, temp_tri_indices, temp_mtris); - log_->Info("Ray: Mesh \'%s\' preprocessed in %lldms", _m.name ? _m.name : "(unknown)", + log_->Info("Ray: Mesh \'%s\' preprocessed in %lldms", !_m.name.empty() ? _m.name.data() : "(unknown)", (long long)(Ray::GetTimeMs() - t1)); std::unique_lock lock(mtx_); diff --git a/internal/SceneCommon.cpp b/internal/SceneCommon.cpp index 06926c47..17bf70aa 100644 --- a/internal/SceneCommon.cpp +++ b/internal/SceneCommon.cpp @@ -175,11 +175,11 @@ void Ray::SceneCommon::SetCamera_nolock(const CameraHandle i, const camera_desc_ cam.pass_settings.regularize_alpha = c.regularize_alpha; } -//#define DUMP_SKY_ENV +// #define DUMP_SKY_ENV #ifdef DUMP_SKY_ENV extern "C" { -int SaveEXR(const float *data, int width, int height, int components, const int save_as_fp16, const char *outfilename, - const char **err); +int SaveEXR(const float *data, int width, int height, int components, const int save_as_fp16, + std::string_view outfilename, const char **err); } #endif @@ -294,7 +294,7 @@ Ray::SceneCommon::CalcSkyEnvTexture(const atmosphere_params_t ¶ms, const int parallel_for(0, res[1], [&](const int y) { const float theta = PI * float(y) / float(res[1]); for (int x = 0; x < res[0]; ++x) { - const uint32_t px_hash = Ref::hash((x << 16)| y); + const uint32_t px_hash = Ref::hash((x << 16) | y); const float phi = 2.0f * PI * (x + 0.5f) / float(res[0]); auto ray_dir = Ref::fvec4{sinf(theta) * cosf(phi), cosf(theta), sinf(theta) * sinf(phi), 0.0f}; diff --git a/internal/SceneGPU.h b/internal/SceneGPU.h index 59a210eb..ee8ba122 100644 --- a/internal/SceneGPU.h +++ b/internal/SceneGPU.h @@ -709,8 +709,8 @@ inline Ray::TextureHandle Ray::NS::Scene::AddBindlessTexture_nolock(const tex_de p.usage = Bitmask(eTexUsage::Transfer) | eTexUsage::Sampled; p.sampling.filter = eTexFilter::Nearest; - std::pair ret = - bindless_textures_.emplace(_t.name ? _t.name : "Bindless Tex", ctx_, p, ctx_->default_mem_allocs(), log_); + std::pair ret = bindless_textures_.emplace(!_t.name.empty() ? _t.name.data() : "Bindless Tex", + ctx_, p, ctx_->default_mem_allocs(), log_); { // Submit GPU commands CommandBuffer cmd_buf = BegSingleTimeCommands(ctx_->api(), ctx_->device(), ctx_->temp_command_pool()); @@ -1631,8 +1631,8 @@ inline void Ray::NS::Scene::Rebuild_SWRT_TLAS_nolock() { // #define DUMP_SKY_ENV #ifdef DUMP_SKY_ENV extern "C" { -int SaveEXR(const float *data, int width, int height, int components, const int save_as_fp16, const char *outfilename, - const char **err); +int SaveEXR(const float *data, int width, int height, int components, const int save_as_fp16, + std::string_view outfilename, const char **err); } #endif diff --git a/internal/SparseStorageGPU.h b/internal/SparseStorageGPU.h index c700bee4..9d56aa39 100644 --- a/internal/SparseStorageGPU.h +++ b/internal/SparseStorageGPU.h @@ -31,7 +31,7 @@ template class SparseStorage { static_assert(std::is_trivially_destructible::value, "!"); public: - SparseStorage(Context *ctx, const char *name, const uint32_t initial_capacity = 8) : ctx_(ctx), name_(name) { + SparseStorage(Context *ctx, std::string_view name, const uint32_t initial_capacity = 8) : ctx_(ctx), name_(name) { if (initial_capacity) { reserve(initial_capacity); } @@ -62,7 +62,7 @@ template class SparseStorage { if (Replicate) { cpu_buf_ = std::make_unique(new_capacity); } - gpu_buf_ = Buffer{name_.c_str(), ctx_, eBufType::Storage, uint32_t(new_capacity * sizeof(T))}; + gpu_buf_ = Buffer{name_, ctx_, eBufType::Storage, uint32_t(new_capacity * sizeof(T))}; } else { if (Replicate) { auto new_buf = std::make_unique(new_capacity); diff --git a/internal/TextureUtils.cpp b/internal/TextureUtils.cpp index a0c98cf1..bfb2dbea 100644 --- a/internal/TextureUtils.cpp +++ b/internal/TextureUtils.cpp @@ -234,11 +234,11 @@ std::unique_ptr Ray::ConvertRGB32F_to_RGBE(const float image_data[], if (channels == 3) { val = Ref::fvec4{image_data[3 * (y * w + x) + 0], image_data[3 * (y * w + x) + 1], - image_data[3 * (y * w + x) + 2], 0.0f}; + image_data[3 * (y * w + x) + 2], 0.0f}; } else /*if (channels == 4)*/ { assert(channels == 4); val = Ref::fvec4{image_data[4 * (y * w + x) + 0], image_data[4 * (y * w + x) + 1], - image_data[4 * (y * w + x) + 2], 0.0f}; + image_data[4 * (y * w + x) + 2], 0.0f}; } auto exp = Ref::fvec4{std::log2(val[0]), std::log2(val[1]), std::log2(val[2]), 0.0f}; @@ -1603,8 +1603,7 @@ template int Ray::Preprocess_BCn<4>(const uint8_t in_data[], const int tiles_w, void Ray::ComputeTangentBasis(size_t vtx_offset, size_t vtx_start, std::vector &vertices, Span new_vtx_indices, Span indices) { auto cross = [](const Ref::fvec3 &v1, const Ref::fvec3 &v2) -> Ref::fvec3 { - return Ref::fvec3{v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], - v1[0] * v2[1] - v1[1] * v2[0]}; + return Ref::fvec3{v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0]}; }; std::vector> twin_verts(vertices.size(), {0, 0, 0}); @@ -1876,14 +1875,14 @@ bool Ray::ReadTGAFile(const void *data, const int data_len, int &w, int &h, eTex return true; } -void Ray::WriteTGA(const uint8_t *data, const int w, const int h, const int bpp, const char *name) { - std::ofstream file(name, std::ios::binary); +void Ray::WriteTGA(const uint8_t *data, const int w, const int h, const int bpp, std::string_view name) { + std::ofstream file(name.data(), std::ios::binary); unsigned char header[18] = {0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; header[12] = w & 0xFF; header[13] = (w >> 8) & 0xFF; - header[14] = (h)&0xFF; + header[14] = (h) & 0xFF; header[15] = (h >> 8) & 0xFF; header[16] = bpp * 8; header[17] |= (1 << 5); // set origin to upper left corner @@ -1945,10 +1944,10 @@ void Ray::WriteTGA(const uint8_t *data, const int w, const int h, const int bpp, file.write((const char *)&footer, sizeof(footer)); } -void Ray::WritePFM(const char *base_name, const float values[], int w, int h, int channels) { +void Ray::WritePFM(std::string_view base_name, const float values[], int w, int h, int channels) { for (int c = 0; c < channels; ++c) { // Open the file - const std::string filename = base_name + std::to_string(c) + ".pfm"; + const std::string filename = std::string(base_name) + std::to_string(c) + ".pfm"; std::ofstream file(filename, std::ios::binary); if (file.fail()) { throw std::runtime_error("cannot open image file: " + std::string(filename)); @@ -1976,4 +1975,3 @@ void Ray::WritePFM(const char *base_name, const float values[], int w, int h, in #undef _MAX #undef _ABS #undef _CLAMP - diff --git a/internal/TextureUtils.h b/internal/TextureUtils.h index 7b4b4e2b..b1059291 100644 --- a/internal/TextureUtils.h +++ b/internal/TextureUtils.h @@ -102,6 +102,6 @@ std::unique_ptr ReadTGAFile(const void *data, int data_len, int &w, i bool ReadTGAFile(const void *data, int data_len, int &w, int &h, eTexFormat &format, uint8_t *out_data, uint32_t &out_size); -void WriteTGA(const uint8_t *data, int w, int h, int bpp, const char *name); -void WritePFM(const char *base_name, const float values[], int w, int h, int channels); +void WriteTGA(const uint8_t *data, int w, int h, int bpp, std::string_view name); +void WritePFM(std::string_view base_name, const float values[], int w, int h, int channels); } // namespace Ray diff --git a/internal/UNetFilter.cpp b/internal/UNetFilter.cpp index 0625a02b..8fca7c67 100644 --- a/internal/UNetFilter.cpp +++ b/internal/UNetFilter.cpp @@ -98,7 +98,7 @@ void ReorderWeights_Conv3x3_Direct(const T in_weights[], const int in_channels1, int Ray::SetupUNetFilter(const int w, const int h, const bool alias_memory, const bool round_w, unet_filter_tensors_t &out_tensors, SmallVector alias_dependencies[]) { struct resource_t { - const char *name; + std::string_view name; int resolution_div; int depth; mutable int offset; @@ -142,7 +142,7 @@ int Ray::SetupUNetFilter(const int w, const int h, const bool alias_memory, cons } struct pass_t { - const char *used_resources[3]; + const std::string_view used_resources[3]; int used_resource_indices[3] = {-1, -1, -1}; }; pass_t passes[UNetFilterPasses] = { @@ -167,13 +167,13 @@ int Ray::SetupUNetFilter(const int w, const int h, const bool alias_memory, cons for (int i = 0; i < UNetFilterPasses; ++i) { pass_t &pass = passes[i]; for (int r = 0; r < 3; ++r) { - const char *resource_name = pass.used_resources[r]; - if (!resource_name) { + const std::string_view resource_name = pass.used_resources[r]; + if (resource_name.empty()) { continue; } for (int j = 0; j < resource_count; ++j) { - if (strcmp(resources[j].name, resource_name) == 0) { + if (resources[j].name == resource_name) { pass.used_resource_indices[r] = j; resources[j].lifetime[0] = std::min(resources[j].lifetime[0], i); resources[j].lifetime[1] = std::max(resources[j].lifetime[1], i); diff --git a/internal/VectorGPU.h b/internal/VectorGPU.h index df4d44f9..7eb6722d 100644 --- a/internal/VectorGPU.h +++ b/internal/VectorGPU.h @@ -10,7 +10,8 @@ template class Vector { size_t size_, cap_; public: - explicit Vector(Context *ctx, const char *name, const size_t capacity = 16) : ctx_(ctx), size_(0), cap_(capacity) { + explicit Vector(Context *ctx, std::string_view name, const size_t capacity = 16) + : ctx_(ctx), size_(0), cap_(capacity) { buf_ = Buffer{name, ctx_, eBufType::Storage, uint32_t(sizeof(T) * cap_)}; } diff --git a/internal/Vk/BufferVK.cpp b/internal/Vk/BufferVK.cpp index c538effd..8b09a20a 100644 --- a/internal/Vk/BufferVK.cpp +++ b/internal/Vk/BufferVK.cpp @@ -57,7 +57,7 @@ uint32_t FindMemoryType(uint32_t search_from, const VkPhysicalDeviceMemoryProper int Ray::Vk::Buffer::g_GenCounter = 0; -Ray::Vk::Buffer::Buffer(const char *name, Context *ctx, const eBufType type, const uint32_t initial_size) +Ray::Vk::Buffer::Buffer(std::string_view name, Context *ctx, const eBufType type, const uint32_t initial_size) : ctx_(ctx), name_(name), type_(type), size_(0) { Resize(initial_size); } @@ -345,7 +345,8 @@ void Ray::Vk::Buffer::Fill(const uint32_t dst_offset, const uint32_t size, const resource_state = eResState::CopyDst; } -void Ray::Vk::Buffer::UpdateImmediate(const uint32_t dst_offset, const uint32_t size, const void *data, VkCommandBuffer cmd_buf) { +void Ray::Vk::Buffer::UpdateImmediate(const uint32_t dst_offset, const uint32_t size, const void *data, + VkCommandBuffer cmd_buf) { VkPipelineStageFlags src_stages = 0, dst_stages = 0; SmallVector barriers; diff --git a/internal/Vk/BufferVK.h b/internal/Vk/BufferVK.h index 1a43cda4..8b980e92 100644 --- a/internal/Vk/BufferVK.h +++ b/internal/Vk/BufferVK.h @@ -71,7 +71,7 @@ class Buffer { public: Buffer() = default; - explicit Buffer(const char *name, Context *ctx, eBufType type, uint32_t initial_size); + explicit Buffer(std::string_view name, Context *ctx, eBufType type, uint32_t initial_size); Buffer(const Buffer &rhs) = delete; Buffer(Buffer &&rhs) noexcept { (*this) = std::move(rhs); } ~Buffer(); diff --git a/internal/Vk/ContextVK.cpp b/internal/Vk/ContextVK.cpp index 2738ef26..a0652330 100644 --- a/internal/Vk/ContextVK.cpp +++ b/internal/Vk/ContextVK.cpp @@ -14,9 +14,9 @@ #pragma warning(disable : 6294) // Ill-defined for-loop namespace Ray { -bool MatchDeviceNames(const char *name, const char *pattern); +bool MatchDeviceNames(std::string_view name, std::string_view pattern); -extern const std::pair KnownGPUVendors[]; +extern const std::pair KnownGPUVendors[]; extern const int KnownGPUVendorsCount; extern RENDERDOC_DevicePointer g_rdoc_device; @@ -86,7 +86,7 @@ void Ray::Vk::Context::Destroy() { } bool Ray::Vk::Context::Init(ILog *log, const VulkanDevice &vk_device, const VulkanFunctions &vk_functions, - const char *preferred_device, const int validation_level) { + std::string_view preferred_device, const int validation_level) { log_ = log; instance_ = vk_device.instance; physical_device_ = vk_device.physical_device; @@ -253,10 +253,11 @@ bool Ray::Vk::Context::Init(ILog *log, const VulkanDevice &vk_device, const Vulk log_->Info("\tVulkan version\t: %u.%u", VK_API_VERSION_MAJOR(device_properties_.apiVersion), VK_API_VERSION_MINOR(device_properties_.apiVersion)); - auto it = find_if(KnownGPUVendors, KnownGPUVendors + KnownGPUVendorsCount, - [this](std::pair v) { return device_properties_.vendorID == v.first; }); + auto it = + find_if(KnownGPUVendors, KnownGPUVendors + KnownGPUVendorsCount, + [this](std::pair v) { return device_properties_.vendorID == v.first; }); if (it != KnownGPUVendors + KnownGPUVendorsCount) { - log_->Info("\tVendor\t\t: %s", it->second); + log_->Info("\tVendor\t\t: %s", it->second.data()); } log_->Info("\tName\t\t: %s", device_properties_.deviceName); @@ -460,7 +461,7 @@ bool Ray::Vk::Context::InitVkInstance(const Api &api, VkInstance &instance, cons } bool Ray::Vk::Context::ChooseVkPhysicalDevice(const Api &api, VkPhysicalDevice &out_physical_device, - const char *preferred_device, VkInstance instance, ILog *log) { + std::string_view preferred_device, VkInstance instance, ILog *log) { uint32_t physical_device_count = 0; api.vkEnumeratePhysicalDevices(instance, &physical_device_count, nullptr); @@ -537,7 +538,7 @@ bool Ray::Vk::Context::ChooseVkPhysicalDevice(const Api &api, VkPhysicalDevice & score += 100; } - if (preferred_device) { + if (!preferred_device.empty()) { if (MatchDeviceNames(device_properties.deviceName, preferred_device)) { // preferred device found score += 100000; diff --git a/internal/Vk/ContextVK.h b/internal/Vk/ContextVK.h index e2a8072c..cafcb3ac 100644 --- a/internal/Vk/ContextVK.h +++ b/internal/Vk/ContextVK.h @@ -73,7 +73,7 @@ class Context { ~Context(); bool Init(ILog *log, const VulkanDevice &vk_device, const VulkanFunctions &vk_functions, - const char *preferred_device, int validation_level); + std::string_view preferred_device, int validation_level); void Destroy(); VkDevice device() const { return device_; } @@ -148,7 +148,7 @@ class Context { private: static bool InitVkInstance(const Api &api, VkInstance &instance, const char *enabled_layers[], int enabled_layers_count, int validation_level, ILog *log); - static bool ChooseVkPhysicalDevice(const Api &api, VkPhysicalDevice &physical_device, const char *preferred_device, + static bool ChooseVkPhysicalDevice(const Api &api, VkPhysicalDevice &physical_device, std::string_view preferred_device, VkInstance instance, ILog *log); static void CheckVkPhysicalDeviceFeatures(const Api &api, VkPhysicalDevice &physical_device, VkPhysicalDeviceProperties &device_properties, diff --git a/internal/Vk/DebugMarkerVK.h b/internal/Vk/DebugMarkerVK.h index d74d0c47..d85325e2 100644 --- a/internal/Vk/DebugMarkerVK.h +++ b/internal/Vk/DebugMarkerVK.h @@ -5,7 +5,7 @@ namespace Ray::Vk { class Context; struct DebugMarker { - explicit DebugMarker(Context *ctx, VkCommandBuffer cmd_buf, const char *name); + explicit DebugMarker(Context *ctx, VkCommandBuffer cmd_buf, std::string_view name); ~DebugMarker() { End(); } void End(); @@ -15,11 +15,11 @@ struct DebugMarker { }; } // namespace Ray::Vk -inline Ray::Vk::DebugMarker::DebugMarker(Context *ctx, VkCommandBuffer cmd_buf, const char *name) +inline Ray::Vk::DebugMarker::DebugMarker(Context *ctx, VkCommandBuffer cmd_buf, std::string_view name) : api_(ctx->api()), cmd_buf_(cmd_buf) { #ifdef ENABLE_GPU_DEBUG VkDebugUtilsLabelEXT label = {VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT}; - label.pLabelName = name; + label.pLabelName = name.data(); label.color[0] = label.color[1] = label.color[2] = label.color[3] = 1.0f; api_.vkCmdBeginDebugUtilsLabelEXT(cmd_buf_, &label); diff --git a/internal/Vk/MemoryAllocatorVK.cpp b/internal/Vk/MemoryAllocatorVK.cpp index a7a0f5c6..30cc29c0 100644 --- a/internal/Vk/MemoryAllocatorVK.cpp +++ b/internal/Vk/MemoryAllocatorVK.cpp @@ -34,7 +34,7 @@ void Ray::Vk::MemAllocation::Release() { } } -Ray::Vk::MemAllocator::MemAllocator(const char *name, Context *ctx, const uint32_t initial_pool_size, +Ray::Vk::MemAllocator::MemAllocator(std::string_view name, Context *ctx, const uint32_t initial_pool_size, uint32_t mem_type_index, const float growth_factor, const uint32_t max_pool_size) : name_(name), ctx_(ctx), growth_factor_(growth_factor), max_pool_size_(max_pool_size), mem_type_index_(mem_type_index) { @@ -108,8 +108,8 @@ Ray::Vk::MemAllocation Ray::Vk::MemAllocators::Allocate(const uint32_t alignment if (!allocators_[mem_type_index]) { std::string name = name_; name += " (type " + std::to_string(mem_type_index) + ")"; - allocators_[mem_type_index] = std::make_unique(name.c_str(), ctx_, initial_pool_size_, - mem_type_index, growth_factor_, max_pool_size_); + allocators_[mem_type_index] = std::make_unique(name, ctx_, initial_pool_size_, mem_type_index, + growth_factor_, max_pool_size_); } return allocators_[mem_type_index]->Allocate(alignment, size); diff --git a/internal/Vk/MemoryAllocatorVK.h b/internal/Vk/MemoryAllocatorVK.h index 07cc2e81..0f0df822 100644 --- a/internal/Vk/MemoryAllocatorVK.h +++ b/internal/Vk/MemoryAllocatorVK.h @@ -63,7 +63,7 @@ class MemAllocator { bool AllocateNewPool(uint32_t size); public: - MemAllocator(const char *name, Context *ctx, uint32_t initial_pool_size, uint32_t mem_type_index, + MemAllocator(std::string_view name, Context *ctx, uint32_t initial_pool_size, uint32_t mem_type_index, float growth_factor, uint32_t max_pool_size); ~MemAllocator(); @@ -91,7 +91,7 @@ class MemAllocators { std::unique_ptr allocators_[32]; public: - MemAllocators(const char *name, Context *ctx, const uint32_t initial_pool_size, const float growth_factor, + MemAllocators(std::string_view name, Context *ctx, const uint32_t initial_pool_size, const float growth_factor, const uint32_t max_pool_size) : name_(name), ctx_(ctx), initial_pool_size_(initial_pool_size), growth_factor_(growth_factor), max_pool_size_(max_pool_size) {} diff --git a/internal/Vk/ProgramVK.cpp b/internal/Vk/ProgramVK.cpp index 19650b97..83e5a9e0 100644 --- a/internal/Vk/ProgramVK.cpp +++ b/internal/Vk/ProgramVK.cpp @@ -16,7 +16,7 @@ extern const VkShaderStageFlagBits g_shader_stages_vk[]; } } // namespace Ray -Ray::Vk::Program::Program(const char *name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, +Ray::Vk::Program::Program(std::string_view name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(vs_ref, fs_ref, tcs_ref, tes_ref, log)) { @@ -24,13 +24,13 @@ Ray::Vk::Program::Program(const char *name, Context *ctx, Shader *vs_ref, Shader } } -Ray::Vk::Program::Program(const char *name, Context *ctx, Shader *cs_ref, ILog *log) : name_(name), ctx_(ctx) { +Ray::Vk::Program::Program(std::string_view name, Context *ctx, Shader *cs_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(cs_ref, log)) { throw std::runtime_error("Program Init error!"); } } -Ray::Vk::Program::Program(const char *name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, +Ray::Vk::Program::Program(std::string_view name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, Shader *miss_ref, Shader *intersection_ref, ILog *log) : name_(name), ctx_(ctx) { if (!Init(raygen_ref, closesthit_ref, anyhit_ref, miss_ref, intersection_ref, log)) { diff --git a/internal/Vk/ProgramVK.h b/internal/Vk/ProgramVK.h index 1d2c8ab7..86088677 100644 --- a/internal/Vk/ProgramVK.h +++ b/internal/Vk/ProgramVK.h @@ -35,10 +35,10 @@ class Program { public: Program() = default; - Program(const char *name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, + Program(std::string_view name, Context *ctx, Shader *vs_ref, Shader *fs_ref, Shader *tcs_ref, Shader *tes_ref, ILog *log); - Program(const char *name, Context *ctx, Shader *cs_ref, ILog *log); - Program(const char *name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, + Program(std::string_view name, Context *ctx, Shader *cs_ref, ILog *log); + Program(std::string_view name, Context *ctx, Shader *raygen_ref, Shader *closesthit_ref, Shader *anyhit_ref, Shader *miss_ref, Shader *intersection_ref, ILog *log); Program(const Program &rhs) = delete; @@ -60,7 +60,7 @@ class Program { const std::string &name() const { return name_; } const Attribute &attribute(const int i) const { return attributes_[i]; } - const Attribute &attribute(const char *name) const { + const Attribute &attribute(std::string_view name) const { for (int i = 0; i < int(attributes_.size()); i++) { if (attributes_[i].name == name) { return attributes_[i]; @@ -70,7 +70,7 @@ class Program { } const Uniform &uniform(const int i) const { return uniforms_[i]; } - const Uniform &uniform(const char *name) const { + const Uniform &uniform(std::string_view name) const { for (int i = 0; i < int(uniforms_.size()); i++) { if (uniforms_[i].name == name) { return uniforms_[i]; diff --git a/internal/Vk/RenderPassVK.cpp b/internal/Vk/RenderPassVK.cpp index 5f7e7ba5..b23fac85 100644 --- a/internal/Vk/RenderPassVK.cpp +++ b/internal/Vk/RenderPassVK.cpp @@ -7,8 +7,7 @@ #define VERBOSE_LOGGING #endif -namespace Ray { -namespace Vk { +namespace Ray::Vk { static_assert(int(eImageLayout::Undefined) == VK_IMAGE_LAYOUT_UNDEFINED, "!"); static_assert(int(eImageLayout::General) == VK_IMAGE_LAYOUT_GENERAL, "!"); static_assert(int(eImageLayout::ColorAttachmentOptimal) == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "!"); @@ -25,22 +24,21 @@ extern const VkAttachmentLoadOp vk_load_ops[] = { VK_ATTACHMENT_LOAD_OP_DONT_CARE, // DontCare VK_ATTACHMENT_LOAD_OP_NONE_EXT // None }; -static_assert((sizeof(vk_load_ops) / sizeof(vk_load_ops[0])) == int(eLoadOp::_Count), "!"); +static_assert(std::size(vk_load_ops) == int(eLoadOp::_Count), "!"); extern const VkAttachmentStoreOp vk_store_ops[] = { VK_ATTACHMENT_STORE_OP_STORE, // Store VK_ATTACHMENT_STORE_OP_DONT_CARE, // DontCare VK_ATTACHMENT_STORE_OP_NONE_EXT // None }; -static_assert((sizeof(vk_store_ops) / sizeof(vk_store_ops[0])) == int(eStoreOp::_Count), "!"); +static_assert(std::size(vk_store_ops) == int(eStoreOp::_Count), "!"); // make sure we can simply cast these static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_1_BIT == 1, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_2_BIT == 2, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_4_BIT == 4, "!"); static_assert(VkSampleCountFlagBits::VK_SAMPLE_COUNT_8_BIT == 8, "!"); -} // namespace Vk -} // namespace Ray +} // namespace Ray::Vk Ray::Vk::RenderPass &Ray::Vk::RenderPass::operator=(RenderPass &&rhs) noexcept { if (this == &rhs) { diff --git a/internal/Vk/ResourceVK.cpp b/internal/Vk/ResourceVK.cpp index 5e35de42..88442571 100644 --- a/internal/Vk/ResourceVK.cpp +++ b/internal/Vk/ResourceVK.cpp @@ -26,7 +26,7 @@ const Bitmask g_stage_bits_per_state[] = { eStage::AccStructureBuild, // BuildASWrite eStage::RayTracingShader // RayTracing }; -static_assert(sizeof(g_stage_bits_per_state) / sizeof(g_stage_bits_per_state[0]) == int(eResState::_Count), "!"); +static_assert(std::size(g_stage_bits_per_state) == int(eResState::_Count), "!"); const VkPipelineStageFlags g_stage_flags_vk[] = { VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, // VertexInput @@ -155,13 +155,13 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskctx(); + if (std::holds_alternative(transition.p_res) && *std::get(transition.p_res)) { + ctx = std::get(transition.p_res)->ctx(); eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_tex->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state != eResState::Undefined && old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed @@ -177,10 +177,10 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskhandle().img; - if (IsDepthStencilFormat(transition.p_tex->params.format)) { + new_barrier.image = std::get(transition.p_res)->handle().img; + if (IsDepthStencilFormat(std::get(transition.p_res)->params.format)) { new_barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; - } else if (IsDepthFormat(transition.p_tex->params.format)) { + } else if (IsDepthFormat(std::get(transition.p_res)->params.format)) { new_barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; } else { new_barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -195,15 +195,16 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskresource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } - } else if (transition.p_buf && *transition.p_buf) { - ctx = transition.p_buf->ctx(); + } else if (std::holds_alternative(transition.p_res) && + *std::get(transition.p_res)) { + ctx = std::get(transition.p_res)->ctx(); eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_buf->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed continue; @@ -216,7 +217,7 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskvk_handle(); + new_barrier.buffer = std::get(transition.p_res)->vk_handle(); // transition whole buffer for now new_barrier.offset = 0; new_barrier.size = VK_WHOLE_SIZE; @@ -225,15 +226,16 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskresource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } - } else if (transition.p_tex_arr && transition.p_tex_arr->page_count()) { - ctx = transition.p_tex_arr->ctx(); + } else if (std::holds_alternative(transition.p_res) && + std::get(transition.p_res)->page_count()) { + ctx = std::get(transition.p_res)->ctx(); eResState old_state = transition.old_state; if (old_state == eResState::Undefined) { // take state from resource itself - old_state = transition.p_tex_arr->resource_state; + old_state = std::get(transition.p_res)->resource_state; if (old_state != eResState::Undefined && old_state == transition.new_state && old_state != eResState::UnorderedAccess) { // transition is not needed @@ -249,7 +251,7 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskvk_image(); + new_barrier.image = std::get(transition.p_res)->vk_image(); new_barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; // transition whole image for now @@ -262,7 +264,7 @@ void Ray::Vk::TransitionResourceStates(VkCommandBuffer cmd_buf, const Bitmaskresource_state = transition.new_state; + std::get(transition.p_res)->resource_state = transition.new_state; } } } diff --git a/internal/Vk/ResourceVK.h b/internal/Vk/ResourceVK.h index 3149bd67..12025111 100644 --- a/internal/Vk/ResourceVK.h +++ b/internal/Vk/ResourceVK.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "../../Bitmask.h" #include "../../Span.h" @@ -62,9 +63,7 @@ class Texture; class TextureAtlas; struct TransitionInfo { - const Texture *p_tex = nullptr; - const TextureAtlas *p_tex_arr = nullptr; - const Buffer *p_buf = nullptr; + std::variant p_res; eResState old_state = eResState::Undefined; eResState new_state = eResState::Undefined; @@ -73,11 +72,11 @@ struct TransitionInfo { TransitionInfo() = default; TransitionInfo(const Texture *_p_tex, eResState _new_state) - : p_tex(_p_tex), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_tex), new_state(_new_state), update_internal_state(true) {} TransitionInfo(const TextureAtlas *_p_tex_arr, eResState _new_state) - : p_tex_arr(_p_tex_arr), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_tex_arr), new_state(_new_state), update_internal_state(true) {} TransitionInfo(const Buffer *_p_buf, eResState _new_state) - : p_buf(_p_buf), new_state(_new_state), update_internal_state(true) {} + : p_res(_p_buf), new_state(_new_state), update_internal_state(true) {} }; void TransitionResourceStates(VkCommandBuffer cmd_buf, Bitmask src_stages_mask, Bitmask dst_stages_mask, diff --git a/internal/Vk/ShaderVK.cpp b/internal/Vk/ShaderVK.cpp index ca0f90c2..bd577a25 100644 --- a/internal/Vk/ShaderVK.cpp +++ b/internal/Vk/ShaderVK.cpp @@ -34,7 +34,7 @@ static_assert(int(eShaderType::AnyHit) < int(eShaderType::Intersection), "!"); } // namespace Vk } // namespace Ray -Ray::Vk::Shader::Shader(const char *name, Context *ctx, Span shader_code, const eShaderType type, +Ray::Vk::Shader::Shader(std::string_view name, Context *ctx, Span shader_code, const eShaderType type, ILog *log) { if (!Init(name, ctx, shader_code, type, log)) { throw std::runtime_error("Shader Init error!"); @@ -64,7 +64,7 @@ Ray::Vk::Shader &Ray::Vk::Shader::operator=(Shader &&rhs) noexcept { return (*this); } -bool Ray::Vk::Shader::Init(const char *name, Context *ctx, Span shader_code, const eShaderType type, +bool Ray::Vk::Shader::Init(std::string_view name, Context *ctx, Span shader_code, const eShaderType type, ILog *log) { name_ = name; ctx_ = ctx; diff --git a/internal/Vk/ShaderVK.h b/internal/Vk/ShaderVK.h index 7ad3b655..18d854ee 100644 --- a/internal/Vk/ShaderVK.h +++ b/internal/Vk/ShaderVK.h @@ -58,7 +58,7 @@ class Shader { SmallVector pc_ranges; Shader() = default; - Shader(const char *name, Context *ctx, Span shader_code, eShaderType type, ILog *log); + Shader(std::string_view name, Context *ctx, Span shader_code, eShaderType type, ILog *log); Shader(const Shader &rhs) = delete; Shader(Shader &&rhs) noexcept { (*this) = std::move(rhs); } ~Shader(); @@ -69,9 +69,9 @@ class Shader { bool ready() const { return module_ != VK_NULL_HANDLE; } VkShaderModule module() const { return module_; } eShaderType type() const { return type_; } - const std::string &name() const { return name_; } + std::string_view name() const { return name_; } - bool Init(const char *name, Context *ctx, Span shader_code, eShaderType type, ILog *log); + bool Init(std::string_view name, Context *ctx, Span shader_code, eShaderType type, ILog *log); }; } // namespace Vk diff --git a/internal/Vk/TextureAtlasVK.cpp b/internal/Vk/TextureAtlasVK.cpp index bf8ad29f..b9321b47 100644 --- a/internal/Vk/TextureAtlasVK.cpp +++ b/internal/Vk/TextureAtlasVK.cpp @@ -8,8 +8,7 @@ #include "ContextVK.h" #include "TextureVK.h" -namespace Ray { -namespace Vk { +namespace Ray::Vk { template eTexFormat tex_format(); template <> eTexFormat tex_format() { return eTexFormat::RGBA8; } @@ -21,13 +20,10 @@ uint32_t FindMemoryType(uint32_t start_from, const VkPhysicalDeviceMemoryPropert uint32_t mem_type_bits, VkMemoryPropertyFlags desired_mem_flags, VkDeviceSize desired_size); extern const VkFormat g_formats_vk[]; -} // namespace Vk -} // namespace Ray +} // namespace Ray::Vk -#define _MIN(x, y) ((x) < (y) ? (x) : (y)) - -Ray::Vk::TextureAtlas::TextureAtlas(Context *ctx, const char *name, const eTexFormat format, const eTexFilter filter, - const int resx, const int resy, const int pages_count) +Ray::Vk::TextureAtlas::TextureAtlas(Context *ctx, std::string_view name, const eTexFormat format, + const eTexFilter filter, const int resx, const int resy, const int pages_count) : ctx_(ctx), name_(name), format_(format), filter_(filter), res_{resx, resy} { if (!Resize(pages_count)) { throw std::runtime_error("TextureAtlas cannot be resized!"); @@ -134,10 +130,10 @@ void Ray::Vk::TextureAtlas::AllocateMips(const color_t *data, const int _r for (int y = 0; y < src_res[1]; y += 2) { for (int x = 0; x < src_res[0]; x += 2) { const color_t c00 = src_data[(y + 0) * src_res[0] + (x + 0)]; - const color_t c10 = src_data[(y + 0) * src_res[0] + _MIN(x + 1, src_res[0] - 1)]; + const color_t c10 = src_data[(y + 0) * src_res[0] + std::min(x + 1, src_res[0] - 1)]; const color_t c11 = - src_data[_MIN(y + 1, src_res[1] - 1) * src_res[0] + _MIN(x + 1, src_res[0] - 1)]; - const color_t c01 = src_data[_MIN(y + 1, src_res[1] - 1) * src_res[0] + (x + 0)]; + src_data[std::min(y + 1, src_res[1] - 1) * src_res[0] + std::min(x + 1, src_res[0] - 1)]; + const color_t c01 = src_data[std::min(y + 1, src_res[1] - 1) * src_res[0] + (x + 0)]; color_t res; for (int j = 0; j < N; ++j) { diff --git a/internal/Vk/TextureAtlasVK.h b/internal/Vk/TextureAtlasVK.h index 99947b6b..894b2b77 100644 --- a/internal/Vk/TextureAtlasVK.h +++ b/internal/Vk/TextureAtlasVK.h @@ -26,7 +26,7 @@ class TextureAtlas { void WritePageData(int page, int posx, int posy, int sizex, int sizey, const void *data); public: - TextureAtlas(Context *ctx, const char *name, eTexFormat format, eTexFilter filter, int resx, int resy, + TextureAtlas(Context *ctx, std::string_view name, eTexFormat format, eTexFilter filter, int resx, int resy, int page_count = 0); ~TextureAtlas(); @@ -52,7 +52,8 @@ class TextureAtlas { int DownsampleRegion(int src_page, const int src_pos[2], const int src_res[2], int dst_pos[2]); - void CopyRegionTo(int page, int x, int y, int w, int h, const Buffer &dst_buf, VkCommandBuffer cmd_buf, int data_off) const; + void CopyRegionTo(int page, int x, int y, int w, int h, const Buffer &dst_buf, VkCommandBuffer cmd_buf, + int data_off) const; mutable eResState resource_state = eResState::Undefined; }; diff --git a/internal/Vk/TextureVK.cpp b/internal/Vk/TextureVK.cpp index 2b418454..91dff827 100644 --- a/internal/Vk/TextureVK.cpp +++ b/internal/Vk/TextureVK.cpp @@ -16,8 +16,7 @@ // #define TEX_VERBOSE_LOGGING #endif -namespace Ray { -namespace Vk { +namespace Ray::Vk { extern const VkFilter g_min_mag_filter_vk[]; extern const VkSamplerAddressMode g_wrap_mode_vk[]; extern const VkSamplerMipmapMode g_mipmap_mode_vk[]; @@ -83,21 +82,18 @@ const eTexUsage g_tex_usage_per_state[] = { {}, // BuildASWrite {} // RayTracing }; -static_assert(sizeof(g_tex_usage_per_state) / sizeof(g_tex_usage_per_state[0]) == int(eResState::_Count), "!"); -} // namespace Vk - -bool EndsWith(const std::string &str1, const char *str2); -} // namespace Ray +static_assert(std::size(g_tex_usage_per_state) == int(eResState::_Count), "!"); +} // namespace Ray::Vk Ray::eTexUsage Ray::Vk::TexUsageFromState(const eResState state) { return g_tex_usage_per_state[int(state)]; } -Ray::Vk::Texture::Texture(const char *name, Context *ctx, const TexParams &p, MemAllocators *mem_allocs, ILog *log) +Ray::Vk::Texture::Texture(std::string_view name, Context *ctx, const TexParams &p, MemAllocators *mem_allocs, ILog *log) : ctx_(ctx), name_(name) { Init(p, mem_allocs, log); } -Ray::Vk::Texture::Texture(const char *name, Context *ctx, const void *data, const uint32_t size, const TexParams &p, - Buffer &stage_buf, VkCommandBuffer cmd_buf, MemAllocators *mem_allocs, +Ray::Vk::Texture::Texture(std::string_view name, Context *ctx, const void *data, const uint32_t size, + const TexParams &p, Buffer &stage_buf, VkCommandBuffer cmd_buf, MemAllocators *mem_allocs, eTexLoadStatus *load_status, ILog *log) : ctx_(ctx), name_(name) { Init(data, size, p, stage_buf, cmd_buf, mem_allocs, load_status, log); diff --git a/internal/Vk/TextureVK.h b/internal/Vk/TextureVK.h index b2e1f682..86a84164 100644 --- a/internal/Vk/TextureVK.h +++ b/internal/Vk/TextureVK.h @@ -76,11 +76,11 @@ class Texture { mutable eResState resource_state = eResState::Undefined; Texture() = default; - Texture(const char *name, Context *ctx, const TexParams ¶ms, MemAllocators *mem_allocs, ILog *log); - Texture(const char *name, Context *ctx, const VkImage img, const VkImageView view, const VkSampler sampler, + Texture(std::string_view name, Context *ctx, const TexParams ¶ms, MemAllocators *mem_allocs, ILog *log); + Texture(std::string_view name, Context *ctx, const VkImage img, const VkImageView view, const VkSampler sampler, const TexParams &_params, ILog *log) : handle_{img, view, VK_NULL_HANDLE, sampler, 0}, name_(name), params(_params) {} - Texture(const char *name, Context *ctx, const void *data, uint32_t size, const TexParams &p, Buffer &stage_buf, + Texture(std::string_view name, Context *ctx, const void *data, uint32_t size, const TexParams &p, Buffer &stage_buf, VkCommandBuffer cmd_buf, MemAllocators *mem_allocs, eTexLoadStatus *load_status, ILog *log); Texture(const Texture &rhs) = delete; Texture(Texture &&rhs) noexcept { (*this) = std::move(rhs); } diff --git a/tests/main.cpp b/tests/main.cpp index a3c6af72..c3ec6e44 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -23,97 +23,97 @@ void test_span(); void test_sparse_storage(); void test_tex_storage(); -void test_aux_channels(const char *arch_list[], const char *preferred_device); -void test_ray_flags(const char *arch_list[], const char *preferred_device); -void test_two_sided_mat(const char *arch_list[], const char *preferred_device); -void test_oren_mat0(const char *arch_list[], const char *preferred_device); -void test_oren_mat1(const char *arch_list[], const char *preferred_device); -void test_oren_mat2(const char *arch_list[], const char *preferred_device); -void test_diff_mat0(const char *arch_list[], const char *preferred_device); -void test_diff_mat1(const char *arch_list[], const char *preferred_device); -void test_diff_mat2(const char *arch_list[], const char *preferred_device); -void test_sheen_mat0(const char *arch_list[], const char *preferred_device); -void test_sheen_mat1(const char *arch_list[], const char *preferred_device); -void test_sheen_mat2(const char *arch_list[], const char *preferred_device); -void test_sheen_mat3(const char *arch_list[], const char *preferred_device); -void test_glossy_mat0(const char *arch_list[], const char *preferred_device); -void test_glossy_mat1(const char *arch_list[], const char *preferred_device); -void test_glossy_mat2(const char *arch_list[], const char *preferred_device); -void test_spec_mat0(const char *arch_list[], const char *preferred_device); -void test_spec_mat1(const char *arch_list[], const char *preferred_device); -void test_spec_mat2(const char *arch_list[], const char *preferred_device); -void test_aniso_mat0(const char *arch_list[], const char *preferred_device); -void test_aniso_mat1(const char *arch_list[], const char *preferred_device); -void test_aniso_mat2(const char *arch_list[], const char *preferred_device); -void test_aniso_mat3(const char *arch_list[], const char *preferred_device); -void test_aniso_mat4(const char *arch_list[], const char *preferred_device); -void test_aniso_mat5(const char *arch_list[], const char *preferred_device); -void test_aniso_mat6(const char *arch_list[], const char *preferred_device); -void test_aniso_mat7(const char *arch_list[], const char *preferred_device); -void test_tint_mat0(const char *arch_list[], const char *preferred_device); -void test_tint_mat1(const char *arch_list[], const char *preferred_device); -void test_tint_mat2(const char *arch_list[], const char *preferred_device); -void test_plastic_mat0(const char *arch_list[], const char *preferred_device); -void test_plastic_mat1(const char *arch_list[], const char *preferred_device); -void test_plastic_mat2(const char *arch_list[], const char *preferred_device); -void test_metal_mat0(const char *arch_list[], const char *preferred_device); -void test_metal_mat1(const char *arch_list[], const char *preferred_device); -void test_metal_mat2(const char *arch_list[], const char *preferred_device); -void test_emit_mat0(const char *arch_list[], const char *preferred_device); -void test_emit_mat1(const char *arch_list[], const char *preferred_device); -void test_coat_mat0(const char *arch_list[], const char *preferred_device); -void test_coat_mat1(const char *arch_list[], const char *preferred_device); -void test_coat_mat2(const char *arch_list[], const char *preferred_device); -void test_refr_mis0(const char *arch_list[], const char *preferred_device); -void test_refr_mis1(const char *arch_list[], const char *preferred_device); -void test_refr_mis2(const char *arch_list[], const char *preferred_device); -void test_refr_mat0(const char *arch_list[], const char *preferred_device); -void test_refr_mat1(const char *arch_list[], const char *preferred_device); -void test_refr_mat2(const char *arch_list[], const char *preferred_device); -void test_refr_mat3(const char *arch_list[], const char *preferred_device); -void test_trans_mat0(const char *arch_list[], const char *preferred_device); -void test_trans_mat1(const char *arch_list[], const char *preferred_device); -void test_trans_mat2(const char *arch_list[], const char *preferred_device); -void test_trans_mat3(const char *arch_list[], const char *preferred_device); -void test_trans_mat4(const char *arch_list[], const char *preferred_device); -void test_trans_mat5(const char *arch_list[], const char *preferred_device); -void test_alpha_mat0(const char *arch_list[], const char *preferred_device); -void test_alpha_mat1(const char *arch_list[], const char *preferred_device); -void test_alpha_mat2(const char *arch_list[], const char *preferred_device); -void test_alpha_mat3(const char *arch_list[], const char *preferred_device); -void test_alpha_mat4(const char *arch_list[], const char *preferred_device); -void test_complex_mat0(const char *arch_list[], const char *preferred_device); -void test_complex_mat1(const char *arch_list[], const char *preferred_device); -void test_complex_mat2(const char *arch_list[], const char *preferred_device); -void test_complex_mat3(const char *arch_list[], const char *preferred_device); -void test_complex_mat4(const char *arch_list[], const char *preferred_device); -void test_complex_mat5(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_caching(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_clipped(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_adaptive(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_regions(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_nlm_filter(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_unet_filter(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_dof(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_mesh_lights(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_sphere_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_inside_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_spot_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_dir_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_sun_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_moon_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat5_hdri_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat6(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_nlm_filter(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_unet_filter(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_dof(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_mesh_lights(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_sphere_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_spot_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_dir_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat6_hdri_light(const char *arch_list[], const char *preferred_device); -void test_complex_mat7_refractive(const char *arch_list[], const char *preferred_device); -void test_complex_mat7_principled(const char *arch_list[], const char *preferred_device); +void test_aux_channels(const char *arch_list[], std::string_view preferred_device); +void test_ray_flags(const char *arch_list[], std::string_view preferred_device); +void test_two_sided_mat(const char *arch_list[], std::string_view preferred_device); +void test_oren_mat0(const char *arch_list[], std::string_view preferred_device); +void test_oren_mat1(const char *arch_list[], std::string_view preferred_device); +void test_oren_mat2(const char *arch_list[], std::string_view preferred_device); +void test_diff_mat0(const char *arch_list[], std::string_view preferred_device); +void test_diff_mat1(const char *arch_list[], std::string_view preferred_device); +void test_diff_mat2(const char *arch_list[], std::string_view preferred_device); +void test_sheen_mat0(const char *arch_list[], std::string_view preferred_device); +void test_sheen_mat1(const char *arch_list[], std::string_view preferred_device); +void test_sheen_mat2(const char *arch_list[], std::string_view preferred_device); +void test_sheen_mat3(const char *arch_list[], std::string_view preferred_device); +void test_glossy_mat0(const char *arch_list[], std::string_view preferred_device); +void test_glossy_mat1(const char *arch_list[], std::string_view preferred_device); +void test_glossy_mat2(const char *arch_list[], std::string_view preferred_device); +void test_spec_mat0(const char *arch_list[], std::string_view preferred_device); +void test_spec_mat1(const char *arch_list[], std::string_view preferred_device); +void test_spec_mat2(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat0(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat1(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat2(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat3(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat4(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat5(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat6(const char *arch_list[], std::string_view preferred_device); +void test_aniso_mat7(const char *arch_list[], std::string_view preferred_device); +void test_tint_mat0(const char *arch_list[], std::string_view preferred_device); +void test_tint_mat1(const char *arch_list[], std::string_view preferred_device); +void test_tint_mat2(const char *arch_list[], std::string_view preferred_device); +void test_plastic_mat0(const char *arch_list[], std::string_view preferred_device); +void test_plastic_mat1(const char *arch_list[], std::string_view preferred_device); +void test_plastic_mat2(const char *arch_list[], std::string_view preferred_device); +void test_metal_mat0(const char *arch_list[], std::string_view preferred_device); +void test_metal_mat1(const char *arch_list[], std::string_view preferred_device); +void test_metal_mat2(const char *arch_list[], std::string_view preferred_device); +void test_emit_mat0(const char *arch_list[], std::string_view preferred_device); +void test_emit_mat1(const char *arch_list[], std::string_view preferred_device); +void test_coat_mat0(const char *arch_list[], std::string_view preferred_device); +void test_coat_mat1(const char *arch_list[], std::string_view preferred_device); +void test_coat_mat2(const char *arch_list[], std::string_view preferred_device); +void test_refr_mis0(const char *arch_list[], std::string_view preferred_device); +void test_refr_mis1(const char *arch_list[], std::string_view preferred_device); +void test_refr_mis2(const char *arch_list[], std::string_view preferred_device); +void test_refr_mat0(const char *arch_list[], std::string_view preferred_device); +void test_refr_mat1(const char *arch_list[], std::string_view preferred_device); +void test_refr_mat2(const char *arch_list[], std::string_view preferred_device); +void test_refr_mat3(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat0(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat1(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat2(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat3(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat4(const char *arch_list[], std::string_view preferred_device); +void test_trans_mat5(const char *arch_list[], std::string_view preferred_device); +void test_alpha_mat0(const char *arch_list[], std::string_view preferred_device); +void test_alpha_mat1(const char *arch_list[], std::string_view preferred_device); +void test_alpha_mat2(const char *arch_list[], std::string_view preferred_device); +void test_alpha_mat3(const char *arch_list[], std::string_view preferred_device); +void test_alpha_mat4(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat0(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat1(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat2(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat3(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat4(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_caching(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_clipped(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_adaptive(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_regions(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_nlm_filter(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_unet_filter(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_dof(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_mesh_lights(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_sphere_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_inside_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_spot_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_dir_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_sun_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_moon_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat5_hdri_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_nlm_filter(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_unet_filter(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_dof(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_mesh_lights(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_sphere_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_spot_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_dir_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat6_hdri_light(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat7_refractive(const char *arch_list[], std::string_view preferred_device); +void test_complex_mat7_principled(const char *arch_list[], std::string_view preferred_device); void assemble_material_test_images(const char *arch_list[]); bool g_stop_on_fail = false; @@ -152,7 +152,7 @@ int main(int argc, char *argv[]) { const auto t1 = high_resolution_clock::now(); bool full_tests = false, nogpu = false, nocpu = false, run_detail_tests_on_fail = false; - const char *device_name = nullptr; + std::string_view device_name; const char *preferred_arch[] = {nullptr, nullptr}; double time_limit_m = DBL_MAX; int threads_count = 1; diff --git a/tests/test_aux_channels.cpp b/tests/test_aux_channels.cpp index f816108a..6f184a4d 100644 --- a/tests/test_aux_channels.cpp +++ b/tests/test_aux_channels.cpp @@ -17,7 +17,7 @@ extern bool g_nodx; extern std::mutex g_stdout_mtx; extern int g_validation_level; -void test_aux_channels(const char *arch_list[], const char *preferred_device) { +void test_aux_channels(const char *arch_list[], std::string_view preferred_device) { using namespace std::chrono; using namespace Ray; @@ -93,11 +93,12 @@ void test_aux_channels(const char *arch_list[], const char *preferred_device) { // skip unsupported (we fell back to some other renderer) continue; } - if (preferred_device) { + if (!preferred_device.empty()) { // make sure we use requested device if (!require(MatchDeviceNames(renderer->device_name(), preferred_device))) { std::lock_guard _(g_stdout_mtx); - printf("Wrong device: %s (%s was requested)\n", renderer->device_name(), preferred_device); + printf("Wrong device: %s (%s was requested)\n", renderer->device_name().data(), + preferred_device.data()); return; } } @@ -201,15 +202,15 @@ void test_aux_channels(const char *arch_list[], const char *preferred_device) { { std::lock_guard _(g_stdout_mtx); if (g_minimal_output) { - printf("\r%s (%6s, %s): %.1f%% ", name_buf, RendererTypeName(rt), s.use_hwrt ? "HWRT" : "SWRT", - 100.0); + printf("\r%s (%6s, %s): %.1f%% ", name_buf, RendererTypeName(rt).data(), + s.use_hwrt ? "HWRT" : "SWRT", 100.0); } printf("(PSNR: %.2f/%.2f dB, %.2f/%.2f dB, %.2f/%.2f dB, Time: %.2fm)\n", base_color_psnr, BaseColor_MinPSNR, normals_psnr, Normals_MinPSNR, depth_psnr, Depth_MinPSNR, test_duration_m); fflush(stdout); } - std::string type_name = RendererTypeName(rt); + std::string type_name(RendererTypeName(rt)); if (use_hwrt) { type_name += "_HWRT"; } diff --git a/tests/test_scene.cpp b/tests/test_scene.cpp index dd180dd9..640105f9 100644 --- a/tests/test_scene.cpp +++ b/tests/test_scene.cpp @@ -1116,8 +1116,8 @@ void schedule_render_jobs(ThreadPool &threads, Ray::RendererBase &renderer, cons if (!g_minimal_output) { const float prog = 100.0f * float(i + std::min(SamplePortion, max_samples - i)) / float(max_samples); std::lock_guard _(g_stdout_mtx); - printf("\r%s (%6s, %s): %.1f%% ", log_str, RendererTypeName(rt), settings.use_hwrt ? "HWRT" : "SWRT", - prog); + printf("\r%s (%6s, %s): %.1f%% ", log_str, RendererTypeName(rt).data(), + settings.use_hwrt ? "HWRT" : "SWRT", prog); fflush(stdout); } } @@ -1151,8 +1151,8 @@ void schedule_render_jobs(ThreadPool &threads, Ray::RendererBase &renderer, cons // report progress percentage const float prog = 100.0f * float(i + 1) / float(max_samples); std::lock_guard _(g_stdout_mtx); - printf("\r%s (%6s, %s): %.1f%% ", log_str, RendererTypeName(rt), settings.use_hwrt ? "HWRT" : "SWRT", - prog); + printf("\r%s (%6s, %s): %.1f%% ", log_str, RendererTypeName(rt).data(), + settings.use_hwrt ? "HWRT" : "SWRT", prog); fflush(stdout); } } diff --git a/tests/test_shading.cpp b/tests/test_shading.cpp index 13573862..d3a466b0 100644 --- a/tests/test_shading.cpp +++ b/tests/test_shading.cpp @@ -22,7 +22,7 @@ std::mutex g_stdout_mtx; extern int g_validation_level; template -void run_material_test(const char *arch_list[], const char *preferred_device, const char *test_name, +void run_material_test(const char *arch_list[], std::string_view preferred_device, const char *test_name, const MatDesc &mat_desc, const int sample_count, const double min_psnr, const int pix_thres, const eDenoiseMethod denoise = eDenoiseMethod::None, const bool partial = false, const char *textures[] = nullptr, const eTestScene test_scene = eTestScene::Standard) { @@ -31,7 +31,7 @@ void run_material_test(const char *arch_list[], const char *preferred_device, co } template -void run_material_test(const char *arch_list[], const char *preferred_device, const char *test_name, +void run_material_test(const char *arch_list[], std::string_view preferred_device, const char *test_name, const MatDesc &mat_desc, const int min_sample_count, const int max_sample_count, const float variance_threshold, const double min_psnr, const int pix_thres, const eDenoiseMethod denoise = eDenoiseMethod::None, const bool partial = false, @@ -87,11 +87,12 @@ void run_material_test(const char *arch_list[], const char *preferred_device, co // skip unsupported (we fell back to some other renderer) break; } - if (preferred_device) { + if (!preferred_device.empty()) { // make sure we use requested device if (!require(MatchDeviceNames(renderer->device_name(), preferred_device))) { std::lock_guard _(g_stdout_mtx); - printf("Wrong device: %s (%s was requested)\n", renderer->device_name(), preferred_device); + printf("Wrong device: %s (%s was requested)\n", renderer->device_name().data(), + preferred_device.data()); return; } } @@ -162,15 +163,15 @@ void run_material_test(const char *arch_list[], const char *preferred_device, co { std::lock_guard _(g_stdout_mtx); if (g_minimal_output) { - printf("\r%s (%6s, %s): %.1f%% ", name_buf, RendererTypeName(rt), s.use_hwrt ? "HWRT" : "SWRT", - 100.0); + printf("\r%s (%6s, %s): %.1f%% ", name_buf, RendererTypeName(rt).data(), + s.use_hwrt ? "HWRT" : "SWRT", 100.0); } printf("(PSNR: %.2f/%.2f dB, Fireflies: %i/%i, Time: %.2fm)\n", psnr, min_psnr, error_pixels, pix_thres, test_duration_m); fflush(stdout); } - std::string type = RendererTypeName(rt); + std::string type(RendererTypeName(rt)); if (use_hwrt) { type += "_HWRT"; } @@ -355,7 +356,7 @@ const double VeryFastMinPSNR = 25.0; // Oren-nayar material tests // -void test_oren_mat0(const char *arch_list[], const char *preferred_device) { +void test_oren_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 11; const int PixThres = 394; @@ -368,7 +369,7 @@ void test_oren_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "oren_mat0", desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_oren_mat1(const char *arch_list[], const char *preferred_device) { +void test_oren_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 308; @@ -382,7 +383,7 @@ void test_oren_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "oren_mat1", desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_oren_mat2(const char *arch_list[], const char *preferred_device) { +void test_oren_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const double MinPSNR = 30.7; const int PixThres = 385; @@ -401,7 +402,7 @@ void test_oren_mat2(const char *arch_list[], const char *preferred_device) { // Diffuse material tests // -void test_diff_mat0(const char *arch_list[], const char *preferred_device) { +void test_diff_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 328; @@ -415,7 +416,7 @@ void test_diff_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "diff_mat0", desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_diff_mat1(const char *arch_list[], const char *preferred_device) { +void test_diff_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 212; @@ -429,7 +430,7 @@ void test_diff_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "diff_mat1", desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_diff_mat2(const char *arch_list[], const char *preferred_device) { +void test_diff_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const double MinPSNR = 30.9; const int PixThres = 240; @@ -448,7 +449,7 @@ void test_diff_mat2(const char *arch_list[], const char *preferred_device) { // Sheen material tests // -void test_sheen_mat0(const char *arch_list[], const char *preferred_device) { +void test_sheen_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 215; @@ -464,7 +465,7 @@ void test_sheen_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "sheen_mat0", mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_sheen_mat1(const char *arch_list[], const char *preferred_device) { +void test_sheen_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 155; @@ -480,7 +481,7 @@ void test_sheen_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "sheen_mat1", mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_sheen_mat2(const char *arch_list[], const char *preferred_device) { +void test_sheen_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 265; @@ -496,7 +497,7 @@ void test_sheen_mat2(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "sheen_mat2", mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_sheen_mat3(const char *arch_list[], const char *preferred_device) { +void test_sheen_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const double MinPSNR = 30.5; const int PixThres = 270; @@ -517,7 +518,7 @@ void test_sheen_mat3(const char *arch_list[], const char *preferred_device) { // Glossy material tests // -void test_glossy_mat0(const char *arch_list[], const char *preferred_device) { +void test_glossy_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 440; const int PixThres = 375; @@ -531,7 +532,7 @@ void test_glossy_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "glossy_mat0", node_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_glossy_mat1(const char *arch_list[], const char *preferred_device) { +void test_glossy_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 54; const int PixThres = 350; @@ -545,7 +546,7 @@ void test_glossy_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "glossy_mat1", node_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_glossy_mat2(const char *arch_list[], const char *preferred_device) { +void test_glossy_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 130; @@ -563,7 +564,7 @@ void test_glossy_mat2(const char *arch_list[], const char *preferred_device) { // Specular material tests // -void test_spec_mat0(const char *arch_list[], const char *preferred_device) { +void test_spec_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 440; const int PixThres = 375; @@ -577,7 +578,7 @@ void test_spec_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "spec_mat0", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_spec_mat1(const char *arch_list[], const char *preferred_device) { +void test_spec_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 54; const int PixThres = 350; @@ -591,7 +592,7 @@ void test_spec_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "spec_mat1", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_spec_mat2(const char *arch_list[], const char *preferred_device) { +void test_spec_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 130; @@ -609,7 +610,7 @@ void test_spec_mat2(const char *arch_list[], const char *preferred_device) { // Anisotropic material tests // -void test_aniso_mat0(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 326; const int PixThres = 490; @@ -625,7 +626,7 @@ void test_aniso_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat0", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat1(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 330; const int PixThres = 465; @@ -641,7 +642,7 @@ void test_aniso_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat1", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat2(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 336; const int PixThres = 455; @@ -657,7 +658,7 @@ void test_aniso_mat2(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat2", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat3(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 352; const int PixThres = 475; @@ -673,7 +674,7 @@ void test_aniso_mat3(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat3", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat4(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat4(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 350; const int PixThres = 470; @@ -689,7 +690,7 @@ void test_aniso_mat4(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat4", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat5(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat5(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 310; const int PixThres = 540; @@ -705,7 +706,7 @@ void test_aniso_mat5(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat5", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat6(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat6(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 336; const int PixThres = 495; @@ -721,7 +722,7 @@ void test_aniso_mat6(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "aniso_mat6", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_aniso_mat7(const char *arch_list[], const char *preferred_device) { +void test_aniso_mat7(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 352; const int PixThres = 505; @@ -741,7 +742,7 @@ void test_aniso_mat7(const char *arch_list[], const char *preferred_device) { // Metal material tests // -void test_metal_mat0(const char *arch_list[], const char *preferred_device) { +void test_metal_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 86; const int PixThres = 1110; @@ -755,7 +756,7 @@ void test_metal_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "metal_mat0", metal_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_metal_mat1(const char *arch_list[], const char *preferred_device) { +void test_metal_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 16; const int PixThres = 350; @@ -769,7 +770,7 @@ void test_metal_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "metal_mat1", metal_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_metal_mat2(const char *arch_list[], const char *preferred_device) { +void test_metal_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const double MinPSNR = 30.6; const int PixThres = 245; @@ -788,7 +789,7 @@ void test_metal_mat2(const char *arch_list[], const char *preferred_device) { // Plastic material tests // -void test_plastic_mat0(const char *arch_list[], const char *preferred_device) { +void test_plastic_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 30; const int PixThres = 890; @@ -802,7 +803,7 @@ void test_plastic_mat0(const char *arch_list[], const char *preferred_device) { PixThres); } -void test_plastic_mat1(const char *arch_list[], const char *preferred_device) { +void test_plastic_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 19; const int PixThres = 210; @@ -816,7 +817,7 @@ void test_plastic_mat1(const char *arch_list[], const char *preferred_device) { PixThres); } -void test_plastic_mat2(const char *arch_list[], const char *preferred_device) { +void test_plastic_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 14; const int PixThres = 275; @@ -834,7 +835,7 @@ void test_plastic_mat2(const char *arch_list[], const char *preferred_device) { // Tint material tests // -void test_tint_mat0(const char *arch_list[], const char *preferred_device) { +void test_tint_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 26; const int PixThres = 1070; @@ -848,7 +849,7 @@ void test_tint_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "tint_mat0", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_tint_mat1(const char *arch_list[], const char *preferred_device) { +void test_tint_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 27; const int PixThres = 1630; @@ -862,7 +863,7 @@ void test_tint_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "tint_mat1", spec_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_tint_mat2(const char *arch_list[], const char *preferred_device) { +void test_tint_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 16; const int PixThres = 410; @@ -880,7 +881,7 @@ void test_tint_mat2(const char *arch_list[], const char *preferred_device) { // Emissive material tests // -void test_emit_mat0(const char *arch_list[], const char *preferred_device) { +void test_emit_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 90; const int PixThres = 390; @@ -899,7 +900,7 @@ void test_emit_mat0(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_NoLight); } -void test_emit_mat1(const char *arch_list[], const char *preferred_device) { +void test_emit_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 158; const int PixThres = 475; @@ -922,7 +923,7 @@ void test_emit_mat1(const char *arch_list[], const char *preferred_device) { // Clear coat material tests // -void test_coat_mat0(const char *arch_list[], const char *preferred_device) { +void test_coat_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const double MinPSNR = 30.55; const int PixThres = 275; @@ -938,7 +939,7 @@ void test_coat_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "coat_mat0", mat_desc, SampleCount, MinPSNR, PixThres); } -void test_coat_mat1(const char *arch_list[], const char *preferred_device) { +void test_coat_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const double MinPSNR = 30.80; const int PixThres = 165; @@ -954,7 +955,7 @@ void test_coat_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "coat_mat1", mat_desc, SampleCount, MinPSNR, PixThres); } -void test_coat_mat2(const char *arch_list[], const char *preferred_device) { +void test_coat_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 155; @@ -973,7 +974,7 @@ void test_coat_mat2(const char *arch_list[], const char *preferred_device) { // Refractive material tests // -void test_refr_mis0(const char *arch_list[], const char *preferred_device) { +void test_refr_mis0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 9; const double MinPSNR = 30.90; const int PixThres = 335; @@ -990,7 +991,7 @@ void test_refr_mis0(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Refraction_Plane); } -void test_refr_mis1(const char *arch_list[], const char *preferred_device) { +void test_refr_mis1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 13; const double MinPSNR = 30.65; const int PixThres = 265; @@ -1007,7 +1008,7 @@ void test_refr_mis1(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Refraction_Plane); } -void test_refr_mis2(const char *arch_list[], const char *preferred_device) { +void test_refr_mis2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const double MinPSNR = 30.60; const int PixThres = 225; @@ -1026,7 +1027,7 @@ void test_refr_mis2(const char *arch_list[], const char *preferred_device) { /// -void test_refr_mat0(const char *arch_list[], const char *preferred_device) { +void test_refr_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 295; const int PixThres = 1140; @@ -1042,7 +1043,7 @@ void test_refr_mat0(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_refr_mat1(const char *arch_list[], const char *preferred_device) { +void test_refr_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 382; const int PixThres = 765; @@ -1058,7 +1059,7 @@ void test_refr_mat1(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_refr_mat2(const char *arch_list[], const char *preferred_device) { +void test_refr_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 70; const int PixThres = 2175; @@ -1074,7 +1075,7 @@ void test_refr_mat2(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_refr_mat3(const char *arch_list[], const char *preferred_device) { +void test_refr_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 35; const int PixThres = 435; @@ -1094,7 +1095,7 @@ void test_refr_mat3(const char *arch_list[], const char *preferred_device) { // Transmissive material tests // -void test_trans_mat0(const char *arch_list[], const char *preferred_device) { +void test_trans_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 309; const int PixThres = 1125; @@ -1112,7 +1113,7 @@ void test_trans_mat0(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_trans_mat1(const char *arch_list[], const char *preferred_device) { +void test_trans_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 850; const int PixThres = 940; @@ -1130,7 +1131,7 @@ void test_trans_mat1(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_trans_mat2(const char *arch_list[], const char *preferred_device) { +void test_trans_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 254; const int PixThres = 930; @@ -1148,7 +1149,7 @@ void test_trans_mat2(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_trans_mat3(const char *arch_list[], const char *preferred_device) { +void test_trans_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 221; const int PixThres = 425; @@ -1166,7 +1167,7 @@ void test_trans_mat3(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_trans_mat4(const char *arch_list[], const char *preferred_device) { +void test_trans_mat4(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 264; const int PixThres = 810; @@ -1184,7 +1185,7 @@ void test_trans_mat4(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_trans_mat5(const char *arch_list[], const char *preferred_device) { +void test_trans_mat5(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 64; const int PixThres = 200; @@ -1206,7 +1207,7 @@ void test_trans_mat5(const char *arch_list[], const char *preferred_device) { // Transparent material tests // -void test_alpha_mat0(const char *arch_list[], const char *preferred_device) { +void test_alpha_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 46; const int PixThres = 650; @@ -1220,7 +1221,7 @@ void test_alpha_mat0(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "alpha_mat0", alpha_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_alpha_mat1(const char *arch_list[], const char *preferred_device) { +void test_alpha_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 52; const int PixThres = 535; @@ -1234,7 +1235,7 @@ void test_alpha_mat1(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "alpha_mat1", alpha_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_alpha_mat2(const char *arch_list[], const char *preferred_device) { +void test_alpha_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 42; const int PixThres = 415; @@ -1248,7 +1249,7 @@ void test_alpha_mat2(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "alpha_mat2", alpha_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_alpha_mat3(const char *arch_list[], const char *preferred_device) { +void test_alpha_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 18; const int PixThres = 120; @@ -1262,7 +1263,7 @@ void test_alpha_mat3(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "alpha_mat3", alpha_mat_desc, SampleCount, DefaultMinPSNR, PixThres); } -void test_alpha_mat4(const char *arch_list[], const char *preferred_device) { +void test_alpha_mat4(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 13; const double MinPSNR = 30.50; const int PixThres = 405; @@ -1280,7 +1281,7 @@ void test_alpha_mat4(const char *arch_list[], const char *preferred_device) { // Complex material tests // -void test_two_sided_mat(const char *arch_list[], const char *preferred_device) { +void test_two_sided_mat(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const double MinPSNR = 28.7; const int PixThres = 700; @@ -1299,7 +1300,7 @@ void test_two_sided_mat(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, textures, eTestScene::Two_Sided); } -void test_complex_mat0(const char *arch_list[], const char *preferred_device) { +void test_complex_mat0(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 11; const int PixThres = 760; @@ -1319,7 +1320,7 @@ void test_complex_mat0(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, textures); } -void test_complex_mat1(const char *arch_list[], const char *preferred_device) { +void test_complex_mat1(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 725; @@ -1340,7 +1341,7 @@ void test_complex_mat1(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, textures); } -void test_complex_mat2(const char *arch_list[], const char *preferred_device) { +void test_complex_mat2(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 625; @@ -1360,7 +1361,7 @@ void test_complex_mat2(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, textures); } -void test_complex_mat3(const char *arch_list[], const char *preferred_device) { +void test_complex_mat3(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 8; const int PixThres = 400; @@ -1381,7 +1382,7 @@ void test_complex_mat3(const char *arch_list[], const char *preferred_device) { eDenoiseMethod::None, false, textures); } -void test_complex_mat4(const char *arch_list[], const char *preferred_device) { +void test_complex_mat4(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 10; const int PixThres = 2160; @@ -1403,7 +1404,7 @@ void test_complex_mat4(const char *arch_list[], const char *preferred_device) { PixThres, eDenoiseMethod::None, false, textures); } -void test_complex_mat5(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 31; const int PixThres = 4695; @@ -1423,7 +1424,7 @@ void test_complex_mat5(const char *arch_list[], const char *preferred_device) { PixThres, eDenoiseMethod::None, false, textures); } -void test_complex_mat5_clipped(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_clipped(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 37; const int PixThres = 5215; @@ -1443,7 +1444,7 @@ void test_complex_mat5_clipped(const char *arch_list[], const char *preferred_de PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_Clipped); } -void test_complex_mat5_caching(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_caching(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 31; const int PixThres = 4695; @@ -1464,7 +1465,7 @@ void test_complex_mat5_caching(const char *arch_list[], const char *preferred_de eTestScene::Standard); } -void test_complex_mat5_adaptive(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_adaptive(const char *arch_list[], std::string_view preferred_device) { const int MinSampleCount = 8; const int MaxSampleCount = 18; const float VarianceThreshold = 0.004f; @@ -1487,7 +1488,7 @@ void test_complex_mat5_adaptive(const char *arch_list[], const char *preferred_d textures); } -void test_complex_mat5_regions(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_regions(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 7; const double MinPSNR = 25.50; const int PixThres = 3420; @@ -1508,7 +1509,7 @@ void test_complex_mat5_regions(const char *arch_list[], const char *preferred_de PixThres, eDenoiseMethod::None, true, textures); } -void test_complex_mat5_nlm_filter(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_nlm_filter(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 16; const int PixThres = 2110; @@ -1528,7 +1529,7 @@ void test_complex_mat5_nlm_filter(const char *arch_list[], const char *preferred PixThres, eDenoiseMethod::NLM, false, textures); } -void test_complex_mat5_unet_filter(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_unet_filter(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 22; const int PixThres = 1150; @@ -1548,7 +1549,7 @@ void test_complex_mat5_unet_filter(const char *arch_list[], const char *preferre DefaultMinPSNR, PixThres, eDenoiseMethod::UNet, false, textures); } -void test_complex_mat5_dof(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_dof(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 24; const double MinPSNR = 21.0; const int PixThres = 9755; @@ -1569,7 +1570,7 @@ void test_complex_mat5_dof(const char *arch_list[], const char *preferred_device eDenoiseMethod::None, false, textures, eTestScene::Standard_DOF0); } -void test_complex_mat5_mesh_lights(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_mesh_lights(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 29; const int PixThres = 4765; @@ -1590,7 +1591,7 @@ void test_complex_mat5_mesh_lights(const char *arch_list[], const char *preferre eTestScene::Standard_MeshLights); } -void test_complex_mat5_sphere_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_sphere_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 40; const double MinPSNR = 24.0; const int PixThres = 1465; @@ -1611,7 +1612,7 @@ void test_complex_mat5_sphere_light(const char *arch_list[], const char *preferr PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_SphereLight); } -void test_complex_mat5_inside_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_inside_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 48; const double MinPSNR = 25.0; const int PixThres = 2720; @@ -1632,7 +1633,7 @@ void test_complex_mat5_inside_light(const char *arch_list[], const char *preferr PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_InsideLight); } -void test_complex_mat5_spot_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_spot_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 5; const double MinPSNR = 31.30; const int PixThres = 565; @@ -1653,7 +1654,7 @@ void test_complex_mat5_spot_light(const char *arch_list[], const char *preferred PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_SpotLight); } -void test_complex_mat5_dir_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_dir_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 26; const double MinPSNR = 23.0; const int PixThres = 5145; @@ -1674,7 +1675,7 @@ void test_complex_mat5_dir_light(const char *arch_list[], const char *preferred_ PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_DirLight); } -void test_complex_mat5_sun_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_sun_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 15; const double MinPSNR = 24.25; const int PixThres = 4890; @@ -1695,7 +1696,7 @@ void test_complex_mat5_sun_light(const char *arch_list[], const char *preferred_ PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_SunLight); } -void test_complex_mat5_moon_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_moon_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 430; @@ -1715,7 +1716,7 @@ void test_complex_mat5_moon_light(const char *arch_list[], const char *preferred DefaultMinPSNR, PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_MoonLight); } -void test_complex_mat5_hdri_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat5_hdri_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 18; const double MinPSNR = 23.0; const int PixThres = 6270; @@ -1736,7 +1737,7 @@ void test_complex_mat5_hdri_light(const char *arch_list[], const char *preferred PixThres, eDenoiseMethod::None, false, textures, eTestScene::Standard_HDRLight); } -void test_complex_mat6(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 43; const double MinPSNR = 23.0; const int PixThres = 4375; @@ -1752,7 +1753,7 @@ void test_complex_mat6(const char *arch_list[], const char *preferred_device) { run_material_test(arch_list, preferred_device, "complex_mat6", olive_mat_desc, SampleCount, MinPSNR, PixThres); } -void test_complex_mat6_nlm_filter(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_nlm_filter(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const int PixThres = 1610; @@ -1768,7 +1769,7 @@ void test_complex_mat6_nlm_filter(const char *arch_list[], const char *preferred VeryFastMinPSNR, PixThres, eDenoiseMethod::NLM); } -void test_complex_mat6_unet_filter(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_unet_filter(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 23; const int PixThres = 900; @@ -1784,7 +1785,7 @@ void test_complex_mat6_unet_filter(const char *arch_list[], const char *preferre PixThres, eDenoiseMethod::UNet); } -void test_complex_mat6_dof(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_dof(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 25; const double MinPSNR = 22.0; const int PixThres = 5015; @@ -1801,7 +1802,7 @@ void test_complex_mat6_dof(const char *arch_list[], const char *preferred_device eDenoiseMethod::None, false, nullptr, eTestScene::Standard_DOF1); } -void test_complex_mat6_mesh_lights(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_mesh_lights(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 41; const double MinPSNR = 23.0; const int PixThres = 4375; @@ -1818,7 +1819,7 @@ void test_complex_mat6_mesh_lights(const char *arch_list[], const char *preferre PixThres, eDenoiseMethod::None, false, nullptr, eTestScene::Standard_MeshLights); } -void test_complex_mat6_sphere_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_sphere_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 86; const double MinPSNR = 23.0; const int PixThres = 1175; @@ -1835,7 +1836,7 @@ void test_complex_mat6_sphere_light(const char *arch_list[], const char *preferr PixThres, eDenoiseMethod::None, false, nullptr, eTestScene::Standard_SphereLight); } -void test_complex_mat6_spot_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_spot_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 4; const double MinPSNR = 31.15; const int PixThres = 195; @@ -1852,7 +1853,7 @@ void test_complex_mat6_spot_light(const char *arch_list[], const char *preferred PixThres, eDenoiseMethod::None, false, nullptr, eTestScene::Standard_SpotLight); } -void test_complex_mat6_dir_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_dir_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 86; const double MinPSNR = 18.0; const int PixThres = 9450; @@ -1869,7 +1870,7 @@ void test_complex_mat6_dir_light(const char *arch_list[], const char *preferred_ PixThres, eDenoiseMethod::None, false, nullptr, eTestScene::Standard_DirLight); } -void test_complex_mat6_hdri_light(const char *arch_list[], const char *preferred_device) { +void test_complex_mat6_hdri_light(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 55; const double MinPSNR = 21.0; const int PixThres = 6300; @@ -1886,7 +1887,7 @@ void test_complex_mat6_hdri_light(const char *arch_list[], const char *preferred PixThres, eDenoiseMethod::None, false, nullptr, eTestScene::Standard_HDRLight); } -void test_complex_mat7_refractive(const char *arch_list[], const char *preferred_device) { +void test_complex_mat7_refractive(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 5; const double MinPSNR = 21.0; const int PixThres = 8015; @@ -1896,7 +1897,7 @@ void test_complex_mat7_refractive(const char *arch_list[], const char *preferred eDenoiseMethod::None, false, nullptr, eTestScene::Standard_GlassBall0); } -void test_complex_mat7_principled(const char *arch_list[], const char *preferred_device) { +void test_complex_mat7_principled(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 12; const double MinPSNR = 21.0; const int PixThres = 8225; @@ -1906,7 +1907,7 @@ void test_complex_mat7_principled(const char *arch_list[], const char *preferred eDenoiseMethod::None, false, nullptr, eTestScene::Standard_GlassBall1); } -void test_ray_flags(const char *arch_list[], const char *preferred_device) { +void test_ray_flags(const char *arch_list[], std::string_view preferred_device) { const int SampleCount = 30; const double MinPSNR = 29.55; const int PixThres = 2120;