anv/pipeline: Follow push constant alignment restrictions on BDW+ and HSW gt3
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 29 Feb 2016 22:13:56 +0000 (14:13 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 29 Feb 2016 22:36:24 +0000 (14:36 -0800)
src/intel/vulkan/anv_pipeline.c

index cbd3a21abd75cc307f963d32152590e1fa44f294..3dab205e5ccd0d5922c5a4fe4c4ccab6866dd0fd 100644 (file)
@@ -894,9 +894,16 @@ gen7_compute_urb_partition(struct anv_pipeline *pipeline)
 
    const unsigned stages =
       _mesa_bitcount(pipeline->active_stages & VK_SHADER_STAGE_ALL_GRAPHICS);
-   const unsigned size_per_stage = stages ? (push_constant_kb / stages) : 0;
+   unsigned size_per_stage = stages ? (push_constant_kb / stages) : 0;
    unsigned used_kb = 0;
 
+   /* Broadwell+ and Haswell gt3 require that the push constant sizes be in
+    * units of 2KB.  Incidentally, these are the same platforms that have
+    * 32KB worth of push constant space.
+    */
+   if (push_constant_kb == 32)
+      size_per_stage &= ~1u;
+
    for (int i = MESA_SHADER_VERTEX; i < MESA_SHADER_FRAGMENT; i++) {
       pipeline->urb.push_size[i] =
          (pipeline->active_stages & (1 << i)) ? size_per_stage : 0;