Module: Mesa
Branch: main
Commit: 18a1234541d64adbd47543548e7274b6badb3080
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18a1234541d64adbd47543548e7274b6badb3080

Author: Lionel Landwerlin <lionel.g.landwer...@intel.com>
Date:   Fri Oct 20 13:13:50 2023 +0300

anv: add a sampler state pool

Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>
Reviewed-by: Rohan Garg <rohan.g...@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25897>

---

 src/intel/vulkan/anv_device.c      |  4 ++--
 src/intel/vulkan/anv_private.h     | 11 ++++++-----
 src/intel/vulkan/anv_va.c          | 20 +++++---------------
 src/intel/vulkan/genX_init_state.c |  4 ++--
 4 files changed, 15 insertions(+), 24 deletions(-)

diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index a57004af66a..358c283f1a6 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -3320,8 +3320,8 @@ VkResult anv_CreateDevice(
                          device->physical->va.indirect_descriptor_pool.size);
    } else {
       util_vma_heap_init(&device->vma_desc,
-                         device->physical->va.direct_descriptor_pool.addr,
-                         device->physical->va.direct_descriptor_pool.size);
+                         device->physical->va.bindless_surface_state_pool.addr,
+                         
device->physical->va.bindless_surface_state_pool.size);
    }
 
    util_vma_heap_init(&device->vma_trtt,
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 4fbebd30eff..ce1b27426f9 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1048,17 +1048,18 @@ struct anv_physical_device {
         */
        struct anv_va_range                      scratch_surface_state_pool;
        /**
-        * Bindless surface states (used with indirect descriptors)
+        * Bindless surface states (indirectly referred to by indirect
+        * descriptors or for direct descriptors)
         */
        struct anv_va_range                      bindless_surface_state_pool;
-       /**
-        * Bindless surface & sampler states (used with direct descriptors)
-        */
-       struct anv_va_range                      direct_descriptor_pool;
        /**
         * Dynamic state pool
         */
        struct anv_va_range                      dynamic_state_pool;
+       /**
+        * Sampler state pool
+        */
+       struct anv_va_range                      sampler_state_pool;
        /**
         * Indirect descriptor pool
         */
diff --git a/src/intel/vulkan/anv_va.c b/src/intel/vulkan/anv_va.c
index 163133c7910..b3bea2ae120 100644
--- a/src/intel/vulkan/anv_va.c
+++ b/src/intel/vulkan/anv_va.c
@@ -53,11 +53,11 @@ anv_device_print_vas(struct anv_physical_device *device)
    PRINT_HEAP(general_state_pool);
    PRINT_HEAP(low_heap);
    PRINT_HEAP(dynamic_state_pool);
+   PRINT_HEAP(sampler_state_pool);
    PRINT_HEAP(binding_table_pool);
    PRINT_HEAP(internal_surface_state_pool);
    PRINT_HEAP(scratch_surface_state_pool);
    PRINT_HEAP(bindless_surface_state_pool);
-   PRINT_HEAP(direct_descriptor_pool);
    PRINT_HEAP(indirect_descriptor_pool);
    PRINT_HEAP(indirect_push_descriptor_pool);
    PRINT_HEAP(instruction_state_pool);
@@ -105,8 +105,8 @@ anv_physical_device_init_va_ranges(struct 
anv_physical_device *device)
    /* PRMs & simulation disagrees on the actual size of this heap. Take the
     * smallest (simulation) so that it works everywhere.
     */
-   address = va_add(&device->va.dynamic_state_pool, address, _4Gb - 4096);
-   address = align64(address, _1Gb);
+   address = va_add(&device->va.dynamic_state_pool, address, _1Gb);
+   address = va_add(&device->va.sampler_state_pool, address, 2 * _1Gb);
 
    /* The following addresses have to be located in a 4Gb range so that the
     * binding tables can address internal surface states & bindless surface
@@ -120,21 +120,11 @@ anv_physical_device_init_va_ranges(struct 
anv_physical_device *device)
          device->va.internal_surface_state_pool.addr,
          8 * _1Mb);
 
-   /* Both of the following heaps have be in the same 4Gb range from the
+   /* The bindless surface state heap has be in the same 4Gb range from the
     * binding table pool start so they can be addressed from binding table
     * entries.
     */
-   if (device->indirect_descriptors) {
-      /* With indirect descriptors, we allocate bindless surface states from
-       * this pool.
-       */
-      address = va_add(&device->va.bindless_surface_state_pool, address, 2 * 
_1Gb);
-   } else {
-      /* With direct descriptor, descriptors set buffers are allocated
-       * here.
-       */
-      address = va_add(&device->va.direct_descriptor_pool, address, 2 * _1Gb);
-   }
+   address = va_add(&device->va.bindless_surface_state_pool, address, 2 * 
_1Gb);
 
    if (device->indirect_descriptors) {
       /* With indirect descriptors, descriptor buffers can go anywhere, they
diff --git a/src/intel/vulkan/genX_init_state.c 
b/src/intel/vulkan/genX_init_state.c
index bb1878032eb..431e43ba868 100644
--- a/src/intel/vulkan/genX_init_state.c
+++ b/src/intel/vulkan/genX_init_state.c
@@ -294,11 +294,11 @@ init_common_queue_state(struct anv_queue *queue, struct 
anv_batch *batch)
          sba.BindlessSurfaceStateSize =
             (device->physical->va.binding_table_pool.size +
              device->physical->va.internal_surface_state_pool.size +
-             device->physical->va.direct_descriptor_pool.size) - 1;
+             device->physical->va.bindless_surface_state_pool.size) - 1;
          sba.BindlessSamplerStateBufferSize =
             (device->physical->va.binding_table_pool.size +
              device->physical->va.internal_surface_state_pool.size +
-             device->physical->va.direct_descriptor_pool.size) / 4096 - 1;
+             device->physical->va.bindless_surface_state_pool.size) / 4096 - 1;
          sba.BindlessSurfaceStateMOCS = sba.BindlessSamplerStateMOCS = mocs;
          sba.BindlessSurfaceStateBaseAddressModifyEnable =
             sba.BindlessSamplerStateBaseAddressModifyEnable = true;

Reply via email to