@@ -61,9 +61,13 @@ struct SContext final
6161 using frontend_emitter_t = frontend_ir_t ::typed_pointer_type<const frontend_ir_t ::CMul>;
6262 frontend_material_t genMaterial (const CElementBSDF* bsdf, system::ISystem* debugFileWriter);
6363 frontend_emitter_t genEmitter (const CElementEmitter* emitter, system::ISystem* debugFileWriter);
64- frontend_ir_t ::SParameter getProfile (const CElementEmissionProfile* profile);
6564 //
6665 void writeDot3File (system::ISystem* system, const system::path& filepath, frontend_ir_t ::SDotPrinter& printer);
66+ //
67+ hlsl::float32_t2x3 getParameters (const std::span<frontend_ir_t ::SParameter> out, const CElementTexture::FloatOrTexture& src);
68+ hlsl::float32_t2x3 getParameters (const std::span<frontend_ir_t ::SParameter,3 > out, const CElementTexture::SpectrumOrTexture& src);
69+ frontend_ir_t ::SParameter getTexture (const CElementTexture* tex, hlsl::float32_t2x3* outUvTransform);
70+ frontend_ir_t ::SParameter genProfile (const CElementEmissionProfile* profile);
6771
6872 //
6973 core::unordered_map<const CElementShape*,CMitsubaMetadata::SGeometryCollectionMetaPair> shapeCache;
@@ -79,61 +83,10 @@ struct SContext final
7983 using tex_ass_type = std::tuple<core::smart_refctd_ptr<asset::ICPUImageView>,core::smart_refctd_ptr<asset::ICPUSampler>>;
8084 //image, scale
8185 core::map<core::smart_refctd_ptr<asset::ICPUImage>,float> derivMapCache;
82-
83-
84- static auto computeSamplerParameters(const CElementTexture::Bitmap& bitmap)
85- {
86- asset::ICPUSampler::SParams params;
87- auto getWrapMode = [](CElementTexture::Bitmap::WRAP_MODE mode)
88- {
89- switch (mode)
90- {
91- case CElementTexture::Bitmap::WRAP_MODE::CLAMP:
92- return asset::ISampler::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE;
93- break;
94- case CElementTexture::Bitmap::WRAP_MODE::MIRROR:
95- return asset::ISampler::E_TEXTURE_CLAMP::ETC_MIRROR;
96- break;
97- case CElementTexture::Bitmap::WRAP_MODE::ONE:
98- _NBL_DEBUG_BREAK_IF(true); // TODO : replace whole texture?
99- break;
100- case CElementTexture::Bitmap::WRAP_MODE::ZERO:
101- _NBL_DEBUG_BREAK_IF(true); // TODO : replace whole texture?
102- break;
103- default:
104- break;
105- }
106- return asset::ISampler::E_TEXTURE_CLAMP::ETC_REPEAT;
107- };
108- params.TextureWrapU = getWrapMode(bitmap.wrapModeU);
109- params.TextureWrapV = getWrapMode(bitmap.wrapModeV);
110- params.TextureWrapW = asset::ISampler::E_TEXTURE_CLAMP::ETC_REPEAT;
111- params.BorderColor = asset::ISampler::ETBC_FLOAT_OPAQUE_BLACK;
112- switch (bitmap.filterType)
113- {
114- case CElementTexture::Bitmap::FILTER_TYPE::EWA:
115- [[fallthrough]]; // we dont support this fancy stuff
116- case CElementTexture::Bitmap::FILTER_TYPE::TRILINEAR:
117- params.MinFilter = asset::ISampler::ETF_LINEAR;
118- params.MaxFilter = asset::ISampler::ETF_LINEAR;
119- params.MipmapMode = asset::ISampler::ESMM_LINEAR;
120- break;
121- default:
122- params.MinFilter = asset::ISampler::ETF_NEAREST;
123- params.MaxFilter = asset::ISampler::ETF_NEAREST;
124- params.MipmapMode = asset::ISampler::ESMM_NEAREST;
125- break;
126- }
127- params.AnisotropicFilter = core::max(hlsl::findMSB<uint32_t>(bitmap.maxAnisotropy),1u);
128- params.CompareEnable = false;
129- params.CompareFunc = asset::ISampler::ECO_NEVER;
130- params.LodBias = 0.f;
131- params.MaxLod = 10000.f;
132- params.MinLod = 0.f;
133- return params;
134- }
13586#endif
13687 core::smart_refctd_ptr<frontend_ir_t > frontIR;
88+ // common frontend nodes
89+ frontend_ir_t ::typed_pointer_type<const frontend_ir_t ::CDeltaTransmission> deltaTransmission;
13790 // Common Debug Names
13891 enum class ECommonDebug : uint16_t
13992 {
0 commit comments