Skip to content

Commit c36a4da

Browse files
make mitsuba loader use BaseInstance instead of push constants for the material stream offset.
1 parent e228008 commit c36a4da

File tree

2 files changed

+11
-91
lines changed

2 files changed

+11
-91
lines changed

examples_tests/22.RaytracedAO/raytraceCommon.glsl

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -156,73 +156,4 @@ void storeAccumulation(in vec3 color, in ivec2 coord)
156156
#endif
157157

158158

159-
#endif
160-
161-
/*
162-
///
163-
instr_stream_t getEvalStream(in MC_precomputed_t precomp)
164-
{
165-
instr_stream_t stream;
166-
if (precomp.frontface)
167-
{
168-
stream.offset = InstData.data[InstanceIndex].front_instr_offset;
169-
stream.count = InstData.data[InstanceIndex].front_rem_pdf_count;
170-
}
171-
else
172-
{
173-
stream.offset = InstData.data[InstanceIndex].back_instr_offset;
174-
stream.count = InstData.data[InstanceIndex].back_rem_pdf_count;
175-
}
176-
return stream;
177-
}
178-
//rem'n'pdf and eval use the same instruction stream
179-
instr_stream_t getRemAndPdfStream(in MC_precomputed_t precomp)
180-
{
181-
return getEvalStream(precomp);
182-
}
183-
instr_stream_t getGenChoiceStream(in MC_precomputed_t precomp)
184-
{
185-
instr_stream_t stream;
186-
if (precomp.frontface)
187-
{
188-
stream.offset = InstData.data[InstanceIndex].front_instr_offset + InstData.data[InstanceIndex].front_rem_pdf_count;
189-
stream.count = InstData.data[InstanceIndex].front_genchoice_count;
190-
}
191-
else
192-
{
193-
stream.offset = InstData.data[InstanceIndex].back_instr_offset + InstData.data[InstanceIndex].back_rem_pdf_count;
194-
stream.count = InstData.data[InstanceIndex].back_genchoice_count;
195-
}
196-
return stream;
197-
}
198-
instr_stream_t getTexPrefetchStream(in MC_precomputed_t precomp)
199-
{
200-
instr_stream_t stream;
201-
if (precomp.frontface)
202-
{
203-
stream.offset = InstData.data[InstanceIndex].front_prefetch_offset;
204-
stream.count = InstData.data[InstanceIndex].front_prefetch_count;
205-
}
206-
else
207-
{
208-
stream.offset = InstData.data[InstanceIndex].back_prefetch_offset;
209-
stream.count = InstData.data[InstanceIndex].back_prefetch_count;
210-
}
211-
return stream;
212-
}
213-
instr_stream_t getNormalPrecompStream(in MC_precomputed_t precomp)
214-
{
215-
instr_stream_t stream;
216-
if (precomp.frontface)
217-
{
218-
stream.offset = InstData.data[InstanceIndex].front_instr_offset + InstData.data[InstanceIndex].front_rem_pdf_count + InstData.data[InstanceIndex].front_genchoice_count;
219-
stream.count = InstData.data[InstanceIndex].front_nprecomp_count;
220-
}
221-
else
222-
{
223-
stream.offset = InstData.data[InstanceIndex].back_instr_offset + InstData.data[InstanceIndex].back_rem_pdf_count + InstData.data[InstanceIndex].back_genchoice_count;
224-
stream.count = InstData.data[InstanceIndex].back_nprecomp_count;
225-
}
226-
return stream;
227-
}
228-
*/
159+
#endif

