radv: don't set vertex_attribute_strides on GFX8+
authorRhys Perry <pendingchaos02@gmail.com>
Tue, 11 Jul 2023 19:29:12 +0000 (20:29 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 11:53:56 +0000 (11:53 +0000)
Bounds checking no longer compares against the stride.

fossil-db (navi21):
Totals from 5 (0.00% of 133461) affected shaders:
Instrs: 1532 -> 1520 (-0.78%)
CodeSize: 8144 -> 8084 (-0.74%)
Latency: 5104 -> 5102 (-0.04%)
InvThroughput: 686 -> 680 (-0.87%)
VClause: 19 -> 17 (-10.53%)
PreVGPRs: 118 -> 116 (-1.69%)

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24115>

src/amd/vulkan/radv_pipeline_graphics.c

index 783b3a9..30bcebc 100644 (file)
@@ -1843,7 +1843,9 @@ radv_generate_graphics_pipeline_key(const struct radv_device *device, const stru
          key.vs.vertex_attribute_offsets[i] = offset;
          key.vs.instance_rate_divisors[i] = state->vi->bindings[binding].divisor;
 
-         if (!(pipeline->dynamic_states & RADV_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE)) {
+         /* vertex_attribute_strides is only needed to workaround GFX6/7 offset>=stride checks. */
+         if (!(pipeline->dynamic_states & RADV_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE) &&
+             pdevice->rad_info.gfx_level < GFX8) {
             /* From the Vulkan spec 1.2.157:
              *
              * "If the bound pipeline state object was created with the