Fix heap corruption for empty descriptor pools

Bug: b/229992990
Change-Id: I69ab5e80fb5a5c7b38701e1bb665fd934aa2ccd5
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/65328
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Ari Suonpää <ari.suonpaa@siru.fi>
Commit-Queue: Ari Suonpää <ari.suonpaa@siru.fi>
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkDescriptorSet.cpp b/src/Vulkan/VkDescriptorSet.cpp
index 65f37ac..d081567 100644
--- a/src/Vulkan/VkDescriptorSet.cpp
+++ b/src/Vulkan/VkDescriptorSet.cpp
@@ -42,7 +42,7 @@
 				VkDescriptorType type = layout->getDescriptorType(i, j);
 				uint32_t descriptorCount = layout->getDescriptorCount(i, j);
 				uint32_t descriptorSize = layout->getDescriptorSize(i, j);
-				uint8_t *descriptorMemory = descriptorSet->data + layout->getBindingOffset(i, j);
+				uint8_t *descriptorMemory = descriptorSet->GetDataAddress() + layout->getBindingOffset(i, j);
 
 				for(uint32_t k = 0; k < descriptorCount; k++)
 				{
@@ -88,4 +88,10 @@
 	ParseDescriptors(descriptorSets, layout, device, PREPARE_FOR_SAMPLING);
 }
 
+uint8_t *DescriptorSet::GetDataAddress()
+{
+	static_assert(sizeof(DescriptorSetHeader) == sizeof(DescriptorSet));
+	return reinterpret_cast<uint8_t *>(this) + sizeof(DescriptorSetHeader);
+}
+
 }  // namespace vk
\ No newline at end of file