Merge changes I10d8c713,Ib474fd28
* changes:
Update SPIR-V Tools to 82d91083c
Squashed 'third_party/SPIRV-Tools/' changes from 7014be600c..82d91083cb
diff --git a/src/Pipeline/SpirvShaderGLSLstd450.cpp b/src/Pipeline/SpirvShaderGLSLstd450.cpp
index 75bcc06..fd09c9e 100644
--- a/src/Pipeline/SpirvShaderGLSLstd450.cpp
+++ b/src/Pipeline/SpirvShaderGLSLstd450.cpp
@@ -1023,18 +1023,28 @@
SIMD::Float y;
SIMD::Float rhw;
+ bool multisample = (state->getMultiSampleCount() > 1);
switch(type)
{
case Centroid:
- x = interpolationData.xCentroid;
- y = interpolationData.yCentroid;
- rhw = interpolationData.rhwCentroid;
+ if(multisample)
+ {
+ x = interpolationData.xCentroid;
+ y = interpolationData.yCentroid;
+ rhw = interpolationData.rhwCentroid;
+ }
+ else
+ {
+ x = interpolationData.x;
+ y = interpolationData.y;
+ rhw = interpolationData.rhw;
+ }
break;
case AtSample:
x = SIMD::Float(0.0f);
y = SIMD::Float(0.0f);
- if(state->getMultiSampleCount() > 1)
+ if(multisample)
{
static constexpr int NUM_SAMPLES = 4;
ASSERT(state->getMultiSampleCount() == NUM_SAMPLES);
diff --git a/src/System/Memory.cpp b/src/System/Memory.cpp
index 0333afb..3565914 100644
--- a/src/System/Memory.cpp
+++ b/src/System/Memory.cpp
@@ -98,8 +98,7 @@
return aligned;
}
-// TODO(b/140991626): Rename to allocate().
-void *allocateUninitialized(size_t bytes, size_t alignment)
+void *allocate(size_t bytes, size_t alignment)
{
return allocate(bytes, alignment, false);
}
diff --git a/src/System/Memory.hpp b/src/System/Memory.hpp
index 9a12a4f..99e4374 100644
--- a/src/System/Memory.hpp
+++ b/src/System/Memory.hpp
@@ -22,9 +22,9 @@
size_t memoryPageSize();
-void *allocateUninitialized(size_t bytes, size_t alignment = 16); // Never initialized.
-void *allocateZero(size_t bytes, size_t alignment = 16); // Always initialized to zero.
-void *allocateZeroOrPoison(size_t bytes, size_t alignment = 16); // Initialized to zero, except in MemorySanitizer builds.
+void *allocate(size_t bytes, size_t alignment = 16); // Never initialized.
+void *allocateZero(size_t bytes, size_t alignment = 16); // Always initialized to zero.
+void *allocateZeroOrPoison(size_t bytes, size_t alignment = 16); // Initialized to zero, except in MemorySanitizer builds.
void freeMemory(void *memory);
diff --git a/src/Vulkan/BUILD.gn b/src/Vulkan/BUILD.gn
index 1bb14a8..a8afc99 100644
--- a/src/Vulkan/BUILD.gn
+++ b/src/Vulkan/BUILD.gn
@@ -57,6 +57,7 @@
defines += [
"SWIFTSHADER_ENABLE_ASTC", # TODO(b/150130101)
"SWIFTSHADER_LEGACY_PRECISION=true", # TODO(chromium:1299047)
+ "SWIFTSHADER_ZERO_INITIALIZE_DEVICE_MEMORY",
]
}
diff --git a/src/Vulkan/VkMemory.cpp b/src/Vulkan/VkMemory.cpp
index 2789bdf..c522e5f 100644
--- a/src/Vulkan/VkMemory.cpp
+++ b/src/Vulkan/VkMemory.cpp
@@ -21,12 +21,10 @@
void *allocateDeviceMemory(size_t bytes, size_t alignment)
{
- // TODO(b/140991626): Use allocateZeroOrPoison() instead of allocateZero() to detect MemorySanitizer errors.
#if defined(SWIFTSHADER_ZERO_INITIALIZE_DEVICE_MEMORY)
- return sw::allocateZero(bytes, alignment);
-#else
- // TODO(b/140991626): Use allocateUninitialized() instead of allocateZeroOrPoison() to improve startup peformance.
return sw::allocateZeroOrPoison(bytes, alignment);
+#else
+ return sw::allocate(bytes, alignment);
#endif
}
@@ -43,7 +41,7 @@
}
else
{
- // TODO(b/140991626): Use allocateUninitialized() instead of allocateZeroOrPoison() to improve startup peformance.
+ // TODO(b/140991626): Use allocate() instead of allocateZeroOrPoison() to improve startup performance.
return sw::allocateZeroOrPoison(bytes, alignment);
}
}
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index b0a713d..2f4a7f2 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -1856,8 +1856,6 @@
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D32_SFLOAT: // Note: either VK_FORMAT_D32_SFLOAT or VK_FORMAT_X8_D24_UNORM_PACK32 must be supported
case VK_FORMAT_D32_SFLOAT_S8_UINT: // Note: either VK_FORMAT_D24_UNORM_S8_UINT or VK_FORMAT_D32_SFLOAT_S8_UINT must be supported
- pFormatProperties->linearTilingFeatures |=
- VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR;
pFormatProperties->optimalTilingFeatures |=
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR;
break;
@@ -1999,19 +1997,19 @@
if(pFormatProperties->optimalTilingFeatures)
{
+ // "Formats that are required to support VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must also support
+ // VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and VK_FORMAT_FEATURE_TRANSFER_DST_BIT."
+
pFormatProperties->linearTilingFeatures |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
if(!format.isCompressed())
{
- if(pFormatProperties->optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
- {
- pFormatProperties->linearTilingFeatures |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
- }
- if(pFormatProperties->optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
- {
- pFormatProperties->linearTilingFeatures |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
- }
+ VkFormatFeatureFlagBits2KHR transferableFeatureBits = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT |
+ VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR;
+
+ pFormatProperties->linearTilingFeatures |= (pFormatProperties->optimalTilingFeatures & transferableFeatureBits);
}
}
}
diff --git a/src/Vulkan/VkSpecializationInfo.cpp b/src/Vulkan/VkSpecializationInfo.cpp
index ff8cf8b..ec0ce3f 100644
--- a/src/Vulkan/VkSpecializationInfo.cpp
+++ b/src/Vulkan/VkSpecializationInfo.cpp
@@ -26,12 +26,12 @@
{
info.mapEntryCount = specializationInfo->mapEntryCount;
size_t entriesSize = specializationInfo->mapEntryCount * sizeof(VkSpecializationMapEntry);
- void *mapEntries = sw::allocateUninitialized(entriesSize);
+ void *mapEntries = sw::allocate(entriesSize);
memcpy(mapEntries, specializationInfo->pMapEntries, entriesSize);
info.pMapEntries = reinterpret_cast<VkSpecializationMapEntry *>(mapEntries);
info.dataSize = specializationInfo->dataSize;
- void *data = sw::allocateUninitialized(specializationInfo->dataSize);
+ void *data = sw::allocate(specializationInfo->dataSize);
memcpy(data, specializationInfo->pData, specializationInfo->dataSize);
info.pData = data;
}