From 960a922aa649101f9b262bd51013594df666f67e Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 11 Dec 2024 20:46:32 +0800 Subject: [PATCH] minor --- include/luisa/runtime/rhi/resource.h | 1 - src/backends/fallback/fallback_device.cpp | 13 +++-- src/backends/fallback/fallback_shader.cpp | 58 +++++++++++++---------- src/backends/fallback/fallback_shader.h | 2 +- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/include/luisa/runtime/rhi/resource.h b/include/luisa/runtime/rhi/resource.h index 27b2dd1ac..cb24289de 100644 --- a/include/luisa/runtime/rhi/resource.h +++ b/include/luisa/runtime/rhi/resource.h @@ -60,7 +60,6 @@ struct SwapchainCreationInfo : public ResourceCreationInfo { }; struct ShaderCreationInfo : public ResourceCreationInfo { - // luisa::string name; uint3 block_size; [[nodiscard]] static auto make_invalid() noexcept { diff --git a/src/backends/fallback/fallback_device.cpp b/src/backends/fallback/fallback_device.cpp index c6c9153f5..4429902fe 100644 --- a/src/backends/fallback/fallback_device.cpp +++ b/src/backends/fallback/fallback_device.cpp @@ -10,6 +10,7 @@ #include #include +#include #include "fallback_stream.h" #include "fallback_device.h" #include "fallback_texture.h" @@ -182,10 +183,14 @@ SwapchainCreationInfo FallbackDevice::create_swapchain(const SwapchainOption &op } ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, Function kernel) noexcept { - return ShaderCreationInfo{ - ResourceCreationInfo{ - .handle = reinterpret_cast(luisa::new_with_allocator(option, kernel))}}; - return ShaderCreationInfo(); + Clock clk; + auto shader = luisa::new_with_allocator(option, kernel); + LUISA_VERBOSE("Shader compilation took {} ms.", clk.toc()); + ShaderCreationInfo info{}; + info.handle = reinterpret_cast(shader); + info.native_handle = shader->native_handle(); + info.block_size = kernel.block_size(); + return info; } ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, const ir::KernelModule *kernel) noexcept { diff --git a/src/backends/fallback/fallback_shader.cpp b/src/backends/fallback/fallback_shader.cpp index a4bff6cbe..47b94e125 100644 --- a/src/backends/fallback/fallback_shader.cpp +++ b/src/backends/fallback/fallback_shader.cpp @@ -31,21 +31,25 @@ namespace luisa::compute::fallback { -[[nodiscard]] static luisa::half luisa_asin_f16(luisa::half x) noexcept { return ::half_float::asin(x); } -[[nodiscard]] static float luisa_asin_f32(float x) noexcept { return std::asin(x); } -[[nodiscard]] static double luisa_asin_f64(double x) noexcept { return std::asin(x); } +[[nodiscard]] static luisa::half luisa_fallback_asin_f16(luisa::half x) noexcept { return ::half_float::asin(x); } +[[nodiscard]] static float luisa_fallback_asin_f32(float x) noexcept { return std::asin(x); } +[[nodiscard]] static double luisa_fallback_asin_f64(double x) noexcept { return std::asin(x); } -[[nodiscard]] static luisa::half luisa_acos_f16(luisa::half x) noexcept { return ::half_float::acos(x); } -[[nodiscard]] static float luisa_acos_f32(float x) noexcept { return std::acos(x); } -[[nodiscard]] static double luisa_acos_f64(double x) noexcept { return std::acos(x); } +[[nodiscard]] static luisa::half luisa_fallback_acos_f16(luisa::half x) noexcept { return ::half_float::acos(x); } +[[nodiscard]] static float luisa_fallback_acos_f32(float x) noexcept { return std::acos(x); } +[[nodiscard]] static double luisa_fallback_acos_f64(double x) noexcept { return std::acos(x); } -[[nodiscard]] static luisa::half luisa_atan_f16(luisa::half x) noexcept { return ::half_float::atan(x); } -[[nodiscard]] static float luisa_atan_f32(float x) noexcept { return std::atan(x); } -[[nodiscard]] static double luisa_atan_f64(double x) noexcept { return std::atan(x); } +[[nodiscard]] static luisa::half luisa_fallback_atan_f16(luisa::half x) noexcept { return ::half_float::atan(x); } +[[nodiscard]] static float luisa_fallback_atan_f32(float x) noexcept { return std::atan(x); } +[[nodiscard]] static double luisa_fallback_atan_f64(double x) noexcept { return std::atan(x); } -[[nodiscard]] static luisa::half luisa_atan2_f16(luisa::half a, luisa::half b) noexcept { return ::half_float::atan2(a, b); } -[[nodiscard]] static float luisa_atan2_f32(float a, float b) noexcept { return std::atan2(a, b); } -[[nodiscard]] static double luisa_atan2_f64(double a, double b) noexcept { return std::atan2(a, b); } +[[nodiscard]] static luisa::half luisa_fallback_atan2_f16(luisa::half a, luisa::half b) noexcept { return ::half_float::atan2(a, b); } +[[nodiscard]] static float luisa_fallback_atan2_f32(float a, float b) noexcept { return std::atan2(a, b); } +[[nodiscard]] static double luisa_fallback_atan2_f64(double a, double b) noexcept { return std::atan2(a, b); } + +static void luisa_fallback_assert(bool condition, const char *message) noexcept { + if (!condition) { LUISA_ERROR_WITH_LOCATION("Assertion failed: {}.", message); } +} struct FallbackShaderLaunchConfig { uint3 block_id; @@ -68,6 +72,7 @@ FallbackShader::FallbackShader(const ShaderOption &option, Function kernel) noex options.ApproxFuncFPMath = true; options.EnableIPRA = true; options.StackSymbolOrdering = true; + options.TrapUnreachable = false; options.EnableMachineFunctionSplitter = true; options.EnableMachineOutliner = true; options.NoTrapAfterNoreturn = true; @@ -118,18 +123,21 @@ FallbackShader::FallbackShader(const ShaderOption &option, Function kernel) noex #include "fallback_device_api_map_symbols.inl.h" // asin, acos, atan, atan2 - map_symbol("luisa.asin.f16", &luisa_asin_f16); - map_symbol("luisa.asin.f32", &luisa_asin_f32); - map_symbol("luisa.asin.f64", &luisa_asin_f64); - map_symbol("luisa.acos.f16", &luisa_acos_f16); - map_symbol("luisa.acos.f32", &luisa_acos_f32); - map_symbol("luisa.acos.f64", &luisa_acos_f64); - map_symbol("luisa.atan.f16", &luisa_atan_f16); - map_symbol("luisa.atan.f32", &luisa_atan_f32); - map_symbol("luisa.atan.f64", &luisa_atan_f64); - map_symbol("luisa.atan2.f16", &luisa_atan2_f16); - map_symbol("luisa.atan2.f32", &luisa_atan2_f32); - map_symbol("luisa.atan2.f64", &luisa_atan2_f64); + map_symbol("luisa.asin.f16", &luisa_fallback_asin_f16); + map_symbol("luisa.asin.f32", &luisa_fallback_asin_f32); + map_symbol("luisa.asin.f64", &luisa_fallback_asin_f64); + map_symbol("luisa.acos.f16", &luisa_fallback_acos_f16); + map_symbol("luisa.acos.f32", &luisa_fallback_acos_f32); + map_symbol("luisa.acos.f64", &luisa_fallback_acos_f64); + map_symbol("luisa.atan.f16", &luisa_fallback_atan_f16); + map_symbol("luisa.atan.f32", &luisa_fallback_atan_f32); + map_symbol("luisa.atan.f64", &luisa_fallback_atan_f64); + map_symbol("luisa.atan2.f16", &luisa_fallback_atan2_f16); + map_symbol("luisa.atan2.f32", &luisa_fallback_atan2_f32); + map_symbol("luisa.atan2.f64", &luisa_fallback_atan2_f64); + + // assert + map_symbol("luisa.assert", &luisa_fallback_assert); if (auto error = _jit->getMainJITDylib().define( ::llvm::orc::absoluteSymbols(std::move(symbol_map)))) { @@ -161,7 +169,7 @@ FallbackShader::FallbackShader(const ShaderOption &option, Function kernel) noex auto llvm_ctx = std::make_unique(); auto builtin_module = fallback_backend_device_builtin_module(); llvm::SMDiagnostic parse_error; - auto llvm_module = llvm::parseIR(llvm::MemoryBufferRef{builtin_module, "module"}, parse_error, *llvm_ctx); + auto llvm_module = llvm::parseIR(llvm::MemoryBufferRef{builtin_module, ""}, parse_error, *llvm_ctx); if (!llvm_module) { LUISA_ERROR_WITH_LOCATION("Failed to generate LLVM IR: {}.", luisa::string_view{parse_error.getMessage()}); diff --git a/src/backends/fallback/fallback_shader.h b/src/backends/fallback/fallback_shader.h index dc9ca64b8..6f04cebcf 100644 --- a/src/backends/fallback/fallback_shader.h +++ b/src/backends/fallback/fallback_shader.h @@ -59,7 +59,7 @@ class FallbackShader { [[nodiscard]] auto argument_buffer_size() const noexcept { return _argument_buffer_size; } [[nodiscard]] auto shared_memory_size() const noexcept { return _shared_memory_size; } [[nodiscard]] size_t argument_offset(uint uid) const noexcept; - //[[nodiscard]] auto callbacks() const noexcept { return _callbacks.data(); } + [[nodiscard]] auto native_handle() const noexcept { return _kernel_entry; } }; }// namespace luisa::compute::fallback