src/nbl/ext/MitsubaLoader/CMitsubaLoader.cpp

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ layout (location = 3) out vec2 UV;
4242
#include <nbl/builtin/glsl/utils/common.glsl>
4343
#include <nbl/builtin/glsl/utils/transform.glsl>
4444
45-
layout (push_constant) uniform Block {
46-
uint instDataOffset;
47-
} PC;
48-
4945
#ifndef _NBL_VERT_SET1_BINDINGS_DEFINED_
5046
#define _NBL_VERT_SET1_BINDINGS_DEFINED_
5147
layout (set = 1, binding = 0, row_major, std140) uniform UBO {
@@ -61,15 +57,14 @@ layout (set = 0, binding = 5, row_major, std430) readonly restrict buffer InstDa
6157
6258
void main()
6359
{
64-
uint instIx = PC.instDataOffset+gl_InstanceIndex;
65-
mat4x3 tform = InstData.data[instIx].tform;
60+
mat4x3 tform = InstData.data[gl_InstanceIndex].tform;
6661
mat4 mvp = nbl_glsl_pseudoMul4x4with4x3(CamData.params.MVP, tform);
6762
gl_Position = nbl_glsl_pseudoMul4x4with3x1(mvp, vPosition);
6863
WorldPos = nbl_glsl_pseudoMul3x4with3x1(tform, vPosition);
69-
mat3 normalMat = mat3(InstData.data[instIx].normalMatrixRow0,InstData.data[instIx].normalMatrixRow1,InstData.data[instIx].normalMatrixRow2);
64+
mat3 normalMat = mat3(InstData.data[gl_InstanceIndex].normalMatrixRow0,InstData.data[gl_InstanceIndex].normalMatrixRow1,InstData.data[gl_InstanceIndex].normalMatrixRow2);
7065
Normal = transpose(normalMat)*normalize(vNormal);
7166
UV = vUV;
72-
InstanceIndex = instIx;
67+
InstanceIndex = gl_InstanceIndex;
7368
}
7469
7570
)";
@@ -547,11 +542,6 @@ static core::smart_refctd_ptr<asset::ICPUImage> createBlendWeightImage(const ass
547542

548543
core::smart_refctd_ptr<asset::ICPUPipelineLayout> CMitsubaLoader::createPipelineLayout(asset::IAssetManager* _manager, asset::ICPUVirtualTexture* _vt)
549544
{
550-
SPushConstantRange pcrng;
551-
pcrng.offset = 0u;
552-
pcrng.size = sizeof(uint32_t);//instance data offset
553-
pcrng.stageFlags = static_cast<asset::ISpecializedShader::E_SHADER_STAGE>(asset::ISpecializedShader::ESS_FRAGMENT | asset::ISpecializedShader::ESS_VERTEX);
554-
555545
core::smart_refctd_ptr<ICPUDescriptorSetLayout> ds0layout; // needs to builtin and cached statically
556546
{
557547
auto sizes = _vt->getDSlayoutBindings(nullptr, nullptr);
@@ -594,7 +584,7 @@ core::smart_refctd_ptr<asset::ICPUPipelineLayout> CMitsubaLoader::createPipeline
594584
}
595585
auto ds1layout = getBuiltinAsset<ICPUDescriptorSetLayout, IAsset::ET_DESCRIPTOR_SET_LAYOUT>("nbl/builtin/descriptor_set_layout/basic_view_parameters", _manager);
596586

597-
return core::make_smart_refctd_ptr<asset::ICPUPipelineLayout>(&pcrng, &pcrng+1, std::move(ds0layout), std::move(ds1layout), nullptr, nullptr);
587+
return core::make_smart_refctd_ptr<asset::ICPUPipelineLayout>(nullptr,nullptr, std::move(ds0layout), std::move(ds1layout), nullptr, nullptr);
598588
}
599589

600590
CMitsubaLoader::CMitsubaLoader(asset::IAssetManager* _manager, io::IFileSystem* _fs) : asset::IAssetLoader(), m_manager(_manager), m_filesystem(_fs)
@@ -1548,7 +1538,7 @@ struct nbl_glsl_ext_Mitsuba_Loader_instance_data_t
15481538
};
15491539

15501540

1551-
// Also sets instance data buffer offset into meshbuffers' push constants
1541+
// Also sets instance data buffer offset into meshbuffers' base instance
15521542
template<typename Iter>
15531543
inline core::smart_refctd_ptr<asset::ICPUDescriptorSet> CMitsubaLoader::createDS0(const SContext& _ctx, asset::ICPUPipelineLayout* _layout, const asset::material_compiler::CMaterialCompilerGLSLBackendCommon::result_t& _compResult, Iter meshBegin, Iter meshEnd)
15541544
{
@@ -1621,7 +1611,11 @@ inline core::smart_refctd_ptr<asset::ICPUDescriptorSet> CMitsubaLoader::createDS
16211611
auto* meta = static_cast<const IMeshMetadata*>(mesh->getMetadata());
16221612

16231613
core::vectorSIMDf emissive;
1624-
uint32_t instDataOffset = instanceData.size();
1614+
for (uint32_t i = 0u; i < mesh->getMeshBufferCount(); ++i)
1615+
{
1616+
auto* mb = mesh->getMeshBuffer(i);
1617+
mb->setBaseInstance(instanceData.size());
1618+
}
16251619
for (const auto& inst : meta->getInstances()) {
16261620
// @Crisspl IIRC lights in mitsuba have "sides" , TODO
16271621
emissive = inst.emitter.type==CElementEmitter::AREA ? inst.emitter.area.radiance : core::vectorSIMDf(0.f);
@@ -1662,11 +1656,6 @@ inline core::smart_refctd_ptr<asset::ICPUDescriptorSet> CMitsubaLoader::createDS
16621656

16631657
instanceData.push_back(instData);
16641658
}
1665-
for (uint32_t i = 0u; i < mesh->getMeshBufferCount(); ++i)
1666-
{
1667-
auto* mb = mesh->getMeshBuffer(i);
1668-
reinterpret_cast<uint32_t*>(mb->getPushConstantsDataPtr())[0] = instDataOffset; // use base instance!
1669-
}
16701659
}
16711660
#ifdef DEBUG_MITSUBA_LOADER
16721661
ofile.close();

0 commit comments

Comments
 (0)