MDL SDK API nvidia_logo_transpbg.gif Up
imdl_backend.h
Go to the documentation of this file.
1/***************************************************************************************************
2 * Copyright 2025 NVIDIA Corporation. All rights reserved.
3 **************************************************************************************************/
6
7#ifndef MI_NEURAYLIB_IMDL_BACKEND_H
8#define MI_NEURAYLIB_IMDL_BACKEND_H
9
12#include <mi/neuraylib/ivalue.h>
16
17namespace mi {
18
19namespace neuraylib {
20
21class IBuffer;
22class ICompiled_material;
23class IFunction_definition;
24class IFunction_call;
25class ILink_unit;
26class IMdl_execution_context;
27class ITarget_code;
28class ITarget_argument_block;
29class ITransaction;
30
31struct Target_function_description;
32
38class IMdl_backend : public
39 mi::base::Interface_declare<0x9ecdd747,0x20b8,0x4a8a,0xb1,0xe2,0x62,0xb2,0x62,0x30,0xd3,0x67>
40{
41public:
80#if !defined(MDL_SOURCE_RELEASE) && defined(MDL_ENABLE_INTERPRETER)
86#endif
352 virtual Sint32 set_option( const char* name, const char* value) = 0;
353
369 const char* name,
370 const char* data,
371 Size size) = 0;
372
377 virtual const Uint8* get_device_library( Size &size) const = 0;
378
419 ITransaction* transaction,
420 const IFunction_call* call,
421 const char* fname,
422 IMdl_execution_context* context) = 0;
423
462 ITransaction* transaction,
463 const ICompiled_material* material,
464 const char* path,
465 const char* fname,
466 IMdl_execution_context* context) = 0;
467
501 ITransaction* transaction,
502 const ICompiled_material* material,
503 const char* path,
504 const char* base_fname,
505 IMdl_execution_context* context) = 0;
506
534 ITransaction* transaction,
535 const ICompiled_material* material,
536 Target_function_description* function_descriptions,
537 Size description_count,
538 IMdl_execution_context* context) = 0;
539
559 ITransaction* transaction,
560 IMdl_execution_context* context) = 0;
561
577 const ILink_unit* lu, IMdl_execution_context* context) = 0;
578
599 ITransaction* transaction,
600 const IBuffer* buffer,
601 IMdl_execution_context* context) const = 0;
602
624 ITransaction* transaction,
625 const Uint8* buffer_data,
626 Size buffer_size,
627 IMdl_execution_context* context) const = 0;
628};
629
634 mi::base::Interface_declare<0xe7559a88,0x9a9a,0x41d8,0xa1,0x9c,0x4a,0x52,0x4e,0x4b,0x7b,0x66>
635{
636public:
653#ifndef MDL_SOURCE_RELEASE
656#endif // MDL_SOURCE_RELEASE
661 virtual Uint32 get_resource_index(IValue_resource const *resource) = 0;
662
668 virtual Uint32 get_string_index(IValue_string const *s) = 0;
669};
670
678 mi::base::Interface_declare<0xf2a5db20,0x85ab,0x4c41,0x8c,0x5f,0x49,0xc8,0x29,0x4a,0x73,0x65>
679{
680public:
682 virtual const char* get_data() const = 0;
683
685 virtual char* get_data() = 0;
686
688 virtual Size get_size() const = 0;
689
691 virtual ITarget_argument_block *clone() const = 0;
692};
693
696 Target_value_layout_state(mi::Uint32 state_offs = 0, mi::Uint32 data_offs = 0)
697 : m_state_offs(state_offs)
698 , m_data_offs(data_offs)
699 {}
700
703
706};
707
718 mi::base::Interface_declare<0x1003351f,0x0c31,0x4a9d,0xb9,0x99,0x90,0xb5,0xe4,0xb4,0x71,0xe3>
719{
720public:
722 virtual Size get_size() const = 0;
723
730
742 IValue::Kind &kind,
743 Size &arg_size,
745
756 Size i,
758
776 char *block,
777 IValue const *value,
778 ITarget_resource_callback *resource_callback,
780};
781
783class ITarget_code : public
784 mi::base::Interface_declare<0xefca46ae,0xd530,0x4b97,0x9d,0xab,0x3a,0xdb,0x0c,0x58,0xc3,0xac>
785{
786public:
789 SU_POSITION = 0x0001u,
790 SU_NORMAL = 0x0002u,
792 SU_MOTION = 0x0008u,
797 SU_DIRECTION = 0x0100u,
800
802
803 SU_TRANSFORMS = 0x0800u,
804 SU_OBJECT_ID = 0x1000u,
805
807
808 SU_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
809 }; // can be or'ed
810
811 using State_usage = Uint32;
812
821 Texture_shape_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
822 };
823
826 SL_CUDA,
827 SL_PTX,
828 SL_HLSL,
829 SL_GLSL,
830 SL_NUM_LANGUAGES,
831 SL_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
832 };
833
836 {
837 DK_NONE,
838 DK_BSDF,
839 DK_HAIR_BSDF,
840 DK_EDF,
841 DK_INVALID,
842 DK_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
843 };
844
847 FK_INVALID,
848 FK_LAMBDA,
849 FK_SWITCH_LAMBDA,
850 FK_ENVIRONMENT,
851 FK_CONST,
852 FK_DF_INIT,
853 FK_DF_SAMPLE,
854 FK_DF_EVALUATE,
855 FK_DF_PDF,
856 FK_DF_AUXILIARY,
857 FK_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
858 };
859
862 GM_GAMMA_DEFAULT,
863 GM_GAMMA_LINEAR,
864 GM_GAMMA_SRGB,
865 GM_GAMMA_UNKNOWN,
866 GM_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
867 };
868
871
873 virtual const char* get_code() const = 0;
874
876 virtual Size get_code_size() const = 0;
877
880
890 virtual const char* get_callable_function( Size index) const = 0;
891
893
894
896 virtual Size get_texture_count() const = 0;
897
904 virtual const char* get_texture( Size index) const = 0;
905
913 virtual const char* get_texture_url( Size index) const = 0;
914
921 virtual const char* get_texture_owner_module( Size index) const = 0;
922
929 virtual bool get_texture_is_body_resource( Size index) const = 0;
930
936 virtual Gamma_mode get_texture_gamma( Size index) const = 0;
937
944 virtual const char* get_texture_selector( Size index) const = 0;
945
951 virtual Texture_shape get_texture_shape( Size index) const = 0;
952
959 virtual Df_data_kind get_texture_df_data_kind( Size index) const = 0;
960
974 Size index,
975 Size &rx,
976 Size &ry,
977 Size &rz,
978 const char *&pixel_type) const = 0;
979
981
983
985 virtual Size get_light_profile_count() const = 0;
986
992 virtual const char* get_light_profile( Size index) const = 0;
993
1001 virtual const char* get_light_profile_url( Size index) const = 0;
1002
1009 virtual const char* get_light_profile_owner_module( Size index) const = 0;
1010
1017 virtual bool get_light_profile_is_body_resource( Size index) const = 0;
1018
1020
1022
1025
1031 virtual const char* get_bsdf_measurement(Size index) const = 0;
1032
1040 virtual const char* get_bsdf_measurement_url( Size index) const = 0;
1041
1048 virtual const char* get_bsdf_measurement_owner_module( Size index) const = 0;
1049
1057 virtual bool get_bsdf_measurement_is_body_resource( Size index) const = 0;
1058
1060
1062 virtual Size get_ro_data_segment_count() const = 0;
1063
1069 virtual const char* get_ro_data_segment_name( Size index) const = 0;
1070
1075 virtual Size get_ro_data_segment_size( Size index) const = 0;
1076
1082 virtual const char* get_ro_data_segment_data( Size index) const = 0;
1083
1085 virtual Size get_code_segment_count() const = 0;
1086
1091 virtual const char* get_code_segment( Size index) const = 0;
1092
1097 virtual Size get_code_segment_size( Size index) const = 0;
1098
1103 virtual const char* get_code_segment_description( Size index) const = 0;
1104
1109 virtual State_usage get_render_state_usage() const = 0;
1110
1112 virtual Size get_argument_block_count() const = 0;
1113
1120 virtual const ITarget_argument_block *get_argument_block(Size index) const = 0;
1121
1133 Size index,
1134 const ICompiled_material *material,
1135 ITarget_resource_callback *resource_callback) const = 0;
1136
1138 virtual Size get_argument_layout_count() const = 0;
1139
1145 virtual const ITarget_value_layout *get_argument_block_layout(Size index) const = 0;
1146
1148 virtual Size get_string_constant_count() const = 0;
1149
1155 virtual const char* get_string_constant(Size index) const = 0;
1156
1163 ITransaction* transaction,
1164 IValue_resource const *resource) const = 0;
1165
1174 const = 0;
1175
1183
1190
1198
1216 Size index,
1217 const Shading_state_environment& state,
1218 Texture_handler_base* tex_handler,
1219 Spectrum_struct* result) const = 0;
1220
1242 Size index,
1243 const Shading_state_material& state,
1244 Texture_handler_base* tex_handler,
1245 const ITarget_argument_block *cap_args,
1246 void* result) const = 0;
1247
1269 Size index,
1271 Texture_handler_base* tex_handler,
1272 const ITarget_argument_block *cap_args) const = 0;
1273
1292 Size index,
1293 Bsdf_sample_data *data,
1294 const Shading_state_material& state,
1295 Texture_handler_base* tex_handler,
1296 const ITarget_argument_block *cap_args) const = 0;
1297
1317 Size index,
1319 const Shading_state_material& state,
1320 Texture_handler_base* tex_handler,
1321 const ITarget_argument_block *cap_args) const = 0;
1322
1342 Size index,
1343 Bsdf_pdf_data *data,
1344 const Shading_state_material& state,
1345 Texture_handler_base* tex_handler,
1346 const ITarget_argument_block *cap_args) const = 0;
1347
1348
1368 Size index,
1370 const Shading_state_material& state,
1371 Texture_handler_base* tex_handler,
1372 const ITarget_argument_block *cap_args) const = 0;
1373
1374
1396 Size index,
1398 Texture_handler_base* tex_handler,
1399 const ITarget_argument_block *cap_args) const = 0;
1400
1419 Size index,
1420 Edf_sample_data *data,
1421 const Shading_state_material& state,
1422 Texture_handler_base* tex_handler,
1423 const ITarget_argument_block *cap_args) const = 0;
1424
1444 Size index,
1446 const Shading_state_material& state,
1447 Texture_handler_base* tex_handler,
1448 const ITarget_argument_block *cap_args) const = 0;
1449
1469 Size index,
1470 Edf_pdf_data *data,
1471 const Shading_state_material& state,
1472 Texture_handler_base* tex_handler,
1473 const ITarget_argument_block *cap_args) const = 0;
1474
1475
1495 Size index,
1497 const Shading_state_material& state,
1498 Texture_handler_base* tex_handler,
1499 const ITarget_argument_block *cap_args) const = 0;
1500
1507 virtual Size get_callable_function_df_handle_count( Size func_index) const = 0;
1508
1516 virtual const char* get_callable_function_df_handle( Size func_index, Size handle_index)
1517 const = 0;
1518
1521 virtual bool supports_serialization() const = 0;
1522
1540 virtual const IBuffer* serialize( IMdl_execution_context* context) const = 0;
1541
1549 virtual State_usage get_callable_function_render_state_usage( Size index) const = 0;
1550
1573 Size index,
1575 Texture_handler_base* tex_handler,
1576 const ITarget_argument_block *cap_args) const = 0;
1577
1578 virtual Size MI_NEURAYLIB_DEPRECATED_METHOD_14_0(get_body_texture_count)() const = 0;
1579
1580 virtual Size MI_NEURAYLIB_DEPRECATED_METHOD_14_0(get_body_light_profile_count)() const = 0;
1581
1582 virtual Size MI_NEURAYLIB_DEPRECATED_METHOD_14_0(get_body_bsdf_measurement_count)() const = 0;
1583};
1584
1586class ILink_unit : public
1587 mi::base::Interface_declare<0x1df9bbb0,0x5d96,0x475f,0x9a,0xf4,0x07,0xed,0x8c,0x2d,0xfd,0xdb>
1588{
1589public:
1616 const ICompiled_material* inst,
1617 const char* path,
1618 const char* fname,
1619 IMdl_execution_context* context) = 0;
1620
1657 const ICompiled_material* material,
1658 const char* path,
1659 const char* base_fname,
1660 IMdl_execution_context* context) = 0;
1661
1697 const ICompiled_material* material,
1698 Target_function_description* function_descriptions,
1699 Size description_count,
1700 IMdl_execution_context* context) = 0;
1701
1707 FEC_FORCE_32_BIT = 0xFFFFFFFFu // Undocumented, for alignment only
1708 };
1709
1730 const IFunction_call *call,
1732 const char *fname,
1733 IMdl_execution_context *context = nullptr) = 0;
1734
1755 const IFunction_definition *function,
1757 const char *fname,
1758 IMdl_execution_context *context) = 0;
1759
1760 virtual Sint32 MI_NEURAYLIB_DEPRECATED_METHOD_14_0(add_environment)(
1761 const IFunction_call *call,
1762 const char *fname,
1763 IMdl_execution_context *context = nullptr) = 0;
1764};
1765
1768{
1770 const char* expression_path = nullptr,
1771 const char* base_function_name = nullptr)
1772 : path(expression_path)
1773 , base_fname(base_function_name)
1775 , function_index(~Size(0))
1776 ,
1777 return_code(~Sint32(0)) // not processed
1778 {
1779 }
1780
1783 const char* path;
1784
1789 const char* base_fname;
1790
1796
1806
1810
1843};
1844
1852
1853} // namespace neuraylib
1854
1855} // namespace mi
1856
1857#endif // MI_NEURAYLIB_IMDL_BACKEND_H
Mixin class template for deriving new interface declarations.
Definition: interface_declare.h:43
Abstract interface for a simple buffer with binary data.
Definition: ibuffer.h:25
This interface represents a compiled material.
Definition: icompiled_material.h:97
This interface represents a function call.
Definition: ifunction_call.h:52
This interface represents a function definition.
Definition: ifunction_definition.h:44
Mdl_backend_kind
Currently available MDL backends.
Definition: imdl_backend_api.h:62
MDL backends allow to transform compiled material instances or function calls into target code.
Definition: imdl_backend.h:40
The execution context can be used to query status information like error and warning messages concern...
Definition: imdl_execution_context.h:131
Represents an argument block of a class-compiled material compiled for a specific target.
Definition: imdl_backend.h:679
Represents target code of an MDL backend.
Definition: imdl_backend.h:785
A callback interface to allow the user to handle resources when creating new mi::neuraylib::ITarget_a...
Definition: imdl_backend.h:635
Represents the layout of an mi::neuraylib::ITarget_argument_block with support for nested elements.
Definition: imdl_backend.h:719
A transaction provides a consistent view on the database.
Definition: itransaction.h:82
Base class for resource values.
Definition: ivalue.h:490
A value of type string.
Definition: ivalue.h:221
The interface to MDL values.
Definition: ivalue.h:33
Kind
The possible kinds of values.
Definition: ivalue.h:36
#define mi_static_assert(expr)
Compile time assertion that raises a compilation error if the constant expression expr evaluates to f...
Definition: assert.h:58
unsigned char Uint8
8-bit unsigned integer.
Definition: types.h:47
int Sint32
32-bit signed integer.
Definition: types.h:46
float Float32
32-bit float.
Definition: types.h:51
Uint64 Size
Unsigned integral type that is large enough to hold the size of all types.
Definition: types.h:112
unsigned int Uint32
32-bit unsigned integer.
Definition: types.h:49
virtual Size get_size() const =0
Returns the size of the target argument block data.
virtual const char * get_texture_owner_module(Size index) const =0
Returns the owner module name of a relative texture file path.
Function_execution_context
Execution context for functions.
Definition: imdl_backend.h:1703
virtual Sint32 execute(Size index, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args, void *result) const =0
Run this code on the native CPU with the given captured arguments block.
ITarget_code::Distribution_kind distribution_kind
Return the distribution kind of this function (or NONE in case expressions).
Definition: imdl_backend.h:1809
virtual Sint32 execute_bsdf_pdf(Size index, Bsdf_pdf_data *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the BSDF PDF calculation function for this code on the native CPU.
virtual const char * get_code() const =0
Returns the represented target code in ASCII representation.
virtual const ITarget_code * translate_link_unit(const ILink_unit *lu, IMdl_execution_context *context)=0
Transforms a link unit to target code.
virtual Sint32 set_option(const char *name, const char *value)=0
Sets a backend option.
virtual const char * get_texture(Size index) const =0
Returns the name of a texture resource used by the target code.
const char * path
The path from the material root to the expression that should be translated, e.g.,...
Definition: imdl_backend.h:1783
State_usage_property
The potential state usage properties.
Definition: imdl_backend.h:788
virtual Size get_bsdf_measurement_count() const =0
Returns the number of bsdf measurement resources used by the target code.
virtual Size get_num_elements(Target_value_layout_state state=Target_value_layout_state()) const =0
Get the number of arguments / elements at the given layout state.
virtual Texture_shape get_texture_shape(Size index) const =0
Returns the texture shape of a given texture resource used by the target code.
virtual Sint32 set_value(char *block, IValue const *value, ITarget_resource_callback *resource_callback, Target_value_layout_state state=Target_value_layout_state()) const =0
Set the value inside the given block at the given layout state.
virtual Size get_ro_data_segment_count() const =0
Returns the number of constant data initializers.
virtual bool get_light_profile_is_body_resource(Size index) const =0
Check whether the light profile resource is coming from the body of expressions (not solely from mate...
virtual const Uint8 * get_device_library(Size &size) const =0
Returns the representation of a device library for this backend if one exists.
virtual Size get_argument_layout_count() const =0
Returns the number of target argument block layouts.
Distribution_kind
Possible kinds of distribution functions.
Definition: imdl_backend.h:836
virtual Sint32 add_material(const ICompiled_material *material, Target_function_description *function_descriptions, Size description_count, IMdl_execution_context *context)=0
Add (multiple) MDL distribution functions and expressions of a material to this link unit.
virtual Target_value_layout_state get_nested_state(Size i, Target_value_layout_state state=Target_value_layout_state()) const =0
Get the layout state for the i'th argument / element inside the argument value block at the given lay...
virtual const char * get_texture_selector(Size index) const =0
Returns the selector mode of a texture resource used by the target code.
virtual Sint32 execute_edf_auxiliary(Size index, Edf_auxiliary_data_base *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the EDF auxiliary calculation function for this code on the native CPU.
virtual const char * get_callable_function_prototype(Size index, Prototype_language lang) const =0
Returns the prototype of a callable function in the target code.
virtual Size get_ro_data_segment_size(Size index) const =0
Returns the size of the constant data segment at the given index.
virtual const Float32 * get_texture_df_data(Size index, Size &rx, Size &ry, Size &rz, const char *&pixel_type) const =0
Returns the distribution function data this texture refers to.
virtual Function_kind get_callable_function_kind(Size index) const =0
Returns the function kind of a callable function in the target code.
virtual Sint32 add_function(const IFunction_definition *function, Function_execution_context fexc, const char *fname, IMdl_execution_context *context)=0
Add an MDL function definition as a function to this link unit.
virtual Size get_callable_function_argument_block_index(Size index) const =0
Get the index of the target argument block to use with a callable function.
virtual Df_data_kind get_texture_df_data_kind(Size index) const =0
Returns the distribution function data kind of a given texture resource used by the target code.
virtual Sint32 execute_edf_init(Size index, Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the EDF init function for this code on the native CPU.
virtual IMdl_backend_api::Mdl_backend_kind get_backend_kind() const =0
Returns the kind of backend this information belongs to.
mi::Uint32 m_state_offs
The offset inside the layout state structure.
Definition: imdl_backend.h:702
virtual const char * get_ro_data_segment_data(Size index) const =0
Returns the data of the constant data segment at the given index.
virtual Uint32 get_string_index(IValue_string const *s)=0
Returns a string identifier for the given string value usable by the target code.
virtual Gamma_mode get_texture_gamma(Size index) const =0
Returns the gamma mode of a texture resource used by the target code.
virtual Sint32 execute_bsdf_init(Size index, Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the BSDF init function for this code on the native CPU.
virtual Sint32 add_material_expression(const ICompiled_material *inst, const char *path, const char *fname, IMdl_execution_context *context)=0
Add an expression that is part of an MDL material instance as a function to this link unit.
virtual const ITarget_code * deserialize_target_code(ITransaction *transaction, const Uint8 *buffer_data, Size buffer_size, IMdl_execution_context *context) const =0
Restores an instance of ITarget_code from a buffer.
virtual Size get_callable_function_count() const =0
Returns the number of callable functions in the target code.
virtual bool get_texture_is_body_resource(Size index) const =0
Check whether the texture resource is coming from the body of expressions (not solely from material a...
virtual Sint32 execute_environment(Size index, const Shading_state_environment &state, Texture_handler_base *tex_handler, Spectrum_struct *result) const =0
Run this code on the native CPU.
virtual Size get_texture_count() const =0
Returns the number of texture resources used by the target code.
virtual Size get_layout(IValue::Kind &kind, Size &arg_size, Target_value_layout_state state=Target_value_layout_state()) const =0
Get the offset, the size and the kind of the argument / element inside the argument block at the give...
virtual const char * get_data() const =0
Returns the target argument block data.
virtual const char * get_light_profile_url(Size index) const =0
Returns the MDL file path of a light profile resource used by the target code if no database element ...
virtual ILink_unit * create_link_unit(ITransaction *transaction, IMdl_execution_context *context)=0
Creates a new link unit.
virtual bool supports_serialization() const =0
Indicates whether the target code can be serialized.
virtual const char * get_texture_url(Size index) const =0
Returns the MDL file path of a texture resource used by the target code if no database element is ass...
virtual Size get_argument_block_count() const =0
Returns the number of target argument blocks.
virtual Size get_code_segment_count() const =0
Returns the number of code segments of the target code.
virtual Sint32 execute_init(Size index, Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the init function for this code on the native CPU (single-init mode).
virtual const ITarget_code * translate_environment(ITransaction *transaction, const IFunction_call *call, const char *fname, IMdl_execution_context *context)=0
Transforms an MDL environment function call into target code.
virtual const ITarget_code * translate_material_expression(ITransaction *transaction, const ICompiled_material *material, const char *path, const char *fname, IMdl_execution_context *context)=0
Transforms an expression that is part of an MDL material instance to target code.
virtual const ITarget_code * translate_material_df(ITransaction *transaction, const ICompiled_material *material, const char *path, const char *base_fname, IMdl_execution_context *context)=0
Transforms an MDL distribution function to target code.
virtual Sint32 execute_edf_pdf(Size index, Edf_pdf_data *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the EDF PDF calculation function for this code on the native CPU.
virtual const char * get_bsdf_measurement_owner_module(Size index) const =0
Returns the owner module name of a relative BSDF measurement file path.
virtual const char * get_callable_function_df_handle(Size func_index, Size handle_index) const =0
Get the name of a distribution function handle referenced by a callable function.
Size function_index
The index of the generated function for accessing the callable function information of the link unit ...
Definition: imdl_backend.h:1805
virtual const char * get_callable_function(Size index) const =0
Returns the name of a callable function in the target code.
virtual Size get_string_constant_count() const =0
Returns the number of string constants used by the target code.
virtual Sint32 execute_edf_evaluate(Size index, Edf_evaluate_data_base *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the EDF evaluation function for this code on the native CPU.
virtual Distribution_kind get_callable_function_distribution_kind(Size index) const =0
Returns the distribution kind of a callable function in the target code.
virtual ITarget_argument_block * clone() const =0
Clones the argument block (to make it writable).
virtual ITarget_argument_block * create_argument_block(Size index, const ICompiled_material *material, ITarget_resource_callback *resource_callback) const =0
Create a new target argument block of the class-compiled material for this target code.
virtual Sint32 execute_bsdf_sample(Size index, Bsdf_sample_data *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the BSDF sample function for this code on the native CPU.
Texture_shape
Definition: imdl_backend.h:813
Gamma_mode
Possible texture gamma modes.
Definition: imdl_backend.h:861
virtual const char * get_string_constant(Size index) const =0
Returns the string constant used by the target code.
virtual const ITarget_code * translate_material(ITransaction *transaction, const ICompiled_material *material, Target_function_description *function_descriptions, Size description_count, IMdl_execution_context *context)=0
Transforms (multiple) distribution functions and expressions of a material to target code.
virtual const ITarget_argument_block * get_argument_block(Size index) const =0
Get a target argument block if available.
virtual const char * get_light_profile_owner_module(Size index) const =0
Returns the owner module name of a relative light profile file path.
Prototype_language
Language to use for the callable function prototype.
Definition: imdl_backend.h:825
virtual Uint32 get_known_resource_index(ITransaction *transaction, IValue_resource const *resource) const =0
Returns the resource index for use in an ITarget_argument_block of resources already known when this ...
Function_kind
Possible kinds of callable functions.
Definition: imdl_backend.h:846
virtual const char * get_code_segment_description(Size index) const =0
Returns the description of the target code segment.
virtual Sint32 add_material_df(const ICompiled_material *material, const char *path, const char *base_fname, IMdl_execution_context *context)=0
Add an MDL distribution function to this link unit.
const char * base_fname
The base name of the generated functions.
Definition: imdl_backend.h:1789
virtual const char * get_code_segment(Size index) const =0
Returns the represented target code segment in ASCII representation.
virtual const IBuffer * serialize(IMdl_execution_context *context) const =0
Stores the data of this object in a buffer that can written to an external cache.
virtual State_usage get_render_state_usage() const =0
Returns the potential render state usage of the target code.
virtual State_usage get_callable_function_render_state_usage(Size index) const =0
Returns the potential render state usage of callable function in the target code.
virtual const ITarget_value_layout * get_argument_block_layout(Size index) const =0
Get a captured arguments block layout if available.
virtual Sint32 execute_edf_sample(Size index, Edf_sample_data *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the EDF sample function for this code on the native CPU.
Sint32 return_code
A return code.
Definition: imdl_backend.h:1842
virtual Sint32 set_option_binary(const char *name, const char *data, Size size)=0
Sets a binary backend option.
virtual const char * get_ro_data_segment_name(Size index) const =0
Returns the name of the constant data segment at the given index.
virtual Size get_code_segment_size(Size index) const =0
Returns the length of the represented target code segment.
virtual char * get_data()=0
Returns the target argument block data.
virtual Size get_code_size() const =0
Returns the length of the represented target code.
virtual Size get_size() const =0
Returns the size of the target argument block.
virtual Sint32 execute_bsdf_auxiliary(Size index, Bsdf_auxiliary_data_base *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the BSDF auxiliary calculation function for this code on the native CPU.
virtual const char * get_light_profile(Size index) const =0
Returns the name of a light profile resource used by the target code.
Size argument_block_index
The index of argument block that belongs to the compiled material the function is generated from or ~...
Definition: imdl_backend.h:1795
virtual const char * get_bsdf_measurement(Size index) const =0
Returns the name of a bsdf measurement resource used by the target code.
virtual const ITarget_code * deserialize_target_code(ITransaction *transaction, const IBuffer *buffer, IMdl_execution_context *context) const =0
Restores an instance of ITarget_code from a buffer.
virtual Sint32 execute_bsdf_evaluate(Size index, Bsdf_evaluate_data_base *data, const Shading_state_material &state, Texture_handler_base *tex_handler, const ITarget_argument_block *cap_args) const =0
Run the BSDF evaluation function for this code on the native CPU.
virtual Size get_light_profile_count() const =0
Returns the number of light profile resources used by the target code.
virtual Size get_callable_function_df_handle_count(Size func_index) const =0
Get the number of distribution function handles referenced by a callable function.
mi::Uint32 m_data_offs
The offset which needs to be added to the element data offset.
Definition: imdl_backend.h:705
virtual Sint32 add_function(const IFunction_call *call, Function_execution_context fexc, const char *fname, IMdl_execution_context *context=nullptr)=0
Add an MDL function call as a function to this link unit.
virtual const char * get_bsdf_measurement_url(Size index) const =0
Returns the MDL file path of a BSDF measurement resource used by the target code if no database eleme...
virtual bool get_bsdf_measurement_is_body_resource(Size index) const =0
Check whether the BSDF measurement resource is coming from the body of expressions (not solely from m...
@ FEC_ENVIRONMENT
This function will be executed inside the environment.
Definition: imdl_backend.h:1704
@ FEC_CORE
This function will be executed in the renderer core.
Definition: imdl_backend.h:1705
@ FEC_DISPLACEMENT
This function will be executed inside displacement.
Definition: imdl_backend.h:1706
@ SU_TANGENT_SPACE
uses state::tangent_space()
Definition: imdl_backend.h:795
@ SU_GEOMETRY_NORMAL
uses state::geometry_normal()
Definition: imdl_backend.h:791
@ SU_DIRECTION
uses state::direction()
Definition: imdl_backend.h:797
@ SU_ANIMATION_TIME
uses state::animation_time()
Definition: imdl_backend.h:798
@ SU_TEXTURE_TANGENTS
uses state::texture_tangent_*()
Definition: imdl_backend.h:794
@ SU_TEXTURE_COORDINATE
uses state::texture_coordinate()
Definition: imdl_backend.h:793
@ SU_ALL_UNIFORM_MASK
set of uniform states
Definition: imdl_backend.h:806
@ SU_TRANSFORMS
uses uniform state::transform*()
Definition: imdl_backend.h:803
@ SU_NORMAL
uses state::normal()
Definition: imdl_backend.h:790
@ SU_MOTION
uses state::motion()
Definition: imdl_backend.h:792
@ SU_POSITION
uses state::position()
Definition: imdl_backend.h:789
@ SU_ALL_VARYING_MASK
set of varying states
Definition: imdl_backend.h:801
@ SU_ROUNDED_CORNER_NORMAL
uses state::rounded_corner_normal()
Definition: imdl_backend.h:799
@ SU_GEOMETRY_TANGENTS
uses state::geometry_tangent_*()
Definition: imdl_backend.h:796
@ SU_OBJECT_ID
uses uniform state::object_id()
Definition: imdl_backend.h:804
@ Texture_shape_invalid
Invalid texture.
Definition: imdl_backend.h:814
@ Texture_shape_ptex
PTEX texture.
Definition: imdl_backend.h:818
@ Texture_shape_bsdf_data
Three-dimensional texture representing a BSDF data table.
Definition: imdl_backend.h:819
@ Texture_shape_cube
Cube map texture.
Definition: imdl_backend.h:817
@ Texture_shape_3d
Three-dimensional texture.
Definition: imdl_backend.h:816
@ Texture_shape_2d
Two-dimensional texture.
Definition: imdl_backend.h:815
Df_data_kind
Possible kinds of distribution function data.
Definition: imdl_backend_api.h:37
API component for MDL backend related operations.
Mixin class template for deriving new interface declarations.
Values of the MDL type system.
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH.
Definition: example_derivatives.dox:5
Major and minor version number and an optional qualifier.
Generic storage class template for a Spectrum representation storing three floating point elements.
Definition: color.h:47
Input and output structure for BSDF auxiliary calculation data.
Definition: target_code_types.h:874
Input and output structure for BSDF evaluation data.
Definition: target_code_types.h:801
Input and output structure for BSDF PDF calculation data.
Definition: target_code_types.h:861
Input and output structure for BSDF sampling data.
Definition: target_code_types.h:773
Input and output structure for EDF auxiliary calculation data.
Definition: target_code_types.h:1236
Input and output structure for EDF evaluation data.
Definition: target_code_types.h:1192
Input and output structure for EDF PDF calculation data.
Definition: target_code_types.h:1230
Input and output structure for EDF sampling data.
Definition: target_code_types.h:1182
The MDL environment state structure inside the MDL SDK is a representation of the renderer state in t...
Definition: target_code_types.h:151
The MDL material state structure inside the MDL SDK is a representation of the renderer state as defi...
Definition: target_code_types.h:202
Description of target function.
Definition: imdl_backend.h:1768
Structure representing the state during traversal of the nested layout.
Definition: imdl_backend.h:695
The texture handler structure that is passed to the texturing functions.
Definition: target_code_types.h:707
Types required for execution of generated native and CUDA code.
Typedefs for types from the math API.