vk: naomi2 crash when lightModel is null
fixes crash at end of tutorial in kingrt66
This commit is contained in:
parent
221060cc70
commit
62522e4eb3
|
@ -143,17 +143,20 @@ protected:
|
|||
|
||||
vk::DeviceSize packNaomi2Lights(BufferPacker& packer)
|
||||
{
|
||||
constexpr static N2LightModel noLight{};
|
||||
vk::DeviceSize offset = packer.addUniform(&noLight, sizeof(noLight));
|
||||
|
||||
size_t n2LightSize = sizeof(N2LightModel) + align(sizeof(N2LightModel), GetContext()->GetUniformBufferAlignment());
|
||||
if (n2LightSize == sizeof(N2LightModel))
|
||||
return packer.addUniform(pvrrc.lightModels.head(), pvrrc.lightModels.bytes());
|
||||
|
||||
vk::DeviceSize offset = (vk::DeviceSize)-1;
|
||||
for (const N2LightModel& model : pvrrc.lightModels)
|
||||
{
|
||||
vk::DeviceSize o = packer.addUniform(&model, sizeof(N2LightModel));
|
||||
if (offset == (vk::DeviceSize)-1)
|
||||
offset = o;
|
||||
packer.addUniform(pvrrc.lightModels.head(), pvrrc.lightModels.bytes());
|
||||
}
|
||||
else
|
||||
{
|
||||
for (const N2LightModel& model : pvrrc.lightModels)
|
||||
packer.addUniform(&model, sizeof(N2LightModel));
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
|
|
@ -186,14 +186,14 @@ public:
|
|||
uniBufferInfo = vk::DescriptorBufferInfo{ buffer, uniformOffset + polyNumber * size, sizeof(N2VertexShaderUniforms) };
|
||||
writeDescriptorSets.emplace_back(perPolyDescSet, 2, 0, 1, vk::DescriptorType::eUniformBuffer, nullptr, &uniBufferInfo, nullptr);
|
||||
|
||||
if (poly.lightModel != nullptr)
|
||||
{
|
||||
size = sizeof(N2LightModel) + align(sizeof(N2LightModel), uniformAlignment);
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset + (poly.lightModel - pvrrc.lightModels.head()) * size, sizeof(N2LightModel) };
|
||||
// light at index 0 is no light
|
||||
if (poly.lightModel != nullptr)
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset + (poly.lightModel - pvrrc.lightModels.head() + 1) * size, sizeof(N2LightModel) };
|
||||
else
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset, sizeof(N2LightModel) };
|
||||
writeDescriptorSets.emplace_back(perPolyDescSet, 3, 0, 1, vk::DescriptorType::eUniformBuffer, nullptr, &lightBufferInfo, nullptr);
|
||||
}
|
||||
// TODO no light
|
||||
}
|
||||
|
||||
getContext()->GetDevice().updateDescriptorSets(writeDescriptorSets, nullptr);
|
||||
perPolyDescSets[&poly] = perPolyDescSet;
|
||||
|
|
|
@ -103,14 +103,14 @@ public:
|
|||
uniBufferInfo = vk::DescriptorBufferInfo{ buffer, uniformOffset + polyNumber * size, sizeof(N2VertexShaderUniforms) };
|
||||
writeDescriptorSets.emplace_back(perPolyDescSet, 2, 0, 1, vk::DescriptorType::eUniformBuffer, nullptr, &uniBufferInfo, nullptr);
|
||||
|
||||
if (poly.lightModel != nullptr)
|
||||
{
|
||||
size = sizeof(N2LightModel) + align(sizeof(N2LightModel), uniformAlignment);
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset + (poly.lightModel - pvrrc.lightModels.head()) * size, sizeof(N2LightModel) };
|
||||
// light at index 0 is no light
|
||||
if (poly.lightModel != nullptr)
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset + (poly.lightModel - pvrrc.lightModels.head() + 1) * size, sizeof(N2LightModel) };
|
||||
else
|
||||
lightBufferInfo = vk::DescriptorBufferInfo{ buffer, lightOffset, sizeof(N2LightModel) };
|
||||
writeDescriptorSets.emplace_back(perPolyDescSet, 3, 0, 1, vk::DescriptorType::eUniformBuffer, nullptr, &lightBufferInfo, nullptr);
|
||||
}
|
||||
// TODO no light
|
||||
}
|
||||
|
||||
getContext()->GetDevice().updateDescriptorSets(writeDescriptorSets, nullptr);
|
||||
perPolyDescSets[&poly] = perPolyDescSet;
|
||||
|
|
Loading…
Reference in New Issue