5 Replies Latest reply on Apr 30, 2018 5:02 AM by elstaci

    Unexpected restrictions on tessellation inner and outer parameters under Vulkan

    straylightning

      After a great deal of investigating dead ends, I finally have a workaround for a Vulkan device loss issue on newer AMD devices when running my application.  The application runs for (say) between 1 and 100 frames, and then reports (most often) a device loss before triggering a driver reset.  I am running on an RX 460 with 2GB on Windows 10 x64, using Radeon 18.3.4 drivers (the latest at the time of writing.)

       

      My current workaround can be seen here:

      https://github.com/StrayLightning/aeolius/blob/b2305f9f08e0e9c97ba4c080c39609c181047351/res/land/2-land.tesc.glsl#L142

       

      This is basically how I am restricting the inner and outer tessellation parameters in my tessellation control shaders:

       

              if (tessellation_hack) {

                  li = clamp(li, 4.0, 64.0);

                  lo0 = lo1 = lo2 = li;

              }

       

      After applying this, I've had the application running for more than 15 minutes without problems.

       

      I am running with Vulkan validation layers enabled, and there are no problems reported with the workaround disabled (until the device loss event.)

       

      These restrictions are unexpected, and they seem to go against the documentation in chapter 21 of the Vulkan specification.  They are not required for NVIDIA devices, Intel devices, and older AMD devices that I have tried.

       

      Can anyone identify any documentation I have missed or alternatively confirm that this looks like a bug?

       

      The full source code of the Rust application and framework can be found here:

      https://github.com/StrayLightning/aeolius

       

      Further history of my investigation can be found here:

      https://github.com/StrayLightning/aeolius/issues/32