mem_alloc: Optimize allocation conflict checking

- When bufferImageGranularity == allocaAlignment the worst case is actually already evaluated
- When result offset and allocation size are already aligned, it is not possible for the 'page' to be shared

In both scenarios, a lot of work can be saved by simply not scanning suballocations. When dealing with many tiny allocations, this adds up a lot!
diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index bd9aa5b..267c797 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -9656,7 +9656,7 @@
 

         // Check previous suballocations for BufferImageGranularity conflicts.

         // Make bigger alignment if necessary.

-        if(bufferImageGranularity > 1)

+        if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment)

         {

             bool bufferImageGranularityConflict = false;

             VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;

@@ -9740,7 +9740,7 @@
 

         // Check next suballocations for BufferImageGranularity conflicts.

         // If conflict exists, we must mark more allocations lost or fail.

-        if(bufferImageGranularity > 1)

+        if(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)

         {

             VmaSuballocationList::const_iterator nextSuballocItem = lastSuballocItem;

             ++nextSuballocItem;

@@ -9799,7 +9799,7 @@
 

         // Check previous suballocations for BufferImageGranularity conflicts.

         // Make bigger alignment if necessary.

-        if(bufferImageGranularity > 1)

+        if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment)

         {

             bool bufferImageGranularityConflict = false;

             VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;

@@ -9839,7 +9839,7 @@
 

         // Check next suballocations for BufferImageGranularity conflicts.

         // If conflict exists, allocation cannot be made here.

-        if(bufferImageGranularity > 1)

+        if(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)

         {

             VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;

             ++nextSuballocItem;

@@ -11007,7 +11007,7 @@
 

     // Check next suballocations from 2nd for BufferImageGranularity conflicts.

     // Make bigger alignment if necessary.

-    if(bufferImageGranularity > 1 && !suballocations2nd.empty())

+    if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())

     {

         bool bufferImageGranularityConflict = false;

         for(size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )

@@ -11112,7 +11112,7 @@
 

         // Check previous suballocations for BufferImageGranularity conflicts.

         // Make bigger alignment if necessary.

-        if(bufferImageGranularity > 1 && !suballocations1st.empty())

+        if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations1st.empty())

         {

             bool bufferImageGranularityConflict = false;

             for(size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )

@@ -11144,7 +11144,7 @@
         {

             // Check next suballocations for BufferImageGranularity conflicts.

             // If conflict exists, allocation cannot be made here.

-            if(bufferImageGranularity > 1 && m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)

+            if((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) && m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)

             {

                 for(size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )

                 {

@@ -11202,7 +11202,7 @@
 

         // Check previous suballocations for BufferImageGranularity conflicts.

         // Make bigger alignment if necessary.

-        if(bufferImageGranularity > 1 && !suballocations2nd.empty())

+        if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())

         {

             bool bufferImageGranularityConflict = false;

             for(size_t prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; )

@@ -11260,7 +11260,7 @@
 

             // Check next suballocations for BufferImageGranularity conflicts.

             // If conflict exists, we must mark more allocations lost or fail.

-            if(bufferImageGranularity > 1)

+            if(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)

             {

                 while(index1st < suballocations1st.size())

                 {

@@ -11306,7 +11306,7 @@
         {

             // Check next suballocations for BufferImageGranularity conflicts.

             // If conflict exists, allocation cannot be made here.

-            if(bufferImageGranularity > 1)

+            if(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)

             {

                 for(size_t nextSuballocIndex = index1st;

                     nextSuballocIndex < suballocations1st.size();