From d4840e764a6e631b48c57a84127dd7d6015b8db2 Mon Sep 17 00:00:00 2001 From: Jefferson Amstutz Date: Fri, 18 Oct 2024 10:39:49 -0500 Subject: [PATCH 1/4] add KHR_INSTANCE_TRANSFORM_ARRAY json definitions --- .../api/khr_instance_transform_array.json | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 code_gen/api/khr_instance_transform_array.json diff --git a/code_gen/api/khr_instance_transform_array.json b/code_gen/api/khr_instance_transform_array.json new file mode 100644 index 00000000..37c11921 --- /dev/null +++ b/code_gen/api/khr_instance_transform_array.json @@ -0,0 +1,30 @@ +{ + "info" : { + "name" : "KHR_INSTANCE_TRANSFORM_ARRAY", + "type" : "extension", + "dependencies" : ["khr_instance_transform"] + }, + + "objects" : [ + { + "type" : "ANARI_INSTANCE", + "name" : "transform", + "description" : "instance object", + "parameters" : [ + { + "name" : "transform", + "types" : ["ANARI_ARRAY1D"], + "elementType" : ["ANARI_FLOAT32_MAT4"], + "tags" : [], + "description" : "array of transforms applied to objects in the instance" + }, { + "name" : "id", + "types" : ["ANARI_ARRAY1D"], + "elementType" : ["ANARI_UINT32"], + "tags" : [], + "description" : "per-transform user id for instanceId channel" + } + ] + } + ] +} \ No newline at end of file From bdc47c0df27ed4b9879d0487cda6f36e49937cc0 Mon Sep 17 00:00:00 2001 From: Jefferson Amstutz Date: Fri, 18 Oct 2024 14:25:56 -0500 Subject: [PATCH 2/4] upgrade to embree v4.3.3, tasking grain size can be controlled via params --- src/helide/HelideDefinitions.json | 34 ++-- src/helide/HelideDeviceQueries.cpp | 204 +++++++++++++++------- src/helide/HelideGlobalState.h | 2 +- src/helide/HelideMath.h | 16 +- src/helide/external/embree/CMakeLists.txt | 34 ++-- src/helide/frame/Frame.cpp | 29 ++- src/helide/renderer/Renderer.cpp | 8 +- src/helide/renderer/Renderer.h | 10 ++ 8 files changed, 229 insertions(+), 108 deletions(-) diff --git a/src/helide/HelideDefinitions.json b/src/helide/HelideDefinitions.json index 56bc23ed..4549b964 100644 --- a/src/helide/HelideDefinitions.json +++ b/src/helide/HelideDefinitions.json @@ -39,18 +39,14 @@ "parameters": [ { "name": "allowInvalidMaterials", - "types": [ - "ANARI_BOOL" - ], + "types": ["ANARI_BOOL"], "tags": [], "default": true, "description": "show surfaces with invalid materials" }, { "name": "invalidMaterialColor", - "types": [ - "ANARI_FLOAT32_VEC4" - ], + "types": ["ANARI_FLOAT32_VEC4"], "tags": [], "default": [ 1.0, @@ -68,9 +64,7 @@ "parameters": [ { "name": "mode", - "types": [ - "ANARI_STRING" - ], + "types": ["ANARI_STRING"], "tags": [], "default": "default", "values": [ @@ -95,14 +89,30 @@ }, { "name": "eyeLightBlendRatio", - "types": [ - "ANARI_FLOAT32" - ], + "types": ["ANARI_FLOAT32"], "tags": [], "default": 0.5, "minimum": 0.0, "maximum": 1.0, "description": "how much eye lighting factor should be used in default render mode" + }, + { + "name": "taskGrainSizeWidth", + "types": ["ANARI_INT32"], + "tags": [], + "default": 4, + "minimum": 1, + "maximum": 128, + "description": "grain size of the render task along the width of the frame" + }, + { + "name": "taskGrainSizeHeight", + "types": ["ANARI_INT32"], + "tags": [], + "default": 4, + "minimum": 1, + "maximum": 128, + "description": "grain size of the render task along the height of the frame" } ] } diff --git a/src/helide/HelideDeviceQueries.cpp b/src/helide/HelideDeviceQueries.cpp index d5017dd0..2b15e62f 100644 --- a/src/helide/HelideDeviceQueries.cpp +++ b/src/helide/HelideDeviceQueries.cpp @@ -31,7 +31,7 @@ static int subtype_hash(const char *str) { return -1; } static int param_hash(const char *str) { - static const uint32_t table[] = {0x756c0017u,0x62610089u,0x70610093u,0x6a6100ebu,0x7a7900ffu,0x73610111u,0x736501a0u,0x666501b9u,0x6f6401bfu,0x0u,0x0u,0x6a69028du,0x70610292u,0x666102abu,0x767002b6u,0x736f02ddu,0x0u,0x6661032du,0x7669033eu,0x737203c4u,0x716e03cdu,0x706103dcu,0x736f04a4u,0x716c0020u,0x6362004fu,0x0u,0x0u,0x0u,0x0u,0x73720071u,0x71700075u,0x7574007au,0x706f0025u,0x0u,0x0u,0x0u,0x69680038u,0x78770026u,0x4a490027u,0x6f6e0028u,0x77760029u,0x6261002au,0x6d6c002bu,0x6a69002cu,0x6564002du,0x4e4d002eu,0x6261002fu,0x75740030u,0x66650031u,0x73720032u,0x6a690033u,0x62610034u,0x6d6c0035u,0x74730036u,0x1000037u,0x80000000u,0x62610039u,0x4e43003au,0x76750045u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f004bu,0x75740046u,0x706f0047u,0x67660048u,0x67660049u,0x100004au,0x80000001u,0x6564004cu,0x6665004du,0x100004eu,0x80000002u,0x6a690050u,0x66650051u,0x6f6e0052u,0x75740053u,0x53430054u,0x706f0064u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610069u,0x6d6c0065u,0x706f0066u,0x73720067u,0x1000068u,0x80000003u,0x6564006au,0x6a69006bu,0x6261006cu,0x6f6e006du,0x6463006eu,0x6665006fu,0x1000070u,0x80000004u,0x62610072u,0x7a790073u,0x1000074u,0x80000005u,0x66650076u,0x64630077u,0x75740078u,0x1000079u,0x80000006u,0x7372007bu,0x6a69007cu,0x6362007du,0x7675007eu,0x7574007fu,0x66650080u,0x34300081u,0x1000085u,0x1000086u,0x1000087u,0x1000088u,0x80000007u,0x80000008u,0x80000009u,0x8000000au,0x6463008au,0x6c6b008bu,0x6867008cu,0x7372008du,0x706f008eu,0x7675008fu,0x6f6e0090u,0x65640091u,0x1000092u,0x8000000bu,0x716d00a2u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x626100acu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c00e7u,0x666500a6u,0x0u,0x0u,0x747300aau,0x737200a7u,0x626100a8u,0x10000a9u,0x8000000cu,0x10000abu,0x8000000du,0x6f6e00adu,0x6f6e00aeu,0x666500afu,0x6d6c00b0u,0x2f2e00b1u,0x716300b2u,0x706f00c0u,0x666500c5u,0x0u,0x0u,0x0u,0x0u,0x6f6e00cau,0x0u,0x0u,0x0u,0x0u,0x0u,0x636200d4u,0x737200dcu,0x6d6c00c1u,0x706f00c2u,0x737200c3u,0x10000c4u,0x8000000eu,0x717000c6u,0x757400c7u,0x696800c8u,0x10000c9u,0x8000000fu,0x747300cbu,0x757400ccu,0x626100cdu,0x6f6e00ceu,0x646300cfu,0x666500d0u,0x4a4900d1u,0x656400d2u,0x10000d3u,0x80000010u,0x6b6a00d5u,0x666500d6u,0x646300d7u,0x757400d8u,0x4a4900d9u,0x656400dau,0x10000dbu,0x80000011u,0x6a6900ddu,0x6e6d00deu,0x6a6900dfu,0x757400e0u,0x6a6900e1u,0x777600e2u,0x666500e3u,0x4a4900e4u,0x656400e5u,0x10000e6u,0x80000012u,0x706f00e8u,0x737200e9u,0x10000eau,0x80000013u,0x757400f4u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x737200f7u,0x626100f5u,0x10000f6u,0x80000014u,0x666500f8u,0x646300f9u,0x757400fau,0x6a6900fbu,0x706f00fcu,0x6f6e00fdu,0x10000feu,0x80000015u,0x66650100u,0x4d4c0101u,0x6a690102u,0x68670103u,0x69680104u,0x75740105u,0x43420106u,0x6d6c0107u,0x66650108u,0x6f6e0109u,0x6564010au,0x5352010bu,0x6261010cu,0x7574010du,0x6a69010eu,0x706f010fu,0x1000110u,0x80000016u,0x73720123u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c0125u,0x0u,0x0u,0x0u,0x0u,0x0u,0x7776012au,0x0u,0x0u,0x6261012du,0x1000124u,0x80000017u,0x75740126u,0x66650127u,0x73720128u,0x1000129u,0x80000018u,0x7a79012bu,0x100012cu,0x80000019u,0x6e6d012eu,0x6665012fu,0x44430130u,0x706f0131u,0x6e6d0132u,0x71700133u,0x6d6c0134u,0x66650135u,0x75740136u,0x6a690137u,0x706f0138u,0x6f6e0139u,0x4443013au,0x6261013bu,0x6d6c013cu,0x6d6c013du,0x6362013eu,0x6261013fu,0x64630140u,0x6c6b0141u,0x56000142u,0x8000001au,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x74730198u,0x66650199u,0x7372019au,0x4544019bu,0x6261019cu,0x7574019du,0x6261019eu,0x100019fu,0x8000001bu,0x706f01aeu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f01b5u,0x6e6d01afu,0x666501b0u,0x757401b1u,0x737201b2u,0x7a7901b3u,0x10001b4u,0x8000001cu,0x767501b6u,0x717001b7u,0x10001b8u,0x8000001du,0x6a6901bau,0x686701bbu,0x696801bcu,0x757401bdu,0x10001beu,0x8000001eu,0x10001cau,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x626101cbu,0x77410227u,0x8000001fu,0x686701ccu,0x666501cdu,0x530001ceu,0x80000020u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x66650221u,0x68670222u,0x6a690223u,0x706f0224u,0x6f6e0225u,0x1000226u,0x80000021u,0x7574025du,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x67660266u,0x0u,0x0u,0x0u,0x0u,0x7372026cu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x75740275u,0x0u,0x0u,0x6261027bu,0x7574025eu,0x7372025fu,0x6a690260u,0x63620261u,0x76750262u,0x75740263u,0x66650264u,0x1000265u,0x80000022u,0x67660267u,0x74730268u,0x66650269u,0x7574026au,0x100026bu,0x80000023u,0x6261026du,0x6f6e026eu,0x7473026fu,0x67660270u,0x706f0271u,0x73720272u,0x6e6d0273u,0x1000274u,0x80000024u,0x62610276u,0x6f6e0277u,0x64630278u,0x66650279u,0x100027au,0x80000025u,0x6d6c027cu,0x6a69027du,0x6564027eu,0x4e4d027fu,0x62610280u,0x75740281u,0x66650282u,0x73720283u,0x6a690284u,0x62610285u,0x6d6c0286u,0x44430287u,0x706f0288u,0x6d6c0289u,0x706f028au,0x7372028bu,0x100028cu,0x80000026u,0x6867028eu,0x6968028fu,0x75740290u,0x1000291u,0x80000027u,0x757402a1u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x656402a8u,0x666502a2u,0x737202a3u,0x6a6902a4u,0x626102a5u,0x6d6c02a6u,0x10002a7u,0x80000028u,0x666502a9u,0x10002aau,0x80000029u,0x6e6d02b0u,0x0u,0x0u,0x0u,0x626102b3u,0x666502b1u,0x10002b2u,0x8000002au,0x737202b4u,0x10002b5u,0x8000002bu,0x626102bcu,0x0u,0x6a6902c2u,0x0u,0x0u,0x757402c7u,0x646302bdu,0x6a6902beu,0x757402bfu,0x7a7902c0u,0x10002c1u,0x8000002cu,0x686702c3u,0x6a6902c4u,0x6f6e02c5u,0x10002c6u,0x8000002du,0x554f02c8u,0x676602ceu,0x0u,0x0u,0x0u,0x0u,0x737202d4u,0x676602cfu,0x747302d0u,0x666502d1u,0x757402d2u,0x10002d3u,0x8000002eu,0x626102d5u,0x6f6e02d6u,0x747302d7u,0x676602d8u,0x706f02d9u,0x737202dau,0x6e6d02dbu,0x10002dcu,0x8000002fu,0x747302e1u,0x0u,0x0u,0x6a6902e8u,0x6a6902e2u,0x757402e3u,0x6a6902e4u,0x706f02e5u,0x6f6e02e6u,0x10002e7u,0x80000030u,0x6e6d02e9u,0x6a6902eau,0x757402ebu,0x6a6902ecu,0x777602edu,0x666502eeu,0x2f2e02efu,0x736102f0u,0x75740302u,0x0u,0x706f0312u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6f640317u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610327u,0x75740303u,0x73720304u,0x6a690305u,0x63620306u,0x76750307u,0x75740308u,0x66650309u,0x3430030au,0x100030eu,0x100030fu,0x1000310u,0x1000311u,0x80000031u,0x80000032u,0x80000033u,0x80000034u,0x6d6c0313u,0x706f0314u,0x73720315u,0x1000316u,0x80000035u,0x1000322u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x65640323u,0x80000036u,0x66650324u,0x79780325u,0x1000326u,0x80000037u,0x65640328u,0x6a690329u,0x7675032au,0x7473032bu,0x100032cu,0x80000038u,0x65640332u,0x0u,0x0u,0x0u,0x6f6e0337u,0x6a690333u,0x76750334u,0x74730335u,0x1000336u,0x80000039u,0x65640338u,0x66650339u,0x7372033au,0x6665033bu,0x7372033cu,0x100033du,0x8000003au,0x7b7a034bu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6261034eu,0x0u,0x0u,0x0u,0x62610354u,0x737203beu,0x6665034cu,0x100034du,0x8000003bu,0x6463034fu,0x6a690350u,0x6f6e0351u,0x68670352u,0x1000353u,0x8000003cu,0x75740355u,0x76750356u,0x74730357u,0x44430358u,0x62610359u,0x6d6c035au,0x6d6c035bu,0x6362035cu,0x6261035du,0x6463035eu,0x6c6b035fu,0x56000360u,0x8000003du,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x747303b6u,0x666503b7u,0x737203b8u,0x454403b9u,0x626103bau,0x757403bbu,0x626103bcu,0x10003bdu,0x8000003eu,0x676603bfu,0x626103c0u,0x646303c1u,0x666503c2u,0x10003c3u,0x8000003fu,0x626103c5u,0x6f6e03c6u,0x747303c7u,0x676603c8u,0x706f03c9u,0x737203cau,0x6e6d03cbu,0x10003ccu,0x80000040u,0x6a6903d0u,0x0u,0x10003dbu,0x757403d1u,0x454403d2u,0x6a6903d3u,0x747303d4u,0x757403d5u,0x626103d6u,0x6f6e03d7u,0x646303d8u,0x666503d9u,0x10003dau,0x80000041u,0x80000042u,0x6d6c03ebu,0x0u,0x0u,0x0u,0x73720446u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c049fu,0x767503ecu,0x666503edu,0x530003eeu,0x80000043u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610441u,0x6f6e0442u,0x68670443u,0x66650444u,0x1000445u,0x80000044u,0x75740447u,0x66650448u,0x79780449u,0x2f2e044au,0x7561044bu,0x7574045fu,0x0u,0x7061046fu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f0484u,0x0u,0x706f048au,0x0u,0x62610492u,0x0u,0x62610498u,0x75740460u,0x73720461u,0x6a690462u,0x63620463u,0x76750464u,0x75740465u,0x66650466u,0x34300467u,0x100046bu,0x100046cu,0x100046du,0x100046eu,0x80000045u,0x80000046u,0x80000047u,0x80000048u,0x7170047eu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c0480u,0x100047fu,0x80000049u,0x706f0481u,0x73720482u,0x1000483u,0x8000004au,0x73720485u,0x6e6d0486u,0x62610487u,0x6d6c0488u,0x1000489u,0x8000004bu,0x7473048bu,0x6a69048cu,0x7574048du,0x6a69048eu,0x706f048fu,0x6f6e0490u,0x1000491u,0x8000004cu,0x65640493u,0x6a690494u,0x76750495u,0x74730496u,0x1000497u,0x8000004du,0x6f6e0499u,0x6867049au,0x6665049bu,0x6f6e049cu,0x7574049du,0x100049eu,0x8000004eu,0x767504a0u,0x6e6d04a1u,0x666504a2u,0x10004a3u,0x8000004fu,0x737204a8u,0x0u,0x0u,0x626104acu,0x6d6c04a9u,0x656404aau,0x10004abu,0x80000050u,0x717004adu,0x4e4d04aeu,0x706f04afu,0x656404b0u,0x666504b1u,0x343104b2u,0x10004b5u,0x10004b6u,0x10004b7u,0x80000051u,0x80000052u,0x80000053u}; + static const uint32_t table[] = {0x756c0017u,0x62610089u,0x70610093u,0x6a6100ebu,0x7a7900ffu,0x73610111u,0x736501a0u,0x666501b9u,0x6f6401bfu,0x0u,0x0u,0x6a69028du,0x70610292u,0x666102abu,0x767002b6u,0x736f02ddu,0x0u,0x6661032du,0x7669033eu,0x736103c4u,0x716e0404u,0x70610413u,0x736f04dbu,0x716c0020u,0x6362004fu,0x0u,0x0u,0x0u,0x0u,0x73720071u,0x71700075u,0x7574007au,0x706f0025u,0x0u,0x0u,0x0u,0x69680038u,0x78770026u,0x4a490027u,0x6f6e0028u,0x77760029u,0x6261002au,0x6d6c002bu,0x6a69002cu,0x6564002du,0x4e4d002eu,0x6261002fu,0x75740030u,0x66650031u,0x73720032u,0x6a690033u,0x62610034u,0x6d6c0035u,0x74730036u,0x1000037u,0x80000000u,0x62610039u,0x4e43003au,0x76750045u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f004bu,0x75740046u,0x706f0047u,0x67660048u,0x67660049u,0x100004au,0x80000001u,0x6564004cu,0x6665004du,0x100004eu,0x80000002u,0x6a690050u,0x66650051u,0x6f6e0052u,0x75740053u,0x53430054u,0x706f0064u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610069u,0x6d6c0065u,0x706f0066u,0x73720067u,0x1000068u,0x80000003u,0x6564006au,0x6a69006bu,0x6261006cu,0x6f6e006du,0x6463006eu,0x6665006fu,0x1000070u,0x80000004u,0x62610072u,0x7a790073u,0x1000074u,0x80000005u,0x66650076u,0x64630077u,0x75740078u,0x1000079u,0x80000006u,0x7372007bu,0x6a69007cu,0x6362007du,0x7675007eu,0x7574007fu,0x66650080u,0x34300081u,0x1000085u,0x1000086u,0x1000087u,0x1000088u,0x80000007u,0x80000008u,0x80000009u,0x8000000au,0x6463008au,0x6c6b008bu,0x6867008cu,0x7372008du,0x706f008eu,0x7675008fu,0x6f6e0090u,0x65640091u,0x1000092u,0x8000000bu,0x716d00a2u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x626100acu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c00e7u,0x666500a6u,0x0u,0x0u,0x747300aau,0x737200a7u,0x626100a8u,0x10000a9u,0x8000000cu,0x10000abu,0x8000000du,0x6f6e00adu,0x6f6e00aeu,0x666500afu,0x6d6c00b0u,0x2f2e00b1u,0x716300b2u,0x706f00c0u,0x666500c5u,0x0u,0x0u,0x0u,0x0u,0x6f6e00cau,0x0u,0x0u,0x0u,0x0u,0x0u,0x636200d4u,0x737200dcu,0x6d6c00c1u,0x706f00c2u,0x737200c3u,0x10000c4u,0x8000000eu,0x717000c6u,0x757400c7u,0x696800c8u,0x10000c9u,0x8000000fu,0x747300cbu,0x757400ccu,0x626100cdu,0x6f6e00ceu,0x646300cfu,0x666500d0u,0x4a4900d1u,0x656400d2u,0x10000d3u,0x80000010u,0x6b6a00d5u,0x666500d6u,0x646300d7u,0x757400d8u,0x4a4900d9u,0x656400dau,0x10000dbu,0x80000011u,0x6a6900ddu,0x6e6d00deu,0x6a6900dfu,0x757400e0u,0x6a6900e1u,0x777600e2u,0x666500e3u,0x4a4900e4u,0x656400e5u,0x10000e6u,0x80000012u,0x706f00e8u,0x737200e9u,0x10000eau,0x80000013u,0x757400f4u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x737200f7u,0x626100f5u,0x10000f6u,0x80000014u,0x666500f8u,0x646300f9u,0x757400fau,0x6a6900fbu,0x706f00fcu,0x6f6e00fdu,0x10000feu,0x80000015u,0x66650100u,0x4d4c0101u,0x6a690102u,0x68670103u,0x69680104u,0x75740105u,0x43420106u,0x6d6c0107u,0x66650108u,0x6f6e0109u,0x6564010au,0x5352010bu,0x6261010cu,0x7574010du,0x6a69010eu,0x706f010fu,0x1000110u,0x80000016u,0x73720123u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c0125u,0x0u,0x0u,0x0u,0x0u,0x0u,0x7776012au,0x0u,0x0u,0x6261012du,0x1000124u,0x80000017u,0x75740126u,0x66650127u,0x73720128u,0x1000129u,0x80000018u,0x7a79012bu,0x100012cu,0x80000019u,0x6e6d012eu,0x6665012fu,0x44430130u,0x706f0131u,0x6e6d0132u,0x71700133u,0x6d6c0134u,0x66650135u,0x75740136u,0x6a690137u,0x706f0138u,0x6f6e0139u,0x4443013au,0x6261013bu,0x6d6c013cu,0x6d6c013du,0x6362013eu,0x6261013fu,0x64630140u,0x6c6b0141u,0x56000142u,0x8000001au,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x74730198u,0x66650199u,0x7372019au,0x4544019bu,0x6261019cu,0x7574019du,0x6261019eu,0x100019fu,0x8000001bu,0x706f01aeu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f01b5u,0x6e6d01afu,0x666501b0u,0x757401b1u,0x737201b2u,0x7a7901b3u,0x10001b4u,0x8000001cu,0x767501b6u,0x717001b7u,0x10001b8u,0x8000001du,0x6a6901bau,0x686701bbu,0x696801bcu,0x757401bdu,0x10001beu,0x8000001eu,0x10001cau,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x626101cbu,0x77410227u,0x8000001fu,0x686701ccu,0x666501cdu,0x530001ceu,0x80000020u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x66650221u,0x68670222u,0x6a690223u,0x706f0224u,0x6f6e0225u,0x1000226u,0x80000021u,0x7574025du,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x67660266u,0x0u,0x0u,0x0u,0x0u,0x7372026cu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x75740275u,0x0u,0x0u,0x6261027bu,0x7574025eu,0x7372025fu,0x6a690260u,0x63620261u,0x76750262u,0x75740263u,0x66650264u,0x1000265u,0x80000022u,0x67660267u,0x74730268u,0x66650269u,0x7574026au,0x100026bu,0x80000023u,0x6261026du,0x6f6e026eu,0x7473026fu,0x67660270u,0x706f0271u,0x73720272u,0x6e6d0273u,0x1000274u,0x80000024u,0x62610276u,0x6f6e0277u,0x64630278u,0x66650279u,0x100027au,0x80000025u,0x6d6c027cu,0x6a69027du,0x6564027eu,0x4e4d027fu,0x62610280u,0x75740281u,0x66650282u,0x73720283u,0x6a690284u,0x62610285u,0x6d6c0286u,0x44430287u,0x706f0288u,0x6d6c0289u,0x706f028au,0x7372028bu,0x100028cu,0x80000026u,0x6867028eu,0x6968028fu,0x75740290u,0x1000291u,0x80000027u,0x757402a1u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x656402a8u,0x666502a2u,0x737202a3u,0x6a6902a4u,0x626102a5u,0x6d6c02a6u,0x10002a7u,0x80000028u,0x666502a9u,0x10002aau,0x80000029u,0x6e6d02b0u,0x0u,0x0u,0x0u,0x626102b3u,0x666502b1u,0x10002b2u,0x8000002au,0x737202b4u,0x10002b5u,0x8000002bu,0x626102bcu,0x0u,0x6a6902c2u,0x0u,0x0u,0x757402c7u,0x646302bdu,0x6a6902beu,0x757402bfu,0x7a7902c0u,0x10002c1u,0x8000002cu,0x686702c3u,0x6a6902c4u,0x6f6e02c5u,0x10002c6u,0x8000002du,0x554f02c8u,0x676602ceu,0x0u,0x0u,0x0u,0x0u,0x737202d4u,0x676602cfu,0x747302d0u,0x666502d1u,0x757402d2u,0x10002d3u,0x8000002eu,0x626102d5u,0x6f6e02d6u,0x747302d7u,0x676602d8u,0x706f02d9u,0x737202dau,0x6e6d02dbu,0x10002dcu,0x8000002fu,0x747302e1u,0x0u,0x0u,0x6a6902e8u,0x6a6902e2u,0x757402e3u,0x6a6902e4u,0x706f02e5u,0x6f6e02e6u,0x10002e7u,0x80000030u,0x6e6d02e9u,0x6a6902eau,0x757402ebu,0x6a6902ecu,0x777602edu,0x666502eeu,0x2f2e02efu,0x736102f0u,0x75740302u,0x0u,0x706f0312u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6f640317u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610327u,0x75740303u,0x73720304u,0x6a690305u,0x63620306u,0x76750307u,0x75740308u,0x66650309u,0x3430030au,0x100030eu,0x100030fu,0x1000310u,0x1000311u,0x80000031u,0x80000032u,0x80000033u,0x80000034u,0x6d6c0313u,0x706f0314u,0x73720315u,0x1000316u,0x80000035u,0x1000322u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x65640323u,0x80000036u,0x66650324u,0x79780325u,0x1000326u,0x80000037u,0x65640328u,0x6a690329u,0x7675032au,0x7473032bu,0x100032cu,0x80000038u,0x65640332u,0x0u,0x0u,0x0u,0x6f6e0337u,0x6a690333u,0x76750334u,0x74730335u,0x1000336u,0x80000039u,0x65640338u,0x66650339u,0x7372033au,0x6665033bu,0x7372033cu,0x100033du,0x8000003au,0x7b7a034bu,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6261034eu,0x0u,0x0u,0x0u,0x62610354u,0x737203beu,0x6665034cu,0x100034du,0x8000003bu,0x6463034fu,0x6a690350u,0x6f6e0351u,0x68670352u,0x1000353u,0x8000003cu,0x75740355u,0x76750356u,0x74730357u,0x44430358u,0x62610359u,0x6d6c035au,0x6d6c035bu,0x6362035cu,0x6261035du,0x6463035eu,0x6c6b035fu,0x56000360u,0x8000003du,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x747303b6u,0x666503b7u,0x737203b8u,0x454403b9u,0x626103bau,0x757403bbu,0x626103bcu,0x10003bdu,0x8000003eu,0x676603bfu,0x626103c0u,0x646303c1u,0x666503c2u,0x10003c3u,0x8000003fu,0x747303d6u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x626103fcu,0x6c6b03d7u,0x484703d8u,0x737203d9u,0x626103dau,0x6a6903dbu,0x6f6e03dcu,0x545303ddu,0x6a6903deu,0x7b7a03dfu,0x666503e0u,0x584803e1u,0x666503f1u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6a6903f7u,0x6a6903f2u,0x686703f3u,0x696803f4u,0x757403f5u,0x10003f6u,0x80000040u,0x656403f8u,0x757403f9u,0x696803fau,0x10003fbu,0x80000041u,0x6f6e03fdu,0x747303feu,0x676603ffu,0x706f0400u,0x73720401u,0x6e6d0402u,0x1000403u,0x80000042u,0x6a690407u,0x0u,0x1000412u,0x75740408u,0x45440409u,0x6a69040au,0x7473040bu,0x7574040cu,0x6261040du,0x6f6e040eu,0x6463040fu,0x66650410u,0x1000411u,0x80000043u,0x80000044u,0x6d6c0422u,0x0u,0x0u,0x0u,0x7372047du,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c04d6u,0x76750423u,0x66650424u,0x53000425u,0x80000045u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x62610478u,0x6f6e0479u,0x6867047au,0x6665047bu,0x100047cu,0x80000046u,0x7574047eu,0x6665047fu,0x79780480u,0x2f2e0481u,0x75610482u,0x75740496u,0x0u,0x706104a6u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x706f04bbu,0x0u,0x706f04c1u,0x0u,0x626104c9u,0x0u,0x626104cfu,0x75740497u,0x73720498u,0x6a690499u,0x6362049au,0x7675049bu,0x7574049cu,0x6665049du,0x3430049eu,0x10004a2u,0x10004a3u,0x10004a4u,0x10004a5u,0x80000047u,0x80000048u,0x80000049u,0x8000004au,0x717004b5u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x0u,0x6d6c04b7u,0x10004b6u,0x8000004bu,0x706f04b8u,0x737204b9u,0x10004bau,0x8000004cu,0x737204bcu,0x6e6d04bdu,0x626104beu,0x6d6c04bfu,0x10004c0u,0x8000004du,0x747304c2u,0x6a6904c3u,0x757404c4u,0x6a6904c5u,0x706f04c6u,0x6f6e04c7u,0x10004c8u,0x8000004eu,0x656404cau,0x6a6904cbu,0x767504ccu,0x747304cdu,0x10004ceu,0x8000004fu,0x6f6e04d0u,0x686704d1u,0x666504d2u,0x6f6e04d3u,0x757404d4u,0x10004d5u,0x80000050u,0x767504d7u,0x6e6d04d8u,0x666504d9u,0x10004dau,0x80000051u,0x737204dfu,0x0u,0x0u,0x626104e3u,0x6d6c04e0u,0x656404e1u,0x10004e2u,0x80000052u,0x717004e4u,0x4e4d04e5u,0x706f04e6u,0x656404e7u,0x666504e8u,0x343104e9u,0x10004ecu,0x10004edu,0x10004eeu,0x80000053u,0x80000054u,0x80000055u}; uint32_t cur = 0x78610000u; for(int i = 0;cur!=0;++i) { uint32_t idx = cur&0xFFFFu; @@ -340,6 +340,82 @@ static const void * ANARI_RENDERER_default_eyeLightBlendRatio_info(ANARIDataType default: return nullptr; } } +static const void * ANARI_RENDERER_default_taskGrainSizeWidth_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_false; + } else { + return nullptr; + } + case 1: // default + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(4)}; + return default_value; + } else { + return nullptr; + } + case 2: // minimum + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(1)}; + return default_value; + } else { + return nullptr; + } + case 3: // maximum + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(128)}; + return default_value; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "grain size of the render task along the width of the frame"; + return description; + } + default: return nullptr; + } +} +static const void * ANARI_RENDERER_default_taskGrainSizeHeight_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_false; + } else { + return nullptr; + } + case 1: // default + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(4)}; + return default_value; + } else { + return nullptr; + } + case 2: // minimum + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(1)}; + return default_value; + } else { + return nullptr; + } + case 3: // maximum + if(paramType == ANARI_INT32 && infoType == ANARI_INT32) { + static const int32_t default_value[1] = {INT32_C(128)}; + return default_value; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "grain size of the render task along the height of the frame"; + return description; + } + default: return nullptr; + } +} static const void * ANARI_RENDERER_default_name_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { (void)paramType; switch(infoName) { @@ -471,6 +547,10 @@ static const void * ANARI_RENDERER_default_param_info(const char *paramName, ANA return ANARI_RENDERER_default_mode_info(paramType, infoName, infoType); case 22: return ANARI_RENDERER_default_eyeLightBlendRatio_info(paramType, infoName, infoType); + case 65: + return ANARI_RENDERER_default_taskGrainSizeWidth_info(paramType, infoName, infoType); + case 64: + return ANARI_RENDERER_default_taskGrainSizeHeight_info(paramType, infoName, infoType); case 42: return ANARI_RENDERER_default_name_info(paramType, infoName, infoType); case 3: @@ -841,7 +921,7 @@ static const void * ANARI_FRAME_param_info(const char *paramName, ANARIDataType switch(param_hash(paramName)) { case 42: return ANARI_FRAME_name_info(paramType, infoName, infoType); - case 80: + case 82: return ANARI_FRAME_world_info(paramType, infoName, infoType); case 58: return ANARI_FRAME_renderer_info(paramType, infoName, infoType); @@ -962,7 +1042,7 @@ static const void * ANARI_GROUP_param_info(const char *paramName, ANARIDataType return ANARI_GROUP_name_info(paramType, infoName, infoType); case 63: return ANARI_GROUP_surface_info(paramType, infoName, infoType); - case 79: + case 81: return ANARI_GROUP_volume_info(paramType, infoName, infoType); case 39: return ANARI_GROUP_light_info(paramType, infoName, infoType); @@ -1091,7 +1171,7 @@ static const void * ANARI_WORLD_param_info(const char *paramName, ANARIDataType return ANARI_WORLD_instance_info(paramType, infoName, infoType); case 63: return ANARI_WORLD_surface_info(paramType, infoName, infoType); - case 79: + case 81: return ANARI_WORLD_volume_info(paramType, infoName, infoType); case 39: return ANARI_WORLD_light_info(paramType, infoName, infoType); @@ -1300,7 +1380,7 @@ static const void * ANARI_INSTANCE_transform_param_info(const char *paramName, A switch(param_hash(paramName)) { case 42: return ANARI_INSTANCE_transform_name_info(paramType, infoName, infoType); - case 64: + case 66: return ANARI_INSTANCE_transform_transform_info(paramType, infoName, infoType); case 29: return ANARI_INSTANCE_transform_group_info(paramType, infoName, infoType); @@ -1603,7 +1683,7 @@ static const void * ANARI_CAMERA_orthographic_param_info(const char *paramName, return ANARI_CAMERA_orthographic_position_info(paramType, infoName, infoType); case 21: return ANARI_CAMERA_orthographic_direction_info(paramType, infoName, infoType); - case 66: + case 68: return ANARI_CAMERA_orthographic_up_info(paramType, infoName, infoType); case 33: return ANARI_CAMERA_orthographic_imageRegion_info(paramType, infoName, infoType); @@ -1912,7 +1992,7 @@ static const void * ANARI_CAMERA_perspective_param_info(const char *paramName, A return ANARI_CAMERA_perspective_position_info(paramType, infoName, infoType); case 21: return ANARI_CAMERA_perspective_direction_info(paramType, infoName, infoType); - case 66: + case 68: return ANARI_CAMERA_perspective_up_info(paramType, infoName, infoType); case 33: return ANARI_CAMERA_perspective_imageRegion_info(paramType, infoName, infoType); @@ -2656,21 +2736,21 @@ static const void * ANARI_GEOMETRY_cone_param_info(const char *paramName, ANARID return ANARI_GEOMETRY_cone_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_cone_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_cone_vertex_position_info(paramType, infoName, infoType); - case 77: + case 79: return ANARI_GEOMETRY_cone_vertex_radius_info(paramType, infoName, infoType); - case 73: + case 75: return ANARI_GEOMETRY_cone_vertex_cap_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_cone_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_cone_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_cone_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_cone_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_cone_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_cone_primitive_index_info(paramType, infoName, infoType); @@ -3329,19 +3409,19 @@ static const void * ANARI_GEOMETRY_curve_param_info(const char *paramName, ANARI return ANARI_GEOMETRY_curve_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_curve_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_curve_vertex_position_info(paramType, infoName, infoType); - case 77: + case 79: return ANARI_GEOMETRY_curve_vertex_radius_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_curve_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_curve_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_curve_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_curve_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_curve_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_curve_primitive_index_info(paramType, infoName, infoType); @@ -4071,19 +4151,19 @@ static const void * ANARI_GEOMETRY_cylinder_param_info(const char *paramName, AN return ANARI_GEOMETRY_cylinder_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_cylinder_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_cylinder_vertex_position_info(paramType, infoName, infoType); - case 73: + case 75: return ANARI_GEOMETRY_cylinder_vertex_cap_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_cylinder_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_cylinder_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_cylinder_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_cylinder_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_cylinder_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_cylinder_primitive_index_info(paramType, infoName, infoType); @@ -4753,21 +4833,21 @@ static const void * ANARI_GEOMETRY_quad_param_info(const char *paramName, ANARID return ANARI_GEOMETRY_quad_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_quad_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_quad_vertex_position_info(paramType, infoName, infoType); - case 75: + case 77: return ANARI_GEOMETRY_quad_vertex_normal_info(paramType, infoName, infoType); - case 78: + case 80: return ANARI_GEOMETRY_quad_vertex_tangent_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_quad_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_quad_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_quad_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_quad_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_quad_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_quad_primitive_index_info(paramType, infoName, infoType); @@ -5424,19 +5504,19 @@ static const void * ANARI_GEOMETRY_sphere_param_info(const char *paramName, ANAR return ANARI_GEOMETRY_sphere_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_sphere_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_sphere_vertex_position_info(paramType, infoName, infoType); - case 77: + case 79: return ANARI_GEOMETRY_sphere_vertex_radius_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_sphere_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_sphere_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_sphere_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_sphere_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_sphere_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_sphere_primitive_index_info(paramType, infoName, infoType); @@ -6102,21 +6182,21 @@ static const void * ANARI_GEOMETRY_triangle_param_info(const char *paramName, AN return ANARI_GEOMETRY_triangle_primitive_attribute3_info(paramType, infoName, infoType); case 54: return ANARI_GEOMETRY_triangle_primitive_id_info(paramType, infoName, infoType); - case 76: + case 78: return ANARI_GEOMETRY_triangle_vertex_position_info(paramType, infoName, infoType); - case 75: + case 77: return ANARI_GEOMETRY_triangle_vertex_normal_info(paramType, infoName, infoType); - case 78: + case 80: return ANARI_GEOMETRY_triangle_vertex_tangent_info(paramType, infoName, infoType); - case 74: + case 76: return ANARI_GEOMETRY_triangle_vertex_color_info(paramType, infoName, infoType); - case 69: + case 71: return ANARI_GEOMETRY_triangle_vertex_attribute0_info(paramType, infoName, infoType); - case 70: + case 72: return ANARI_GEOMETRY_triangle_vertex_attribute1_info(paramType, infoName, infoType); - case 71: + case 73: return ANARI_GEOMETRY_triangle_vertex_attribute2_info(paramType, infoName, infoType); - case 72: + case 74: return ANARI_GEOMETRY_triangle_vertex_attribute3_info(paramType, infoName, infoType); case 55: return ANARI_GEOMETRY_triangle_primitive_index_info(paramType, infoName, infoType); @@ -6632,7 +6712,7 @@ static const void * ANARI_SAMPLER_image1D_param_info(const char *paramName, ANAR return ANARI_SAMPLER_image1D_inAttribute_info(paramType, infoName, infoType); case 24: return ANARI_SAMPLER_image1D_filter_info(paramType, infoName, infoType); - case 81: + case 83: return ANARI_SAMPLER_image1D_wrapMode1_info(paramType, infoName, infoType); case 36: return ANARI_SAMPLER_image1D_inTransform_info(paramType, infoName, infoType); @@ -6997,9 +7077,9 @@ static const void * ANARI_SAMPLER_image2D_param_info(const char *paramName, ANAR return ANARI_SAMPLER_image2D_inAttribute_info(paramType, infoName, infoType); case 24: return ANARI_SAMPLER_image2D_filter_info(paramType, infoName, infoType); - case 81: + case 83: return ANARI_SAMPLER_image2D_wrapMode1_info(paramType, infoName, infoType); - case 82: + case 84: return ANARI_SAMPLER_image2D_wrapMode2_info(paramType, infoName, infoType); case 36: return ANARI_SAMPLER_image2D_inTransform_info(paramType, infoName, infoType); @@ -7403,11 +7483,11 @@ static const void * ANARI_SAMPLER_image3D_param_info(const char *paramName, ANAR return ANARI_SAMPLER_image3D_inAttribute_info(paramType, infoName, infoType); case 24: return ANARI_SAMPLER_image3D_filter_info(paramType, infoName, infoType); - case 81: + case 83: return ANARI_SAMPLER_image3D_wrapMode1_info(paramType, infoName, infoType); - case 82: + case 84: return ANARI_SAMPLER_image3D_wrapMode2_info(paramType, infoName, infoType); - case 83: + case 85: return ANARI_SAMPLER_image3D_wrapMode3_info(paramType, infoName, infoType); case 36: return ANARI_SAMPLER_image3D_inTransform_info(paramType, infoName, infoType); @@ -8022,15 +8102,15 @@ static const void * ANARI_VOLUME_transferFunction1D_param_info(const char *param switch(param_hash(paramName)) { case 42: return ANARI_VOLUME_transferFunction1D_name_info(paramType, infoName, infoType); - case 67: + case 69: return ANARI_VOLUME_transferFunction1D_value_info(paramType, infoName, infoType); - case 68: + case 70: return ANARI_VOLUME_transferFunction1D_valueRange_info(paramType, infoName, infoType); case 19: return ANARI_VOLUME_transferFunction1D_color_info(paramType, infoName, infoType); case 44: return ANARI_VOLUME_transferFunction1D_opacity_info(paramType, infoName, infoType); - case 65: + case 67: return ANARI_VOLUME_transferFunction1D_unitDistance_info(paramType, infoName, infoType); default: return nullptr; @@ -8234,6 +8314,8 @@ static const void * ANARI_RENDERER_default_info(int infoName, ANARIDataType info static const ANARIParameter parameters[] = { {"mode", ANARI_STRING}, {"eyeLightBlendRatio", ANARI_FLOAT32}, + {"taskGrainSizeWidth", ANARI_INT32}, + {"taskGrainSizeHeight", ANARI_INT32}, {"name", ANARI_STRING}, {"ambientColor", ANARI_FLOAT32_VEC3}, {"ambientRadiance", ANARI_FLOAT32}, diff --git a/src/helide/HelideGlobalState.h b/src/helide/HelideGlobalState.h index 45c28e56..62c9a8b1 100644 --- a/src/helide/HelideGlobalState.h +++ b/src/helide/HelideGlobalState.h @@ -8,7 +8,7 @@ // helium #include "helium/BaseGlobalDeviceState.h" // embree -#include "embree3/rtcore.h" +#include "embree4/rtcore.h" namespace helide { diff --git a/src/helide/HelideMath.h b/src/helide/HelideMath.h index 90ca8b7e..b37a9f69 100644 --- a/src/helide/HelideMath.h +++ b/src/helide/HelideMath.h @@ -6,7 +6,7 @@ // helium #include "helium/helium_math.h" // embree -#include +#include // std #include #include @@ -25,18 +25,19 @@ struct Ray float3 dir; float time{0.f}; float tfar{std::numeric_limits::max()}; - unsigned int mask{~0u}; - unsigned int id{0}; - unsigned int flags{0}; + uint32_t mask{~0u}; + uint32_t id{0u}; + uint32_t flags{0u}; // Hit // float3 Ng; float u; float v; - unsigned int primID{RTC_INVALID_GEOMETRY_ID}; // primitive ID - unsigned int geomID{RTC_INVALID_GEOMETRY_ID}; // geometry ID - unsigned int instID{RTC_INVALID_GEOMETRY_ID}; // instance ID + uint32_t primID{RTC_INVALID_GEOMETRY_ID}; // primitive ID + uint32_t geomID{RTC_INVALID_GEOMETRY_ID}; // geometry ID + uint32_t instID{RTC_INVALID_GEOMETRY_ID}; // instance ID + uint32_t instArrayID{RTC_INVALID_GEOMETRY_ID}; // instance sub-array ID }; struct Volume; @@ -47,6 +48,7 @@ struct VolumeRay box1 t{0.f, std::numeric_limits::max()}; Volume *volume{nullptr}; uint32_t instID{RTC_INVALID_GEOMETRY_ID}; + uint32_t instArrayID{RTC_INVALID_GEOMETRY_ID}; }; using UniformAttributeSet = std::array, 5>; diff --git a/src/helide/external/embree/CMakeLists.txt b/src/helide/external/embree/CMakeLists.txt index cbaafbd1..7ff50322 100644 --- a/src/helide/external/embree/CMakeLists.txt +++ b/src/helide/external/embree/CMakeLists.txt @@ -3,15 +3,16 @@ project(local_embree LANGUAGES CXX) -option(EMBREE_GEOMETRY_CURVE "" ON) -option(EMBREE_GEOMETRY_GRID "" OFF) -option(EMBREE_GEOMETRY_INSTANCE "" ON) -option(EMBREE_GEOMETRY_POINT "" ON) -option(EMBREE_GEOMETRY_QUAD "" ON) -option(EMBREE_GEOMETRY_SUBDIVISION "" OFF) -option(EMBREE_GEOMETRY_TRIANGLE "" ON) -option(EMBREE_GEOMETRY_USER "" OFF) -if (APPLE AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm64") +option(EMBREE_GEOMETRY_CURVE "" ON) +option(EMBREE_GEOMETRY_GRID "" OFF) +option(EMBREE_GEOMETRY_INSTANCE "" ON) +option(EMBREE_GEOMETRY_INSTANCE_ARRAY "" ON) +option(EMBREE_GEOMETRY_POINT "" ON) +option(EMBREE_GEOMETRY_QUAD "" ON) +option(EMBREE_GEOMETRY_SUBDIVISION "" OFF) +option(EMBREE_GEOMETRY_TRIANGLE "" ON) +option(EMBREE_GEOMETRY_USER "" OFF) +if ((APPLE OR UNIX) AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm64") option(EMBREE_ISA_NEON "" OFF) option(EMBREE_ISA_NEON2X "" ON) else() @@ -21,16 +22,19 @@ else() option(EMBREE_ISA_SSE42 "" ON) option(EMBREE_ISA_SSE2 "" OFF) endif() -option(EMBREE_ISPC_SUPPORT "" OFF) -option(EMBREE_STATIC_LIB "" ON) -option(EMBREE_TUTORIALS "" OFF) -option(EMBREE_TUTORIALS_GLFW "" OFF) +option(EMBREE_ISPC_SUPPORT "" OFF) +option(EMBREE_MAX_INSTANCE_LEVEL_COUNT "" 1) +option(EMBREE_STATIC_LIB "" ON) +option(EMBREE_STAT_COUNTERS "" OFF) +option(EMBREE_SYCL_SUPPORT "" OFF) +option(EMBREE_TUTORIALS "" OFF) +option(EMBREE_TUTORIALS_GLFW "" OFF) set(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE STRING "" FORCE) anari_sdk_fetch_project( NAME anari_helide_embree - URL "https://github.com/embree/embree/archive/refs/tags/v3.13.5.zip" - MD5 d87ce56557a38e332cb3e0fa5cac8cfd + URL "https://github.com/RenderKit/embree/archive/refs/tags/v4.3.3.zip" + MD5 a03f49d17084612dc0f28bdc36d92e89 ADD_SUBDIR ) diff --git a/src/helide/frame/Frame.cpp b/src/helide/frame/Frame.cpp index 4757c062..c6938764 100644 --- a/src/helide/frame/Frame.cpp +++ b/src/helide/frame/Frame.cpp @@ -23,10 +23,14 @@ static void serial_for(I size, FUNC &&f) template static std::future async(std::packaged_task &task, TASK_T &&fcn) { +#if 1 + return std::async(fcn); +#else task = std::packaged_task(std::forward(fcn)); auto future = task.get_future(); embree::TaskScheduler::spawn([&]() { task(); }); return future; +#endif } template @@ -154,16 +158,23 @@ void Frame::renderFrame() m_world->embreeSceneUpdate(); + const auto taskGrainSize = uint2(m_renderer->taskGrainSize()); + const auto &size = m_frameData.size; - embree::parallel_for(size.y, [&](int y) { - serial_for(size.x, [&](int x) { - auto screen = screenFromPixel(float2(x, y)); - auto imageRegion = m_camera->imageRegion(); - screen.x = linalg::lerp(imageRegion.x, imageRegion.z, screen.x); - screen.y = linalg::lerp(imageRegion.y, imageRegion.w, screen.y); - Ray ray = m_camera->createRay(screen); - writeSample(x, y, m_renderer->renderSample(screen, ray, *m_world)); - }); + using Range = embree::range; + embree::parallel_for(0u, size.y, taskGrainSize.y, [&](const Range &ry) { + for (auto y = ry.begin(); y < ry.end(); y++) { + embree::parallel_for(0u, size.x, taskGrainSize.x, [&](const Range &rx) { + for (auto x = rx.begin(); x < rx.end(); x++) { + auto screen = screenFromPixel(float2(x, y)); + auto imageRegion = m_camera->imageRegion(); + screen.x = linalg::lerp(imageRegion.x, imageRegion.z, screen.x); + screen.y = linalg::lerp(imageRegion.y, imageRegion.w, screen.y); + Ray ray = m_camera->createRay(screen); + writeSample(x, y, m_renderer->renderSample(screen, ray, *m_world)); + } + }); + } }); if (m_callback) diff --git a/src/helide/renderer/Renderer.cpp b/src/helide/renderer/Renderer.cpp index 9627f89b..984e43fa 100644 --- a/src/helide/renderer/Renderer.cpp +++ b/src/helide/renderer/Renderer.cpp @@ -109,6 +109,8 @@ void Renderer::commit() m_ambientRadiance = getParam("ambientRadiance", 1.f); m_falloffBlendRatio = getParam("eyeLightBlendRatio", 0.5f); m_mode = renderModeFromString(getParamString("mode", "default")); + m_taskGrainSize.x = getParam("taskGrainSizeWidth", 4); + m_taskGrainSize.y = getParam("taskGrainSizeHeight", 4); } PixelSample Renderer::renderSample( @@ -118,9 +120,9 @@ PixelSample Renderer::renderSample( // Intersect Surfaces // - RTCIntersectContext context; - rtcInitIntersectContext(&context); - rtcIntersect1(w.embreeScene(), &context, (RTCRayHit *)&ray); + RTCIntersectArguments iargs; + rtcInitIntersectArguments(&iargs); + rtcIntersect1(w.embreeScene(), (RTCRayHit *)&ray, &iargs); const bool hitGeometry = ray.geomID != RTC_INVALID_GEOMETRY_ID; // Intersect Volumes // diff --git a/src/helide/renderer/Renderer.h b/src/helide/renderer/Renderer.h index aca2c183..f5e6a403 100644 --- a/src/helide/renderer/Renderer.h +++ b/src/helide/renderer/Renderer.h @@ -49,6 +49,8 @@ struct Renderer : public Object virtual void commit() override; + int2 taskGrainSize() const; + PixelSample renderSample(const float2 &screen, Ray ray, const World &w) const; static Renderer *createInstance( @@ -64,11 +66,19 @@ struct Renderer : public Object float m_ambientRadiance{1.f}; float m_falloffBlendRatio{0.5f}; RenderMode m_mode{RenderMode::DEFAULT}; + int2 m_taskGrainSize{4, 4}; helium::IntrusivePtr m_heatmap; helium::IntrusivePtr m_bgImage; }; +// Inlined definitions //////////////////////////////////////////////////////// + +inline int2 Renderer::taskGrainSize() const +{ + return m_taskGrainSize; +} + } // namespace helide HELIDE_ANARI_TYPEFOR_SPECIALIZATION(helide::Renderer *, ANARI_RENDERER); From 16e22fc5f16f4fbe4dc16750a132e7c48b8aa0e4 Mon Sep 17 00:00:00 2001 From: Jefferson Amstutz Date: Fri, 18 Oct 2024 17:46:06 -0500 Subject: [PATCH 3/4] implement KHR_INSTANCE_ARRAY_TRANSFORM in helide --- src/helide/HelideDefinitions.json | 3 +- src/helide/HelideDeviceQueries.cpp | 441 +++++++++++++++-------------- src/helide/HelideDeviceQueries.h | 2 +- src/helide/renderer/Renderer.cpp | 18 +- src/helide/scene/Instance.cpp | 78 +++-- src/helide/scene/Instance.h | 37 ++- src/helium/array/Array1D.h | 9 + 7 files changed, 332 insertions(+), 256 deletions(-) diff --git a/src/helide/HelideDefinitions.json b/src/helide/HelideDefinitions.json index 4549b964..a4a27db0 100644 --- a/src/helide/HelideDefinitions.json +++ b/src/helide/HelideDefinitions.json @@ -5,7 +5,6 @@ "dependencies": [ "anari_core_1_0", "anari_core_objects_base_1_0", - "khr_instance_transform", "khr_camera_orthographic", "khr_camera_perspective", "khr_device_synchronization", @@ -19,6 +18,8 @@ "khr_geometry_quad", "khr_geometry_sphere", "khr_geometry_triangle", + "khr_instance_transform", + "khr_instance_transform_array", "khr_material_matte", "khr_material_physicallyBased", "khr_renderer_ambient_light", diff --git a/src/helide/HelideDeviceQueries.cpp b/src/helide/HelideDeviceQueries.cpp index 2b15e62f..10039234 100644 --- a/src/helide/HelideDeviceQueries.cpp +++ b/src/helide/HelideDeviceQueries.cpp @@ -92,6 +92,7 @@ const char ** query_extensions() { "ANARI_KHR_GEOMETRY_QUAD", "ANARI_KHR_GEOMETRY_SPHERE", "ANARI_KHR_GEOMETRY_TRIANGLE", + "ANARI_KHR_INSTANCE_TRANSFORM_ARRAY", "ANARI_KHR_MATERIAL_MATTE", "ANARI_KHR_RENDERER_AMBIENT_LIGHT", "ANARI_KHR_RENDERER_BACKGROUND_COLOR", @@ -465,7 +466,7 @@ static const void * ANARI_RENDERER_default_ambientColor_info(ANARIDataType param static const char *extension = "KHR_RENDERER_AMBIENT_LIGHT"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 15; + static const int32_t value = 16; return &value; } default: return nullptr; @@ -497,7 +498,7 @@ static const void * ANARI_RENDERER_default_ambientRadiance_info(ANARIDataType pa static const char *extension = "KHR_RENDERER_AMBIENT_LIGHT"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 15; + static const int32_t value = 16; return &value; } default: return nullptr; @@ -535,7 +536,7 @@ static const void * ANARI_RENDERER_default_background_info(ANARIDataType paramTy static const char *extension = "KHR_RENDERER_BACKGROUND_COLOR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 16; + static const int32_t value = 17; return &value; } default: return nullptr; @@ -563,6 +564,127 @@ static const void * ANARI_RENDERER_default_param_info(const char *paramName, ANA return nullptr; } } +static const void * ANARI_INSTANCE_transform_name_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_false; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "optional object name"; + return description; + } + case 7: // sourceExtension + if(infoType == ANARI_STRING) { + static const char *extension = "KHR_INSTANCE_TRANSFORM"; + return extension; + } else if(infoType == ANARI_INT32) { + static const int32_t value = 0; + return &value; + } + default: return nullptr; + } +} +static const void * ANARI_INSTANCE_transform_transform_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_false; + } else { + return nullptr; + } + case 1: // default + if(paramType == ANARI_FLOAT32_MAT4 && infoType == ANARI_FLOAT32_MAT4) { + static const float default_value[16] = {1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f}; + return default_value; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "transform applied to objects in the instance"; + return description; + } + case 7: // sourceExtension + if(infoType == ANARI_STRING) { + static const char *extension = "KHR_INSTANCE_TRANSFORM"; + return extension; + } else if(infoType == ANARI_INT32) { + static const int32_t value = 0; + return &value; + } + default: return nullptr; + } +} +static const void * ANARI_INSTANCE_transform_group_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_true; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "group object being instanced"; + return description; + } + case 7: // sourceExtension + if(infoType == ANARI_STRING) { + static const char *extension = "KHR_INSTANCE_TRANSFORM"; + return extension; + } else if(infoType == ANARI_INT32) { + static const int32_t value = 0; + return &value; + } + default: return nullptr; + } +} +static const void * ANARI_INSTANCE_transform_id_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { + (void)paramType; + switch(infoName) { + case 0: // required + if(infoType == ANARI_BOOL) { + return &anari_false; + } else { + return nullptr; + } + case 4: // description + { + static const char *description = "user id for instanceId channel"; + return description; + } + case 7: // sourceExtension + if(infoType == ANARI_STRING) { + static const char *extension = "KHR_FRAME_CHANNEL_INSTANCE_ID"; + return extension; + } else if(infoType == ANARI_INT32) { + static const int32_t value = 6; + return &value; + } + default: return nullptr; + } +} +static const void * ANARI_INSTANCE_transform_param_info(const char *paramName, ANARIDataType paramType, int infoName, ANARIDataType infoType) { + switch(param_hash(paramName)) { + case 42: + return ANARI_INSTANCE_transform_name_info(paramType, infoName, infoType); + case 66: + return ANARI_INSTANCE_transform_transform_info(paramType, infoName, infoType); + case 29: + return ANARI_INSTANCE_transform_group_info(paramType, infoName, infoType); + case 31: + return ANARI_INSTANCE_transform_id_info(paramType, infoName, infoType); + default: + return nullptr; + } +} static const void * ANARI_ARRAY1D_name_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { (void)paramType; switch(infoName) { @@ -1269,127 +1391,6 @@ static const void * ANARI_SURFACE_param_info(const char *paramName, ANARIDataTyp return nullptr; } } -static const void * ANARI_INSTANCE_transform_name_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { - (void)paramType; - switch(infoName) { - case 0: // required - if(infoType == ANARI_BOOL) { - return &anari_false; - } else { - return nullptr; - } - case 4: // description - { - static const char *description = "optional object name"; - return description; - } - case 7: // sourceExtension - if(infoType == ANARI_STRING) { - static const char *extension = "KHR_INSTANCE_TRANSFORM"; - return extension; - } else if(infoType == ANARI_INT32) { - static const int32_t value = 0; - return &value; - } - default: return nullptr; - } -} -static const void * ANARI_INSTANCE_transform_transform_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { - (void)paramType; - switch(infoName) { - case 0: // required - if(infoType == ANARI_BOOL) { - return &anari_false; - } else { - return nullptr; - } - case 1: // default - if(paramType == ANARI_FLOAT32_MAT4 && infoType == ANARI_FLOAT32_MAT4) { - static const float default_value[16] = {1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f}; - return default_value; - } else { - return nullptr; - } - case 4: // description - { - static const char *description = "transform applied to objects in the instance"; - return description; - } - case 7: // sourceExtension - if(infoType == ANARI_STRING) { - static const char *extension = "KHR_INSTANCE_TRANSFORM"; - return extension; - } else if(infoType == ANARI_INT32) { - static const int32_t value = 0; - return &value; - } - default: return nullptr; - } -} -static const void * ANARI_INSTANCE_transform_group_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { - (void)paramType; - switch(infoName) { - case 0: // required - if(infoType == ANARI_BOOL) { - return &anari_true; - } else { - return nullptr; - } - case 4: // description - { - static const char *description = "group object being instanced"; - return description; - } - case 7: // sourceExtension - if(infoType == ANARI_STRING) { - static const char *extension = "KHR_INSTANCE_TRANSFORM"; - return extension; - } else if(infoType == ANARI_INT32) { - static const int32_t value = 0; - return &value; - } - default: return nullptr; - } -} -static const void * ANARI_INSTANCE_transform_id_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { - (void)paramType; - switch(infoName) { - case 0: // required - if(infoType == ANARI_BOOL) { - return &anari_false; - } else { - return nullptr; - } - case 4: // description - { - static const char *description = "user id for instanceId channel"; - return description; - } - case 7: // sourceExtension - if(infoType == ANARI_STRING) { - static const char *extension = "KHR_FRAME_CHANNEL_INSTANCE_ID"; - return extension; - } else if(infoType == ANARI_INT32) { - static const int32_t value = 6; - return &value; - } - default: return nullptr; - } -} -static const void * ANARI_INSTANCE_transform_param_info(const char *paramName, ANARIDataType paramType, int infoName, ANARIDataType infoType) { - switch(param_hash(paramName)) { - case 42: - return ANARI_INSTANCE_transform_name_info(paramType, infoName, infoType); - case 66: - return ANARI_INSTANCE_transform_transform_info(paramType, infoName, infoType); - case 29: - return ANARI_INSTANCE_transform_group_info(paramType, infoName, infoType); - case 31: - return ANARI_INSTANCE_transform_id_info(paramType, infoName, infoType); - default: - return nullptr; - } -} static const void * ANARI_CAMERA_orthographic_name_info(ANARIDataType paramType, int infoName, ANARIDataType infoType) { (void)paramType; switch(infoName) { @@ -6223,7 +6224,7 @@ static const void * ANARI_MATERIAL_matte_name_info(ANARIDataType paramType, int static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 14; + static const int32_t value = 15; return &value; } default: return nullptr; @@ -6268,7 +6269,7 @@ static const void * ANARI_MATERIAL_matte_color_info(ANARIDataType paramType, int static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 14; + static const int32_t value = 15; return &value; } default: return nullptr; @@ -6307,7 +6308,7 @@ static const void * ANARI_MATERIAL_matte_opacity_info(ANARIDataType paramType, i static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 14; + static const int32_t value = 15; return &value; } default: return nullptr; @@ -6346,7 +6347,7 @@ static const void * ANARI_MATERIAL_matte_alphaMode_info(ANARIDataType paramType, static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 14; + static const int32_t value = 15; return &value; } default: return nullptr; @@ -6378,7 +6379,7 @@ static const void * ANARI_MATERIAL_matte_alphaCutoff_info(ANARIDataType paramTyp static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 14; + static const int32_t value = 15; return &value; } default: return nullptr; @@ -6419,7 +6420,7 @@ static const void * ANARI_SAMPLER_image1D_name_info(ANARIDataType paramType, int static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6451,7 +6452,7 @@ static const void * ANARI_SAMPLER_image1D_image_info(ANARIDataType paramType, in static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6490,7 +6491,7 @@ static const void * ANARI_SAMPLER_image1D_inAttribute_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6529,7 +6530,7 @@ static const void * ANARI_SAMPLER_image1D_filter_info(ANARIDataType paramType, i static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6568,7 +6569,7 @@ static const void * ANARI_SAMPLER_image1D_wrapMode1_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6600,7 +6601,7 @@ static const void * ANARI_SAMPLER_image1D_inTransform_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6632,7 +6633,7 @@ static const void * ANARI_SAMPLER_image1D_inOffset_info(ANARIDataType paramType, static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6664,7 +6665,7 @@ static const void * ANARI_SAMPLER_image1D_outTransform_info(ANARIDataType paramT static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6696,7 +6697,7 @@ static const void * ANARI_SAMPLER_image1D_outOffset_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 18; + static const int32_t value = 19; return &value; } default: return nullptr; @@ -6745,7 +6746,7 @@ static const void * ANARI_SAMPLER_image2D_name_info(ANARIDataType paramType, int static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6777,7 +6778,7 @@ static const void * ANARI_SAMPLER_image2D_image_info(ANARIDataType paramType, in static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6816,7 +6817,7 @@ static const void * ANARI_SAMPLER_image2D_inAttribute_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6855,7 +6856,7 @@ static const void * ANARI_SAMPLER_image2D_filter_info(ANARIDataType paramType, i static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6894,7 +6895,7 @@ static const void * ANARI_SAMPLER_image2D_wrapMode1_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6933,7 +6934,7 @@ static const void * ANARI_SAMPLER_image2D_wrapMode2_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6965,7 +6966,7 @@ static const void * ANARI_SAMPLER_image2D_inTransform_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -6997,7 +6998,7 @@ static const void * ANARI_SAMPLER_image2D_inOffset_info(ANARIDataType paramType, static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -7029,7 +7030,7 @@ static const void * ANARI_SAMPLER_image2D_outTransform_info(ANARIDataType paramT static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -7061,7 +7062,7 @@ static const void * ANARI_SAMPLER_image2D_outOffset_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 19; + static const int32_t value = 20; return &value; } default: return nullptr; @@ -7112,7 +7113,7 @@ static const void * ANARI_SAMPLER_image3D_name_info(ANARIDataType paramType, int static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7144,7 +7145,7 @@ static const void * ANARI_SAMPLER_image3D_image_info(ANARIDataType paramType, in static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7183,7 +7184,7 @@ static const void * ANARI_SAMPLER_image3D_inAttribute_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7222,7 +7223,7 @@ static const void * ANARI_SAMPLER_image3D_filter_info(ANARIDataType paramType, i static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7261,7 +7262,7 @@ static const void * ANARI_SAMPLER_image3D_wrapMode1_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7300,7 +7301,7 @@ static const void * ANARI_SAMPLER_image3D_wrapMode2_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7339,7 +7340,7 @@ static const void * ANARI_SAMPLER_image3D_wrapMode3_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7371,7 +7372,7 @@ static const void * ANARI_SAMPLER_image3D_inTransform_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7403,7 +7404,7 @@ static const void * ANARI_SAMPLER_image3D_inOffset_info(ANARIDataType paramType, static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7435,7 +7436,7 @@ static const void * ANARI_SAMPLER_image3D_outTransform_info(ANARIDataType paramT static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7467,7 +7468,7 @@ static const void * ANARI_SAMPLER_image3D_outOffset_info(ANARIDataType paramType static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 20; + static const int32_t value = 21; return &value; } default: return nullptr; @@ -7520,7 +7521,7 @@ static const void * ANARI_SAMPLER_primitive_name_info(ANARIDataType paramType, i static const char *extension = "KHR_SAMPLER_PRIMITIVE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 21; + static const int32_t value = 22; return &value; } default: return nullptr; @@ -7552,7 +7553,7 @@ static const void * ANARI_SAMPLER_primitive_array_info(ANARIDataType paramType, static const char *extension = "KHR_SAMPLER_PRIMITIVE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 21; + static const int32_t value = 22; return &value; } default: return nullptr; @@ -7584,7 +7585,7 @@ static const void * ANARI_SAMPLER_primitive_inOffset_info(ANARIDataType paramTyp static const char *extension = "KHR_SAMPLER_PRIMITIVE"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 21; + static const int32_t value = 22; return &value; } default: return nullptr; @@ -7621,7 +7622,7 @@ static const void * ANARI_SAMPLER_transform_name_info(ANARIDataType paramType, i static const char *extension = "KHR_SAMPLER_TRANSFORM"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 22; + static const int32_t value = 23; return &value; } default: return nullptr; @@ -7660,7 +7661,7 @@ static const void * ANARI_SAMPLER_transform_inAttribute_info(ANARIDataType param static const char *extension = "KHR_SAMPLER_TRANSFORM"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 22; + static const int32_t value = 23; return &value; } default: return nullptr; @@ -7692,7 +7693,7 @@ static const void * ANARI_SAMPLER_transform_outTransform_info(ANARIDataType para static const char *extension = "KHR_SAMPLER_TRANSFORM"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 22; + static const int32_t value = 23; return &value; } default: return nullptr; @@ -7724,7 +7725,7 @@ static const void * ANARI_SAMPLER_transform_outOffset_info(ANARIDataType paramTy static const char *extension = "KHR_SAMPLER_TRANSFORM"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 22; + static const int32_t value = 23; return &value; } default: return nullptr; @@ -7763,7 +7764,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_name_info(ANARIDataTyp static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 23; + static const int32_t value = 24; return &value; } default: return nullptr; @@ -7795,7 +7796,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_data_info(ANARIDataTyp static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 23; + static const int32_t value = 24; return &value; } default: return nullptr; @@ -7827,7 +7828,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_origin_info(ANARIDataT static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 23; + static const int32_t value = 24; return &value; } default: return nullptr; @@ -7859,7 +7860,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_spacing_info(ANARIData static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 23; + static const int32_t value = 24; return &value; } default: return nullptr; @@ -7898,7 +7899,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_filter_info(ANARIDataT static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 23; + static const int32_t value = 24; return &value; } default: return nullptr; @@ -7939,7 +7940,7 @@ static const void * ANARI_VOLUME_transferFunction1D_name_info(ANARIDataType para static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -7964,7 +7965,7 @@ static const void * ANARI_VOLUME_transferFunction1D_value_info(ANARIDataType par static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -7996,7 +7997,7 @@ static const void * ANARI_VOLUME_transferFunction1D_valueRange_info(ANARIDataTyp static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -8028,7 +8029,7 @@ static const void * ANARI_VOLUME_transferFunction1D_color_info(ANARIDataType par static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -8060,7 +8061,7 @@ static const void * ANARI_VOLUME_transferFunction1D_opacity_info(ANARIDataType p static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -8092,7 +8093,7 @@ static const void * ANARI_VOLUME_transferFunction1D_unitDistance_info(ANARIDataT static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int32_t value = 24; + static const int32_t value = 25; return &value; } default: return nullptr; @@ -8282,6 +8283,7 @@ static const void * ANARI_DEVICE_info(int infoName, ANARIDataType infoType) { "ANARI_KHR_GEOMETRY_QUAD", "ANARI_KHR_GEOMETRY_SPHERE", "ANARI_KHR_GEOMETRY_TRIANGLE", + "ANARI_KHR_INSTANCE_TRANSFORM_ARRAY", "ANARI_KHR_MATERIAL_MATTE", "ANARI_KHR_RENDERER_AMBIENT_LIGHT", "ANARI_KHR_RENDERER_BACKGROUND_COLOR", @@ -8344,6 +8346,7 @@ static const void * ANARI_RENDERER_default_info(int infoName, ANARIDataType info "ANARI_KHR_GEOMETRY_QUAD", "ANARI_KHR_GEOMETRY_SPHERE", "ANARI_KHR_GEOMETRY_TRIANGLE", + "ANARI_KHR_INSTANCE_TRANSFORM_ARRAY", "ANARI_KHR_MATERIAL_MATTE", "ANARI_KHR_RENDERER_AMBIENT_LIGHT", "ANARI_KHR_RENDERER_BACKGROUND_COLOR", @@ -8364,6 +8367,41 @@ static const void * ANARI_RENDERER_default_info(int infoName, ANARIDataType info default: return nullptr; } } +static const void * ANARI_INSTANCE_transform_info(int infoName, ANARIDataType infoType) { + switch(infoName) { + case 4: // description + { + static const char *description = "instance object"; + return description; + } + case 9: // parameter + if(infoType == ANARI_PARAMETER_LIST) { + static const ANARIParameter parameters[] = { + {"name", ANARI_STRING}, + {"transform", ANARI_FLOAT32_MAT4}, + {"transform", ANARI_ARRAY1D}, + {"group", ANARI_GROUP}, + {"id", ANARI_UINT32}, + {"id", ANARI_ARRAY1D}, + {0, ANARI_UNKNOWN} + }; + return parameters; + } else { + return nullptr; + } + case 7: // sourceExtension + if(infoType == ANARI_STRING) { + static const char *extension = "KHR_INSTANCE_TRANSFORM"; + return extension; + } else if(infoType == ANARI_INT32) { + static const int value = 0; + return &value; + } else { + return nullptr; + } + default: return nullptr; + } +} static const void * ANARI_ARRAY1D_info(int infoName, ANARIDataType infoType) { switch(infoName) { case 4: // description @@ -8539,39 +8577,6 @@ static const void * ANARI_SURFACE_info(int infoName, ANARIDataType infoType) { default: return nullptr; } } -static const void * ANARI_INSTANCE_transform_info(int infoName, ANARIDataType infoType) { - switch(infoName) { - case 4: // description - { - static const char *description = "instance object"; - return description; - } - case 9: // parameter - if(infoType == ANARI_PARAMETER_LIST) { - static const ANARIParameter parameters[] = { - {"name", ANARI_STRING}, - {"transform", ANARI_FLOAT32_MAT4}, - {"group", ANARI_GROUP}, - {"id", ANARI_UINT32}, - {0, ANARI_UNKNOWN} - }; - return parameters; - } else { - return nullptr; - } - case 7: // sourceExtension - if(infoType == ANARI_STRING) { - static const char *extension = "KHR_INSTANCE_TRANSFORM"; - return extension; - } else if(infoType == ANARI_INT32) { - static const int value = 0; - return &value; - } else { - return nullptr; - } - default: return nullptr; - } -} static const void * ANARI_CAMERA_orthographic_info(int infoName, ANARIDataType infoType) { switch(infoName) { case 4: // description @@ -9006,7 +9011,7 @@ static const void * ANARI_MATERIAL_matte_info(int infoName, ANARIDataType infoTy static const char *extension = "KHR_MATERIAL_MATTE"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 14; + static const int value = 15; return &value; } else { return nullptr; @@ -9044,7 +9049,7 @@ static const void * ANARI_SAMPLER_image1D_info(int infoName, ANARIDataType infoT static const char *extension = "KHR_SAMPLER_IMAGE1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 18; + static const int value = 19; return &value; } else { return nullptr; @@ -9083,7 +9088,7 @@ static const void * ANARI_SAMPLER_image2D_info(int infoName, ANARIDataType infoT static const char *extension = "KHR_SAMPLER_IMAGE2D"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 19; + static const int value = 20; return &value; } else { return nullptr; @@ -9123,7 +9128,7 @@ static const void * ANARI_SAMPLER_image3D_info(int infoName, ANARIDataType infoT static const char *extension = "KHR_SAMPLER_IMAGE3D"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 20; + static const int value = 21; return &value; } else { return nullptr; @@ -9155,7 +9160,7 @@ static const void * ANARI_SAMPLER_primitive_info(int infoName, ANARIDataType inf static const char *extension = "KHR_SAMPLER_PRIMITIVE"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 21; + static const int value = 22; return &value; } else { return nullptr; @@ -9188,7 +9193,7 @@ static const void * ANARI_SAMPLER_transform_info(int infoName, ANARIDataType inf static const char *extension = "KHR_SAMPLER_TRANSFORM"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 22; + static const int value = 23; return &value; } else { return nullptr; @@ -9222,7 +9227,7 @@ static const void * ANARI_SPATIAL_FIELD_structuredRegular_info(int infoName, ANA static const char *extension = "KHR_SPATIAL_FIELD_STRUCTURED_REGULAR"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 23; + static const int value = 24; return &value; } else { return nullptr; @@ -9261,7 +9266,7 @@ static const void * ANARI_VOLUME_transferFunction1D_info(int infoName, ANARIData static const char *extension = "KHR_VOLUME_TRANSFER_FUNCTION1D"; return extension; } else if(infoType == ANARI_INT32) { - static const int value = 24; + static const int value = 25; return &value; } else { return nullptr; diff --git a/src/helide/HelideDeviceQueries.h b/src/helide/HelideDeviceQueries.h index 1c35b045..9fe851c4 100644 --- a/src/helide/HelideDeviceQueries.h +++ b/src/helide/HelideDeviceQueries.h @@ -18,7 +18,7 @@ namespace helide { #define ANARI_INFO_parameter 9 #define ANARI_INFO_channel 10 #define ANARI_INFO_use 11 -const int extension_count = 25; +const int extension_count = 26; const char ** query_extensions(); const char ** query_object_types(ANARIDataType type); const ANARIParameter * query_params(ANARIDataType type, const char *subtype); diff --git a/src/helide/renderer/Renderer.cpp b/src/helide/renderer/Renderer.cpp index 984e43fa..83ddafc3 100644 --- a/src/helide/renderer/Renderer.cpp +++ b/src/helide/renderer/Renderer.cpp @@ -141,8 +141,8 @@ PixelSample Renderer::renderSample( if (hitGeometry || hitVolume) { retval.primId = hitVolume ? 0 : ray.primID; retval.objId = hitVolume ? vray.volume->id() : w.surfaceFromRay(ray)->id(); - retval.instId = hitVolume ? w.instanceFromRay(vray)->id() - : w.instanceFromRay(ray)->id(); + retval.instId = hitVolume ? w.instanceFromRay(vray)->id(vray.instArrayID) + : w.instanceFromRay(ray)->id(ray.instArrayID); } return retval; @@ -239,10 +239,10 @@ float4 Renderer::shadeRay(const float2 &screen, const auto n = linalg::mul(inst->xfmInvRot(), ray.Ng); const auto falloff = std::abs(linalg::dot(-ray.dir, linalg::normalize(n))); - const float4 sc = - surface->getSurfaceColor(ray, inst->getUniformAttributes()); - const float so = - surface->getSurfaceOpacity(ray, inst->getUniformAttributes()); + const float4 sc = surface->getSurfaceColor( + ray, inst->getUniformAttributes(ray.instArrayID)); + const float so = surface->getSurfaceOpacity( + ray, inst->getUniformAttributes(ray.instArrayID)); const float o = surface->adjustedAlpha(std::clamp(sc.w * so, 0.f, 1.f)); const float3 c = m_heatmap->valueAtLinear(o); const float3 fc = c * falloff; @@ -255,11 +255,11 @@ float4 Renderer::shadeRay(const float2 &screen, const Instance *inst = w.instanceFromRay(ray); const Surface *surface = w.surfaceFromRay(ray); - const auto n = linalg::mul(inst->xfmInvRot(), ray.Ng); + const auto n = linalg::mul(inst->xfmInvRot(ray.instArrayID), ray.Ng); const auto falloff = std::abs(linalg::dot(-ray.dir, linalg::normalize(n))); - const float4 c = - surface->getSurfaceColor(ray, inst->getUniformAttributes()); + const float4 c = surface->getSurfaceColor( + ray, inst->getUniformAttributes(ray.instArrayID)); const float3 sc = float3(c.x, c.y, c.z) * std::clamp(falloff, 0.f, 1.f); geometryColor = ((m_falloffBlendRatio * sc) diff --git a/src/helide/scene/Instance.cpp b/src/helide/scene/Instance.cpp index 3564c2b1..3c5fee88 100644 --- a/src/helide/scene/Instance.cpp +++ b/src/helide/scene/Instance.cpp @@ -5,10 +5,11 @@ namespace helide { -Instance::Instance(HelideGlobalState *s) : Object(ANARI_INSTANCE, s) +Instance::Instance(HelideGlobalState *s) + : Object(ANARI_INSTANCE, s), m_xfmArray(this), m_idArray(this) { m_embreeGeometry = - rtcNewGeometry(s->embreeDevice, RTC_GEOMETRY_TYPE_INSTANCE); + rtcNewGeometry(s->embreeDevice, RTC_GEOMETRY_TYPE_INSTANCE_ARRAY); } Instance::~Instance() @@ -18,10 +19,30 @@ Instance::~Instance() void Instance::commit() { + m_idArray = getParamObject("id"); + if (m_idArray && m_idArray->elementType() != ANARI_UINT32) { + reportMessage(ANARI_SEVERITY_WARNING, + "'id' array elements are %s, but need to be %s", + anari::toString(m_idArray->elementType()), + anari::toString(ANARI_UINT32)); + m_idArray = {}; + } m_id = getParam("id", ~0u); + + m_xfmArray = getParamObject("transform"); + if (m_xfmArray && m_xfmArray->elementType() != ANARI_FLOAT32_MAT4) { + reportMessage(ANARI_SEVERITY_WARNING, + "'transform' array elements are %s, but need to be %s", + anari::toString(m_idArray->elementType()), + anari::toString(ANARI_FLOAT32_MAT4)); + m_xfmArray = {}; + } m_xfm = getParam("transform", mat4(linalg::identity)); - m_xfmInvRot = linalg::inverse(extractRotation(m_xfm)); + m_group = getParamObject("group"); + if (!m_group) + reportMessage(ANARI_SEVERITY_WARNING, "missing 'group' on ANARIInstance"); + for (auto &a : m_uniformAttr) a.reset(); float4 attrV = DEFAULT_ATTRIBUTE_VALUE; @@ -35,33 +56,45 @@ void Instance::commit() m_uniformAttr[3] = attrV; if (getParam("color", ANARI_FLOAT32_VEC4, &attrV)) m_uniformAttr[4] = attrV; - if (!m_group) - reportMessage(ANARI_SEVERITY_WARNING, "missing 'group' on ANARIInstance"); -} -uint32_t Instance::id() const -{ - return m_id; + m_uniformAttrArrays.attribute0 = getParamObject("attribute0"); + m_uniformAttrArrays.attribute1 = getParamObject("attribute1"); + m_uniformAttrArrays.attribute2 = getParamObject("attribute2"); + m_uniformAttrArrays.attribute3 = getParamObject("attribute3"); + m_uniformAttrArrays.color = getParamObject("color"); } -const mat4 &Instance::xfm() const +uint32_t Instance::numTransforms() const { - return m_xfm; + return m_xfmArray ? uint32_t(m_xfmArray->totalSize()) : 1u; } -const mat3 &Instance::xfmInvRot() const +uint32_t Instance::id(uint32_t i) const { - return m_xfmInvRot; + return m_xfmArray && m_idArray ? *m_idArray->valueAt(i) : m_id; } -bool Instance::xfmIsIdentity() const +const mat4 &Instance::xfm(uint32_t i) const { - return xfm() == mat4(linalg::identity); + return m_xfmArray ? *m_xfmArray->valueAt(i) : m_xfm; } -const UniformAttributeSet &Instance::getUniformAttributes() const +UniformAttributeSet Instance::getUniformAttributes(uint32_t i) const { - return m_uniformAttr; + UniformAttributeSet retval = m_uniformAttr; + + if (m_uniformAttrArrays.attribute0) + retval[0] = m_uniformAttrArrays.attribute0->readAsAttributeValue(i); + if (m_uniformAttrArrays.attribute1) + retval[1] = m_uniformAttrArrays.attribute1->readAsAttributeValue(i); + if (m_uniformAttrArrays.attribute2) + retval[2] = m_uniformAttrArrays.attribute2->readAsAttributeValue(i); + if (m_uniformAttrArrays.attribute3) + retval[3] = m_uniformAttrArrays.attribute3->readAsAttributeValue(i); + if (m_uniformAttrArrays.color) + retval[4] = m_uniformAttrArrays.color->readAsAttributeValue(i); + + return retval; } const Group *Instance::group() const @@ -82,8 +115,15 @@ RTCGeometry Instance::embreeGeometry() const void Instance::embreeGeometryUpdate() { rtcSetGeometryInstancedScene(m_embreeGeometry, group()->embreeScene()); - rtcSetGeometryTransform( - m_embreeGeometry, 0, RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR, &m_xfm); + auto *xfms = rtcSetNewGeometryBuffer(m_embreeGeometry, + RTC_BUFFER_TYPE_TRANSFORM, + 0, + RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR, + sizeof(mat4), + this->numTransforms()); + std::memcpy(xfms, + m_xfmArray ? m_xfmArray->begin() : &m_xfm, + this->numTransforms() * sizeof(mat4)); rtcCommitGeometry(m_embreeGeometry); } diff --git a/src/helide/scene/Instance.h b/src/helide/scene/Instance.h index 4502a67f..73e42b49 100644 --- a/src/helide/scene/Instance.h +++ b/src/helide/scene/Instance.h @@ -14,13 +14,14 @@ struct Instance : public Object void commit() override; - uint32_t id() const; + uint32_t numTransforms() const; - const mat4 &xfm() const; - const mat3 &xfmInvRot() const; - bool xfmIsIdentity() const; + const mat4 &xfm(uint32_t i = 0) const; + mat3 xfmInvRot(uint32_t i = 0) const; - const UniformAttributeSet &getUniformAttributes() const; + uint32_t id(uint32_t i = 0) const; + + UniformAttributeSet getUniformAttributes(uint32_t i = 0) const; const Group *group() const; Group *group(); @@ -33,14 +34,34 @@ struct Instance : public Object bool isValid() const override; private: - uint32_t m_id{~0u}; mat4 m_xfm; - mat3 m_xfmInvRot; - helium::IntrusivePtr m_group; + helium::ChangeObserverPtr m_xfmArray; + + uint32_t m_id{~0u}; + helium::ChangeObserverPtr m_idArray; + UniformAttributeSet m_uniformAttr; + struct UniformAttributeArrays + { + helium::IntrusivePtr attribute0; + helium::IntrusivePtr attribute1; + helium::IntrusivePtr attribute2; + helium::IntrusivePtr attribute3; + helium::IntrusivePtr color; + } m_uniformAttrArrays; + + helium::IntrusivePtr m_group; + RTCGeometry m_embreeGeometry{nullptr}; }; +// Inlined definitions //////////////////////////////////////////////////////// + +inline mat3 Instance::xfmInvRot(uint32_t i) const +{ + return linalg::inverse(extractRotation(xfm(i))); +} + } // namespace helide HELIDE_ANARI_TYPEFOR_SPECIALIZATION(helide::Instance *, ANARI_INSTANCE); diff --git a/src/helium/array/Array1D.h b/src/helium/array/Array1D.h index 91b7a773..03709369 100644 --- a/src/helium/array/Array1D.h +++ b/src/helium/array/Array1D.h @@ -33,6 +33,9 @@ struct Array1D : public Array size_t size() const; + template + const T *valueAt(size_t i) const; + anari::math::float4 readAsAttributeValue( int32_t i, WrapMode wrap = WrapMode::DEFAULT) const; template @@ -66,6 +69,12 @@ inline const T *Array1D::endAs() const return dataAs() + m_end; } +template +inline const T *Array1D::valueAt(size_t i) const +{ + return &beginAs()[i]; +} + template inline T Array1D::valueAtLinear(float in) const { From 3c8d46aa5606ad61ae41c2eaab94f22f5670bff9 Mon Sep 17 00:00:00 2001 From: Jefferson Amstutz Date: Fri, 18 Oct 2024 17:50:51 -0500 Subject: [PATCH 4/4] fix build error --- src/helide/external/embree/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helide/external/embree/CMakeLists.txt b/src/helide/external/embree/CMakeLists.txt index 7ff50322..694020cf 100644 --- a/src/helide/external/embree/CMakeLists.txt +++ b/src/helide/external/embree/CMakeLists.txt @@ -23,13 +23,13 @@ else() option(EMBREE_ISA_SSE2 "" OFF) endif() option(EMBREE_ISPC_SUPPORT "" OFF) -option(EMBREE_MAX_INSTANCE_LEVEL_COUNT "" 1) option(EMBREE_STATIC_LIB "" ON) option(EMBREE_STAT_COUNTERS "" OFF) option(EMBREE_SYCL_SUPPORT "" OFF) option(EMBREE_TUTORIALS "" OFF) option(EMBREE_TUTORIALS_GLFW "" OFF) set(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE STRING "" FORCE) +set(EMBREE_MAX_INSTANCE_LEVEL_COUNT "1" CACHE STRING "" FORCE) anari_sdk_fetch_project( NAME anari_helide_embree