@@ -814,6 +814,32 @@ build(const kernel_bundle<bundle_state::input> &InputBundle,
814
814
815
815
namespace ext ::oneapi::experimental {
816
816
817
+ namespace detail {
818
+ struct create_bundle_from_source_props ;
819
+ struct build_source_bundle_props ;
820
+ } // namespace detail
821
+
822
+ // ///////////////////////
823
+ // PropertyT syclex::include_files
824
+ // ///////////////////////
825
+ struct include_files
826
+ : detail::run_time_property_key<detail::PropKind::IncludeFiles> {
827
+ include_files ();
828
+ include_files (const std::string &name, const std::string &content) {
829
+ record.emplace_back (std::make_pair (name, content));
830
+ }
831
+ void add (const std::string &name, const std::string &content) {
832
+ record.emplace_back (std::make_pair (name, content));
833
+ }
834
+ std::vector<std::pair<std::string, std::string>> record;
835
+ };
836
+ using include_files_key = include_files;
837
+
838
+ template <>
839
+ struct is_property_key_of <include_files_key,
840
+ detail::create_bundle_from_source_props>
841
+ : std::true_type {};
842
+
817
843
// ///////////////////////
818
844
// PropertyT syclex::build_options
819
845
// ///////////////////////
@@ -826,8 +852,7 @@ struct build_options
826
852
using build_options_key = build_options;
827
853
828
854
template <>
829
- struct is_property_key_of <build_options_key,
830
- sycl::kernel_bundle<bundle_state::ext_oneapi_source>>
855
+ struct is_property_key_of <build_options_key, detail::build_source_bundle_props>
831
856
: std::true_type {};
832
857
833
858
// ///////////////////////
@@ -840,72 +865,132 @@ struct save_log : detail::run_time_property_key<detail::PropKind::BuildLog> {
840
865
using save_log_key = save_log;
841
866
842
867
template <>
843
- struct is_property_key_of <save_log_key,
844
- sycl::kernel_bundle<bundle_state::ext_oneapi_source>>
868
+ struct is_property_key_of <save_log_key, detail::build_source_bundle_props>
845
869
: std::true_type {};
846
870
847
871
// ///////////////////////
848
- // syclex::is_source_kernel_bundle_supported
872
+ // PropertyT syclex::registered_kernel_names
849
873
// ///////////////////////
874
+ struct registered_kernel_names
875
+ : detail::run_time_property_key<detail::PropKind::RegisteredKernelNames> {
876
+ std::vector<std::string> kernel_names;
877
+ registered_kernel_names () {}
878
+ registered_kernel_names (const std::string &knArg) : kernel_names{knArg} {}
879
+ registered_kernel_names (const std::vector<std::string> &knsArg)
880
+ : kernel_names(knsArg) {}
881
+ void add (const std::string &name) { kernel_names.push_back (name); }
882
+ };
883
+ using registered_kernel_names_key = registered_kernel_names;
884
+
885
+ template <>
886
+ struct is_property_key_of <registered_kernel_names_key,
887
+ detail::build_source_bundle_props> : std::true_type {
888
+ };
889
+
890
+ namespace detail {
891
+ // forward decls
850
892
__SYCL_EXPORT bool is_source_kernel_bundle_supported (backend BE,
851
893
source_language Language);
852
894
853
- // ///////////////////////
854
- // syclex::create_kernel_bundle_from_source
855
- // ///////////////////////
856
-
857
895
__SYCL_EXPORT kernel_bundle<bundle_state::ext_oneapi_source>
858
- create_kernel_bundle_from_source (const context &SyclContext,
859
- source_language Language,
860
- const std::string &Source);
896
+ make_kernel_bundle_from_source (
897
+ const context &SyclContext, source_language Language,
898
+ const std::string &Source,
899
+ std::vector<std::pair<std::string, std::string>> IncludePairsVec);
861
900
862
901
#if (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
863
902
__SYCL_EXPORT kernel_bundle<bundle_state::ext_oneapi_source>
864
- create_kernel_bundle_from_source (const context &SyclContext,
865
- source_language Language,
866
- const std::vector<std::byte> &Bytes);
903
+ make_kernel_bundle_from_source (
904
+ const context &SyclContext, source_language Language,
905
+ const std::vector<std::byte> &Bytes,
906
+ std::vector<std::pair<std::string, std::string>> IncludePairsVec);
867
907
#endif
868
908
869
- // ///////////////////////
870
- // syclex::build(source_kb) => exe_kb
871
- // ///////////////////////
872
- namespace detail {
873
- // forward decl
874
909
__SYCL_EXPORT kernel_bundle<bundle_state::executable>
875
910
build_from_source (kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
876
911
const std::vector<device> &Devices,
877
912
const std::vector<std::string> &BuildOptions,
878
- std::string *LogPtr);
913
+ std::string *LogPtr,
914
+ const std::vector<std::string> &RegisteredKernelNames);
879
915
880
916
} // namespace detail
881
917
918
+ // ///////////////////////
919
+ // syclex::create_kernel_bundle_from_source
920
+ // ///////////////////////
921
+ template <
922
+ typename PropertyListT = empty_properties_t ,
923
+ typename = std::enable_if_t <
924
+ is_property_list_v<PropertyListT> &&
925
+ detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
926
+ PropertyListT>::value>>
927
+ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source (
928
+ const context &SyclContext, source_language Language,
929
+ const std::string &Source, PropertyListT props = {}) {
930
+ std::vector<std::pair<std::string, std::string>> IncludePairsVec;
931
+ if constexpr (props.template has_property <include_files>()) {
932
+ IncludePairsVec = props.template get_property <include_files>().record ;
933
+ }
934
+
935
+ return detail::make_kernel_bundle_from_source (SyclContext, Language, Source,
936
+ IncludePairsVec);
937
+ }
938
+
939
+ #if (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
940
+ template <
941
+ typename PropertyListT = empty_properties_t ,
942
+ typename = std::enable_if_t <
943
+ is_property_list_v<PropertyListT> &&
944
+ detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
945
+ PropertyListT>::value>>
946
+ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source (
947
+ const context &SyclContext, source_language Language,
948
+ const std::vector<std::byte> &Bytes, PropertyListT props = {}) {
949
+ std::vector<std::pair<std::string, std::string>> IncludePairsVec;
950
+ if constexpr (props.template has_property <include_files>()) {
951
+ IncludePairsVec = props.template get_property <include_files>().record ;
952
+ }
953
+
954
+ return detail::make_kernel_bundle_from_source (SyclContext, Language, Bytes,
955
+ IncludePairsVec);
956
+ }
957
+ #endif
958
+
959
+ // ///////////////////////
960
+ // syclex::build(source_kb) => exe_kb
961
+ // ///////////////////////
962
+
882
963
template <typename PropertyListT = empty_properties_t ,
883
964
typename = std::enable_if_t <
884
965
is_property_list_v<PropertyListT> &&
885
- detail::all_props_are_keys_of<
886
- kernel_bundle<bundle_state::ext_oneapi_source>,
887
- PropertyListT>::value>>
966
+ detail::all_props_are_keys_of<detail::build_source_bundle_props,
967
+ PropertyListT>::value>>
888
968
889
969
kernel_bundle<bundle_state::executable>
890
970
build (kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
891
971
const std::vector<device> &Devices, PropertyListT props = {}) {
892
972
std::vector<std::string> BuildOptionsVec;
893
973
std::string *LogPtr = nullptr ;
974
+ std::vector<std::string> RegisteredKernelNamesVec;
894
975
if constexpr (props.template has_property <build_options>()) {
895
976
BuildOptionsVec = props.template get_property <build_options>().opts ;
896
977
}
897
978
if constexpr (props.template has_property <save_log>()) {
898
979
LogPtr = props.template get_property <save_log>().log ;
899
980
}
900
- return detail::build_from_source (SourceKB, Devices, BuildOptionsVec, LogPtr);
981
+ if constexpr (props.template has_property <registered_kernel_names>()) {
982
+ RegisteredKernelNamesVec =
983
+ props.template get_property <registered_kernel_names>().kernel_names ;
984
+ }
985
+ return detail::build_from_source (SourceKB, Devices, BuildOptionsVec, LogPtr,
986
+ RegisteredKernelNamesVec);
901
987
}
902
988
903
989
template <typename PropertyListT = empty_properties_t ,
904
990
typename = std::enable_if_t <
905
991
is_property_list_v<PropertyListT> &&
906
- detail::all_props_are_keys_of<
907
- kernel_bundle<bundle_state::ext_oneapi_source>,
908
- PropertyListT>::value>>
992
+ detail::all_props_are_keys_of<detail::build_source_bundle_props,
993
+ PropertyListT>::value>>
909
994
kernel_bundle<bundle_state::executable>
910
995
build (kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
911
996
PropertyListT props = {}) {
0 commit comments