Set maxVertexAttrib limit for Vulkan
authorGreg Daniel <egdaniel@google.com>
Mon, 20 Mar 2017 15:40:58 +0000 (11:40 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Mon, 20 Mar 2017 20:35:04 +0000 (20:35 +0000)
BUG=skia:6396

Change-Id: If31507816ca9978a64d3bd25b282b373d292e7aa
Reviewed-on: https://skia-review.googlesource.com/9856
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
infra/bots/recipe_modules/sktest/api.py
infra/bots/recipe_modules/sktest/example.expected/Test-Win10-MSVC-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-Vulkan.json
src/gpu/vk/GrVkCaps.cpp
src/gpu/vk/GrVkCaps.h

index e6a11a8..e2ebbf6 100644 (file)
@@ -392,7 +392,6 @@ def dm_flags(bot):
 
   if 'Vulkan' in bot and 'RadeonR9M470X' in bot and 'Win' in bot:
     # skia:6396
-    match.append('~VertexAttributeCount')
     match.append('~ComposedImageFilterBounds_Gpu')
     match.append('~CopySurface')
     match.append('~ImageFilterZeroBlurSigma_Gpu')
index 16a91c1..d185b17 100644 (file)
@@ -145,7 +145,17 @@ void GrVkCaps::initSampleCount(const VkPhysicalDeviceProperties& properties) {
 void GrVkCaps::initGrCaps(const VkPhysicalDeviceProperties& properties,
                           const VkPhysicalDeviceMemoryProperties& memoryProperties,
                           uint32_t featureFlags) {
-    fMaxVertexAttributes = SkTMin(properties.limits.maxVertexInputAttributes, (uint32_t)INT_MAX);
+    // So GPUs, like AMD, are reporting MAX_INT support vertex attributes. In general, there is no
+    // need for us ever to support that amount, and it makes tests which tests all the vertex
+    // attribs timeout looping over that many. For now, we'll cap this at 64 max and can raise it if
+    // we ever find that need.
+    static const uint32_t kMaxVertexAttributes = 64;
+    fMaxVertexAttributes = SkTMin(properties.limits.maxVertexInputAttributes, kMaxVertexAttributes);
+    // AMD advertises support for MAX_UINT vertex input attributes, but in reality only supports 32.
+    if (kAMD_VkVendor == properties.vendorID) {
+        fMaxVertexAttributes = SkTMin(fMaxVertexAttributes, 32);
+    }
+
     // We could actually query and get a max size for each config, however maxImageDimension2D will
     // give the minimum max size across all configs. So for simplicity we will use that for now.
     fMaxRenderTargetSize = SkTMin(properties.limits.maxImageDimension2D, (uint32_t)INT_MAX);
index 6ef0796..e04bc16 100644 (file)
@@ -91,9 +91,10 @@ public:
 
 private:
     enum VkVendor {
-        kQualcomm_VkVendor = 20803,
-        kNvidia_VkVendor = 4318,
+        kAMD_VkVendor = 4098,
         kImagination_VkVendor = 4112,
+        kNvidia_VkVendor = 4318,
+        kQualcomm_VkVendor = 20803,
     };
 
     void init(const GrContextOptions& contextOptions, const GrVkInterface* vkInterface,