File indexing completed on 2025-12-16 10:17:09
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <memory>
0010
0011 #include "geocel/GeoTraits.hh"
0012
0013 #include "ImageInterface.hh"
0014
0015 namespace celeritas
0016 {
0017
0018 template<Ownership, MemSpace>
0019 struct ImageParamsData;
0020 template<Ownership, MemSpace>
0021 struct ImageStateData;
0022
0023
0024
0025
0026
0027 template<class G>
0028 class RaytraceImager final : public ImagerInterface
0029 {
0030 public:
0031
0032
0033 using SPGeometry = std::shared_ptr<G const>;
0034
0035
0036 public:
0037
0038 explicit RaytraceImager(SPGeometry geo);
0039 ~RaytraceImager() final = default;
0040
0041
0042 void operator()(Image<MemSpace::host>* image) final;
0043 void operator()(Image<MemSpace::device>* image) final;
0044
0045 private:
0046
0047
0048 using GTraits = GeoTraits<G>;
0049 template<Ownership W, MemSpace M>
0050 using GeoStateData = typename GTraits::template StateData<W, M>;
0051 template<Ownership W, MemSpace M>
0052 using GeoParamsData = typename GTraits::template ParamsData<W, M>;
0053 using GeoTrackView = typename GTraits::TrackView;
0054
0055 template<MemSpace M>
0056 using GeoParamsCRef = GeoParamsData<Ownership::const_reference, M>;
0057 template<MemSpace M>
0058 using GeoStateRef = GeoStateData<Ownership::reference, M>;
0059 template<MemSpace M>
0060 using ImageParamsCRef = ImageParamsData<Ownership::const_reference, M>;
0061 template<MemSpace M>
0062 using ImageStateRef = ImageStateData<Ownership::reference, M>;
0063
0064 struct CachedStates;
0065
0066
0067
0068 SPGeometry geo_;
0069 std::shared_ptr<CachedStates> cache_;
0070
0071
0072
0073 CELER_DEFAULT_MOVE_DELETE_COPY(RaytraceImager);
0074
0075 template<MemSpace M>
0076 void raytrace_impl(Image<M>* image);
0077
0078 void
0079 launch_raytrace_kernel(GeoParamsCRef<MemSpace::host> const& geo_params,
0080 GeoStateRef<MemSpace::host> const& geo_states,
0081 ImageParamsCRef<MemSpace::host> const& img_params,
0082 ImageStateRef<MemSpace::host> const& img_state) const;
0083
0084 void launch_raytrace_kernel(
0085 GeoParamsCRef<MemSpace::device> const& geo_params,
0086 GeoStateRef<MemSpace::device> const& geo_states,
0087 ImageParamsCRef<MemSpace::device> const& img_params,
0088 ImageStateRef<MemSpace::device> const& img_state) const;
0089 };
0090
0091
0092 }