Material Definition Language API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
imdl_compiler.h
Go to the documentation of this file.
1 /***************************************************************************************************
2  * Copyright 2018 NVIDIA Corporation. All rights reserved.
3  **************************************************************************************************/
6 
7 #ifndef MI_NEURAYLIB_IMDL_COMPILER_H
8 #define MI_NEURAYLIB_IMDL_COMPILER_H
9 
12 #include <mi/neuraylib/typedefs.h>
13 #include <mi/neuraylib/ivalue.h>
15 #include <mi/neuraylib/version.h>
16 
17 namespace mi {
18 
19 namespace base { class ILogger; }
20 
21 class IMap;
22 class IString;
23 
24 namespace neuraylib {
25 
26 class IBsdf_isotropic_data;
27 class ICanvas;
28 class ICompiled_material;
29 class ILightprofile;
30 class IFunction_call;
31 class ILink_unit;
32 class IMdl_backend;
33 class IMdl_execution_context;
34 class ITarget_code;
35 class ITarget_argument_block;
36 class ITransaction;
37 
38 struct Target_function_description;
39 
60 class IMdl_compiler : public
66  mi::base::Interface_declare<0x8fff0a2d,0x7df7,0x4552,0x92,0xf7,0x36,0x1d,0x31,0xc6,0x30,0x08>
67 {
68 public:
70 
71 
80  virtual void set_logger( base::ILogger* logger) = 0;
81 
86  virtual base::ILogger* get_logger() = 0;
87 
89 
91 
102  virtual Sint32 add_module_path( const char* path) = 0;
103 
114  virtual Sint32 remove_module_path( const char* path) = 0;
115 
120  virtual void clear_module_paths() = 0;
121 
128  virtual Size get_module_paths_length() const = 0;
129 
136  virtual const IString* get_module_path( Size index) const = 0;
137 
139 
141 
154  virtual Sint32 add_resource_path( const char* path) = 0;
155 
168  virtual Sint32 remove_resource_path( const char* path) = 0;
169 
176  virtual void clear_resource_paths() = 0;
177 
186  virtual Size get_resource_paths_length() const = 0;
187 
196  virtual const IString* get_resource_path( Size index) const = 0;
197 
199 
201 
211  virtual Sint32 load_plugin_library( const char* path) = 0;
212 
214 
216 
242  ITransaction* transaction, const char* module_name, const IMap* options) = 0;
243 
244 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
270  ITransaction* transaction, const char* module_name, const IMap* options)
271  {
272  return deprecated_load_module(transaction, module_name, options);
273  }
274 #endif
275 
306  virtual Sint32 load_module(
307  ITransaction* transaction, const char* module_name, IMdl_execution_context* context = 0) = 0;
308 
333  ITransaction* transaction,
334  const char* module_name,
335  const char* module_source,
336  const IMap* options) = 0;
337 
338 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
363  ITransaction* transaction,
364  const char* module_name,
365  const char* module_source,
366  const IMap* options)
367  {
369  transaction,
370  module_name,
371  module_source,
372  options);
373  }
374 #endif
375 
406  ITransaction* transaction,
407  const char* module_name,
408  const char* module_source,
409  IMdl_execution_context* context = 0) = 0;
410 
427  virtual Sint32 add_builtin_module( const char* module_name, const char* module_source) = 0;
428 
455  ITransaction* transaction,
456  const char* module_name,
457  const char* filename,
458  const IMap* options) = 0;
459 
460 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
487  ITransaction* transaction,
488  const char* module_name,
489  const char* filename,
490  const IMap* options)
491  {
493  transaction,
494  module_name,
495  filename,
496  options);
497  }
498 #endif
499 
528  virtual Sint32 export_module(
529  ITransaction* transaction,
530  const char* module_name,
531  const char* filename,
532  IMdl_execution_context* context = 0) = 0;
533 
560  ITransaction* transaction,
561  const char* module_name,
562  IString* exported_module,
563  const IMap* options) = 0;
564 
565 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
592  ITransaction* transaction,
593  const char* module_name,
594  IString* exported_module,
595  const IMap* options)
596  {
598  transaction,
599  module_name,
600  exported_module,
601  options);
602  }
603 #endif
604 
634  ITransaction* transaction,
635  const char* module_name,
636  IString* exported_module,
637  IMdl_execution_context* context = 0) = 0;
638 
670  virtual Sint32 export_canvas(
671  const char* filename, const ICanvas* canvas, Uint32 quality = 100) const = 0;
672 
682  virtual Sint32 export_lightprofile(
683  const char* filename, const ILightprofile* lightprofile) const = 0;
684 
694  virtual Sint32 export_bsdf_data(
695  const char* filename,
696  const IBsdf_isotropic_data* reflection,
697  const IBsdf_isotropic_data* transmission) const = 0;
698 
700 
702 
710  virtual const IString* uvtile_marker_to_string(
711  const char* marker,
712  Sint32 u,
713  Sint32 v) const = 0;
714 
721  virtual const IString* uvtile_string_to_marker(
722  const char* str, const char* marker) const = 0;
723 
725 
727 
734  MB_FORCE_32_BIT = 0xffffffffU // Undocumented, for alignment only
735  };
736 
742  virtual IMdl_backend* get_backend( Mdl_backend_kind kind) = 0;
743 
745 };
746 
748 
750 class IMdl_backend : public
751  mi::base::Interface_declare<0x9ecdd747,0x20b8,0x4a8a,0xb1,0xe2,0x62,0xb2,0x62,0x30,0xd3,0x67>
752 {
753 public:
774 #if !defined(MDL_SOURCE_RELEASE) && defined(MDL_ENABLE_INTERPRETER)
775 #endif
780 #ifndef MDL_SOURCE_RELEASE
825 #endif // MDL_SOURCE_RELEASE
956  virtual Sint32 set_option( const char* name, const char* value) = 0;
964 
979  virtual Sint32 set_option_binary(
980  const char* name,
981  const char* data,
982  Size size) = 0;
983 
988  virtual const Uint8* get_device_library( Size &size) const = 0;
989 
1022  ITransaction* transaction,
1023  const IFunction_call* call,
1024  Float32 mdl_meters_per_scene_unit,
1025  Float32 mdl_wavelength_min,
1026  Float32 mdl_wavelength_max,
1027  const char* fname,
1028  Sint32* errors) = 0;
1029 
1030 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1063  ITransaction* transaction,
1064  const IFunction_call* call,
1065  Float32 mdl_meters_per_scene_unit,
1066  Float32 mdl_wavelength_min,
1067  Float32 mdl_wavelength_max,
1068  const char* fname,
1069  Sint32* errors)
1070  {
1072  transaction,
1073  call,
1074  mdl_meters_per_scene_unit,
1075  mdl_wavelength_min,
1076  mdl_wavelength_max,
1077  fname,
1078  errors);
1079  }
1080 #endif
1081 
1116  virtual const ITarget_code* translate_environment(
1117  ITransaction* transaction,
1118  const IFunction_call* call,
1119  const char* fname,
1120  IMdl_execution_context* context) = 0;
1121 
1156  ITransaction* transaction,
1157  const ICompiled_material* material,
1158  const char* path,
1159  const char* fname,
1160  Sint32* errors) = 0;
1161 
1162 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1197  ITransaction* transaction,
1198  const ICompiled_material* material,
1199  const char* path,
1200  const char* fname,
1201  Sint32* errors)
1202  {
1204  transaction,
1205  material,
1206  path,
1207  fname,
1208  errors);
1209  }
1210 #endif
1211 
1243  ITransaction* transaction,
1244  const ICompiled_material* material,
1245  const char* path,
1246  const char* fname,
1247  IMdl_execution_context* context) = 0;
1248 
1291  ITransaction* transaction,
1292  const ICompiled_material* material,
1293  const char* path,
1294  const char* fname,
1295  const Float32_4_4_struct& world_to_obj,
1296  const Float32_4_4_struct& obj_to_world,
1297  Sint32 object_id,
1298  Sint32* errors) = 0;
1299 
1300 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1301  const ITarget_code* translate_material_expression_uniform_state(
1343  ITransaction* transaction,
1344  const ICompiled_material* material,
1345  const char* path,
1346  const char* fname,
1347  const Float32_4_4_struct& world_to_obj,
1348  const Float32_4_4_struct& obj_to_world,
1349  Sint32 object_id,
1350  Sint32* errors)
1351  {
1353  transaction,
1354  material,
1355  path,
1356  fname,
1357  world_to_obj,
1358  obj_to_world,
1359  object_id,
1360  errors);
1361  }
1362 #endif
1363 
1403  ITransaction* transaction,
1404  const ICompiled_material* material,
1405  const char* const paths[],
1406  Uint32 path_cnt,
1407  const char* fname,
1408  Sint32* errors) = 0;
1409 
1410 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1411  const ITarget_code* translate_material_expressions(
1450  ITransaction* transaction,
1451  const ICompiled_material* material,
1452  const char* const paths[],
1453  Uint32 path_cnt,
1454  const char* fname,
1455  Sint32* errors)
1456  {
1458  transaction,
1459  material,
1460  paths,
1461  path_cnt,
1462  fname,
1463  errors);
1464  }
1465 #endif
1466 
1496  ITransaction* transaction,
1497  const ICompiled_material* material,
1498  const char* path,
1499  const char* base_fname,
1500  bool include_geometry_normal,
1501  Sint32* errors) = 0;
1502 
1503 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1533  ITransaction* transaction,
1534  const ICompiled_material* material,
1535  const char* path,
1536  const char* base_fname,
1537  bool include_geometry_normal,
1538  Sint32* errors)
1539  {
1541  transaction,
1542  material,
1543  path,
1544  base_fname,
1545  include_geometry_normal,
1546  errors);
1547  }
1548 #endif
1549 
1573  virtual const ITarget_code* translate_material_df(
1574  ITransaction* transaction,
1575  const ICompiled_material* material,
1576  const char* path,
1577  const char* base_fname,
1578  IMdl_execution_context* context) = 0;
1579 
1580 
1599  ITransaction* transaction,
1600  const ICompiled_material* material,
1601  Target_function_description* function_descriptions,
1602  Size description_count,
1603  bool include_geometry_normal) = 0;
1604 
1605 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1624  ITransaction* transaction,
1625  const ICompiled_material* material,
1626  Target_function_description* function_descriptions,
1627  Size description_count,
1628  bool include_geometry_normal)
1629  {
1631  transaction,
1632  material,
1633  function_descriptions,
1634  description_count,
1635  include_geometry_normal);
1636  }
1637 #endif
1638 
1664  virtual const ITarget_code* translate_material(
1665  ITransaction* transaction,
1666  const ICompiled_material* material,
1667  Target_function_description* function_descriptions,
1668  Size description_count,
1669  IMdl_execution_context* context) = 0;
1670 
1680  ITransaction* transaction,
1681  Sint32* errors) = 0;
1682 
1683 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1693  ITransaction* transaction,
1694  Sint32* errors)
1695  {
1696  return deprecated_create_link_unit(transaction, errors);
1697  }
1698 #endif
1699 
1713  virtual ILink_unit* create_link_unit(
1714  ITransaction* transaction,
1715  IMdl_execution_context* context) = 0;
1716 
1727  const ILink_unit* lu, Sint32* errors) = 0;
1728 
1729 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
1740  const ILink_unit* lu, Sint32* errors)
1741  {
1742  return deprecated_translate_link_unit(lu, errors);
1743  }
1744 #endif
1745 
1758  virtual const ITarget_code* translate_link_unit(
1759  const ILink_unit* lu, IMdl_execution_context* context) = 0;
1760 
1761 };
1762 
1767  mi::base::Interface_declare<0xe7559a88,0x9a9a,0x41d8,0xa1,0x9c,0x4a,0x52,0x4e,0x4b,0x7b,0x66>
1768 {
1769 public:
1786 #ifndef MDL_SOURCE_RELEASE
1787 #endif // MDL_SOURCE_RELEASE
1790  virtual Uint32 get_resource_index(IValue_resource const *resource) = 0;
1795 
1801  virtual Uint32 get_string_index(IValue_string const *s) = 0;
1802 };
1803 
1811  mi::base::Interface_declare<0xf2a5db20,0x85ab,0x4c41,0x8c,0x5f,0x49,0xc8,0x29,0x4a,0x73,0x65>
1812 {
1813 public:
1815  virtual const char* get_data() const = 0;
1816 
1818  virtual char* get_data() = 0;
1819 
1821  virtual Size get_size() const = 0;
1822 
1824  virtual ITarget_argument_block *clone() const = 0;
1825 };
1826 
1829  Target_value_layout_state(mi::Uint32 state_offs = 0, mi::Uint32 data_offs = 0)
1830  : m_state_offs(state_offs)
1831  , m_data_offs(data_offs)
1832  {}
1833 
1836 
1839 };
1840 
1850 class ITarget_value_layout : public
1851  mi::base::Interface_declare<0x1003351f,0x0c31,0x4a9d,0xb9,0x99,0x90,0xb5,0xe4,0xb4,0x71,0xe3>
1852 {
1853 public:
1855  virtual Size get_size() const = 0;
1856 
1861  virtual Size get_num_elements(
1863 
1874  virtual Size get_layout(
1875  IValue::Kind &kind,
1876  Size &arg_size,
1878 
1889  Size i,
1891 
1908  virtual Sint32 set_value(
1909  char *block,
1910  IValue const *value,
1911  ITarget_resource_callback *resource_callback,
1913 };
1914 
1916 class ITarget_code : public
1917  mi::base::Interface_declare<0xefca46ae,0xd530,0x4b97,0x9d,0xab,0x3a,0xdb,0x0c,0x58,0xc3,0xac>
1918 {
1919 public:
1922  SU_POSITION = 0x0001u,
1923  SU_NORMAL = 0x0002u,
1925  SU_MOTION = 0x0008u,
1928  SU_TANGENT_SPACE = 0x0040u,
1930  SU_DIRECTION = 0x0100u,
1931  SU_ANIMATION_TIME = 0x0200u,
1933 
1935 
1936  SU_TRANSFORMS = 0x0800u,
1937  SU_OBJECT_ID = 0x1000u,
1938 
1940 
1941  SU_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
1942  }; // can be or'ed
1943 
1946  Texture_shape_invalid = 0,
1947  Texture_shape_2d = 1,
1948  Texture_shape_3d = 2,
1949  Texture_shape_cube = 3,
1950  Texture_shape_ptex = 4,
1951  Texture_shape_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
1952  };
1953 
1956  SL_CUDA,
1957  SL_PTX,
1958  SL_GLSL // \if MDL_SOURCE_RELEASE Reserved\else GLSL\endif.
1959  };
1960 
1963  {
1964  DK_NONE,
1965  DK_BSDF,
1966  DK_EDF,
1967  DK_INVALID
1968  };
1969 
1972  FK_INVALID,
1973  FK_LAMBDA,
1974  FK_SWITCH_LAMBDA,
1975  FK_ENVIRONMENT,
1976  FK_DF_INIT,
1977  FK_DF_SAMPLE,
1978  FK_DF_EVALUATE,
1979  FK_DF_PDF
1980  };
1981 
1982  typedef Uint32 State_usage;
1983 
1985  virtual const char* get_code() const = 0;
1986 
1988  virtual Size get_code_size() const = 0;
1989 
1991  virtual Size get_callable_function_count() const = 0;
1992 
2002  virtual const char* get_callable_function( Size index) const = 0;
2003 
2005  virtual Size get_texture_count() const = 0;
2006 
2012  virtual const char* get_texture( Size index) const = 0;
2013 
2019  virtual Texture_shape get_texture_shape( Size index) const = 0;
2020 
2022  virtual Size get_ro_data_segment_count() const = 0;
2023 
2029  virtual const char* get_ro_data_segment_name( Size index) const = 0;
2030 
2035  virtual Size get_ro_data_segment_size( Size index) const = 0;
2036 
2042  virtual const char* get_ro_data_segment_data( Size index) const = 0;
2043 
2045  virtual Size get_code_segment_count() const = 0;
2046 
2051  virtual const char* get_code_segment( Size index) const = 0;
2052 
2057  virtual Size get_code_segment_size( Size index) const = 0;
2058 
2063  virtual const char* get_code_segment_description( Size index) const = 0;
2064 
2069  virtual State_usage get_render_state_usage() const = 0;
2070 
2072  virtual Size get_argument_block_count() const = 0;
2073 
2080  virtual const ITarget_argument_block *get_argument_block(Size index) const = 0;
2081 
2093  Size index,
2094  const ICompiled_material *material,
2095  ITarget_resource_callback *resource_callback) const = 0;
2096 
2102  virtual const ITarget_value_layout *get_argument_block_layout(Size index) const = 0;
2103 
2105  virtual Size get_light_profile_count() const = 0;
2106 
2112  virtual const char* get_light_profile(Size index) const = 0;
2113 
2115  virtual Size get_bsdf_measurement_count() const = 0;
2116 
2122  virtual const char* get_bsdf_measurement(Size index) const = 0;
2123 
2125  virtual Size get_string_constant_count() const = 0;
2126 
2132  virtual const char* get_string_constant(Size index) const = 0;
2133 
2140  ITransaction* transaction,
2141  IValue_resource const *resource) const = 0;
2142 
2150  virtual const char* get_callable_function_prototype( Size index, Prototype_language lang)
2151  const = 0;
2152 
2160 
2166  virtual Function_kind get_callable_function_kind( Size index) const = 0;
2167 
2174  virtual Size get_callable_function_argument_block_index( Size index) const = 0;
2175 
2192  virtual Sint32 execute_environment(
2193  Size index,
2194  const Shading_state_environment& state,
2195  Texture_handler_base* tex_handler,
2196  Spectrum_struct* result) const = 0;
2197 
2218  virtual Sint32 execute(
2219  Size index,
2220  const Shading_state_material& state,
2221  Texture_handler_base* tex_handler,
2222  const ITarget_argument_block *cap_args,
2223  void* result) const = 0;
2224 
2245  virtual Sint32 execute_bsdf_init(
2246  Size index,
2247  Shading_state_material& state,
2248  Texture_handler_base* tex_handler,
2249  const ITarget_argument_block *cap_args) const = 0;
2250 
2268  virtual Sint32 execute_bsdf_sample(
2269  Size index,
2270  Bsdf_sample_data *data,
2271  const Shading_state_material& state,
2272  Texture_handler_base* tex_handler,
2273  const ITarget_argument_block *cap_args) const = 0;
2274 
2293  virtual Sint32 execute_bsdf_evaluate(
2294  Size index,
2295  Bsdf_evaluate_data *data,
2296  const Shading_state_material& state,
2297  Texture_handler_base* tex_handler,
2298  const ITarget_argument_block *cap_args) const = 0;
2299 
2318  virtual Sint32 execute_bsdf_pdf(
2319  Size index,
2320  Bsdf_pdf_data *data,
2321  const Shading_state_material& state,
2322  Texture_handler_base* tex_handler,
2323  const ITarget_argument_block *cap_args) const = 0;
2324 
2345  virtual Sint32 execute_edf_init(
2346  Size index,
2347  Shading_state_material& state,
2348  Texture_handler_base* tex_handler,
2349  const ITarget_argument_block *cap_args) const = 0;
2350 
2368  virtual Sint32 execute_edf_sample(
2369  Size index,
2370  Edf_sample_data *data,
2371  const Shading_state_material& state,
2372  Texture_handler_base* tex_handler,
2373  const ITarget_argument_block *cap_args) const = 0;
2374 
2393  virtual Sint32 execute_edf_evaluate(
2394  Size index,
2395  Edf_evaluate_data *data,
2396  const Shading_state_material& state,
2397  Texture_handler_base* tex_handler,
2398  const ITarget_argument_block *cap_args) const = 0;
2399 
2418  virtual Sint32 execute_edf_pdf(
2419  Size index,
2420  Edf_pdf_data *data,
2421  const Shading_state_material& state,
2422  Texture_handler_base* tex_handler,
2423  const ITarget_argument_block *cap_args) const = 0;
2424 };
2425 
2427 class ILink_unit : public
2428  mi::base::Interface_declare<0x1df9bbb0,0x5d96,0x475f,0x9a,0xf4,0x07,0xed,0x8c,0x2d,0xfd,0xdb>
2429 {
2430 public:
2446  const IFunction_call *call,
2447  const char *fname,
2448  Float32 mdl_meters_per_scene_unit,
2449  Float32 mdl_wavelength_min,
2450  Float32 mdl_wavelength_max) = 0;
2451 
2452 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
2468  const IFunction_call *call,
2469  const char *fname,
2470  Float32 mdl_meters_per_scene_unit,
2471  Float32 mdl_wavelength_min,
2472  Float32 mdl_wavelength_max)
2473  {
2475  call,
2476  fname,
2477  mdl_meters_per_scene_unit,
2478  mdl_wavelength_min,
2479  mdl_wavelength_max);
2480  }
2481 #endif
2482 
2507  virtual Sint32 add_environment(
2508  const IFunction_call *call,
2509  const char *fname,
2510  IMdl_execution_context *context = 0) = 0;
2511 
2530  const ICompiled_material* inst, const char* path, const char* fname) = 0;
2531 
2532 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
2551  const ICompiled_material* inst, const char* path, const char* fname)
2552  {
2553  return deprecated_add_material_expression(inst, path, fname);
2554  }
2555 #endif
2556 
2577  const ICompiled_material* inst,
2578  const char* path,
2579  const char* fname,
2580  IMdl_execution_context* context) = 0;
2581 
2608  const ICompiled_material* material,
2609  const char* path,
2610  const char* base_fname,
2611  bool include_geometry_normal) = 0;
2612 
2613 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
2640  const ICompiled_material* material,
2641  const char* path,
2642  const char* base_fname,
2643  bool include_geometry_normal)
2644  {
2646  material,
2647  path,
2648  base_fname,
2649  include_geometry_normal);
2650  }
2651 #endif
2652 
2679  virtual Sint32 add_material_df(
2680  const ICompiled_material* material,
2681  const char* path,
2682  const char* base_fname,
2683  IMdl_execution_context* context) = 0;
2684 
2707  const ICompiled_material* material,
2708  Target_function_description* function_descriptions,
2709  Size description_count,
2710  bool include_geometry_normal) = 0;
2711 
2712 #ifdef MI_NEURAYLIB_DEPRECATED_9_1
2735  const ICompiled_material* material,
2736  Target_function_description* function_descriptions,
2737  Size description_count,
2738  bool include_geometry_normal)
2739  {
2740  return deprecated_add_material(
2741  material,
2742  function_descriptions,
2743  description_count,
2744  include_geometry_normal);
2745  }
2746 #endif
2747 
2775  virtual Sint32 add_material(
2776  const ICompiled_material* material,
2777  Target_function_description* function_descriptions,
2778  Size description_count,
2779  IMdl_execution_context* context) = 0;
2780 };
2781 
2782 struct Target_function_description
2783 {
2784  Target_function_description(
2785  const char* expression_path = NULL,
2786  const char* base_function_name = NULL)
2787  : path(expression_path)
2788  , base_fname(base_function_name)
2789  , argument_block_index(~0)
2790  , function_index(~0)
2791  , distribution_kind(ITarget_code::DK_INVALID)
2792  , return_code(~0) // not processed
2793  {
2794  }
2795 
2798  const char* path;
2799 
2804  const char* base_fname;
2805 
2810  Size argument_block_index;
2811 
2820  Size function_index;
2821 
2824  ITarget_code::Distribution_kind distribution_kind;
2825 
2854  Sint32 return_code;
2855 };
2856 
2857 
2859  // end group mi_neuray_mdl_compiler
2861 
2862 } // namespace neuraylib
2863 
2864 } // namespace mi
2865 
2866 #endif // MI_NEURAYLIB_IMDL_COMPILER_H