Commit 491ade49 by Nicolas Capens Committed by Nicolas Capens

Explicitly initialize VkSpecializationInfo fields

vk::allocate() zero-initializes its memory, which was nulling the VkSpecializationInfo::pMapEntries field in case the mapEntryCount is 0. We'll be changing vk::allocate() to not zero-initialize, to catch cases where applications might incorrectly be relying on it, with MemorySanitizer. So we have to also not be relying on it. Bug: b/140991626 Change-Id: I5917c902c0af27985556340dfc1dbae79010a125 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/54468 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent c1e4abc1
...@@ -21,12 +21,15 @@ SpecializationInfo::SpecializationInfo(const VkSpecializationInfo *specializatio ...@@ -21,12 +21,15 @@ SpecializationInfo::SpecializationInfo(const VkSpecializationInfo *specializatio
{ {
if(specializationInfo) if(specializationInfo)
{ {
auto ptr = reinterpret_cast<VkSpecializationInfo *>( auto *ptr = reinterpret_cast<VkSpecializationInfo *>(
allocate(sizeof(VkSpecializationInfo), REQUIRED_MEMORY_ALIGNMENT, DEVICE_MEMORY)); allocate(sizeof(VkSpecializationInfo), REQUIRED_MEMORY_ALIGNMENT, DEVICE_MEMORY));
info = std::shared_ptr<VkSpecializationInfo>(ptr, Deleter()); info = std::shared_ptr<VkSpecializationInfo>(ptr, Deleter());
info->mapEntryCount = specializationInfo->mapEntryCount; info->mapEntryCount = specializationInfo->mapEntryCount;
info->pMapEntries = nullptr;
info->dataSize = specializationInfo->dataSize;
info->pData = nullptr;
if(specializationInfo->mapEntryCount > 0) if(specializationInfo->mapEntryCount > 0)
{ {
size_t entriesSize = specializationInfo->mapEntryCount * sizeof(VkSpecializationMapEntry); size_t entriesSize = specializationInfo->mapEntryCount * sizeof(VkSpecializationMapEntry);
...@@ -36,17 +39,12 @@ SpecializationInfo::SpecializationInfo(const VkSpecializationInfo *specializatio ...@@ -36,17 +39,12 @@ SpecializationInfo::SpecializationInfo(const VkSpecializationInfo *specializatio
info->pMapEntries = mapEntries; info->pMapEntries = mapEntries;
} }
info->dataSize = specializationInfo->dataSize;
if(specializationInfo->dataSize > 0) if(specializationInfo->dataSize > 0)
{ {
void *data = allocate(specializationInfo->dataSize, REQUIRED_MEMORY_ALIGNMENT, DEVICE_MEMORY); void *data = allocate(specializationInfo->dataSize, REQUIRED_MEMORY_ALIGNMENT, DEVICE_MEMORY);
memcpy(data, specializationInfo->pData, specializationInfo->dataSize); memcpy(data, specializationInfo->pData, specializationInfo->dataSize);
info->pData = data; info->pData = data;
} }
else
{
info->pData = nullptr;
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment