Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>
---
 src/intel/vulkan/anv_cmd_buffer.c | 33 ++++++---------------------------
 src/intel/vulkan/anv_device.c     | 19 +------------------
 src/intel/vulkan/anv_pipeline.c   | 30 ++++--------------------------
 src/intel/vulkan/anv_private.h    | 23 +++++++++++++++++++++++
 4 files changed, 34 insertions(+), 71 deletions(-)

diff --git a/src/intel/vulkan/anv_cmd_buffer.c 
b/src/intel/vulkan/anv_cmd_buffer.c
index 5bcd5e0..b051489 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -356,19 +356,9 @@ VkResult anv_ResetCommandBuffer(
 void
 anv_cmd_buffer_emit_state_base_address(struct anv_cmd_buffer *cmd_buffer)
 {
-   switch (cmd_buffer->device->info.gen) {
-   case 7:
-      if (cmd_buffer->device->info.is_haswell)
-         return gen75_cmd_buffer_emit_state_base_address(cmd_buffer);
-      else
-         return gen7_cmd_buffer_emit_state_base_address(cmd_buffer);
-   case 8:
-      return gen8_cmd_buffer_emit_state_base_address(cmd_buffer);
-   case 9:
-      return gen9_cmd_buffer_emit_state_base_address(cmd_buffer);
-   default:
-      unreachable("unsupported gen\n");
-   }
+   ANV_GEN_DISPATCH(cmd_buffer->device,
+                    cmd_buffer_emit_state_base_address,
+                    cmd_buffer);
 }
 
 VkResult anv_BeginCommandBuffer(
@@ -714,20 +704,9 @@ static struct anv_state
 anv_cmd_buffer_alloc_null_surface_state(struct anv_cmd_buffer *cmd_buffer,
                                         struct anv_framebuffer *fb)
 {
-   switch (cmd_buffer->device->info.gen) {
-   case 7:
-      if (cmd_buffer->device->info.is_haswell) {
-         return gen75_cmd_buffer_alloc_null_surface_state(cmd_buffer, fb);
-      } else {
-         return gen7_cmd_buffer_alloc_null_surface_state(cmd_buffer, fb);
-      }
-   case 8:
-      return gen8_cmd_buffer_alloc_null_surface_state(cmd_buffer, fb);
-   case 9:
-      return gen9_cmd_buffer_alloc_null_surface_state(cmd_buffer, fb);
-   default:
-      unreachable("Invalid hardware generation");
-   }
+   return ANV_GEN_DISPATCH(cmd_buffer->device,
+                           cmd_buffer_alloc_null_surface_state,
+                           cmd_buffer, fb);
 }
 
 VkResult
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 24f7227..6dfdfdb 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -921,24 +921,7 @@ VkResult anv_CreateDevice(
 
    anv_queue_init(device, &device->queue);
 
-   switch (device->info.gen) {
-   case 7:
-      if (!device->info.is_haswell)
-         result = gen7_init_device_state(device);
-      else
-         result = gen75_init_device_state(device);
-      break;
-   case 8:
-      result = gen8_init_device_state(device);
-      break;
-   case 9:
-      result = gen9_init_device_state(device);
-      break;
-   default:
-      /* Shouldn't get here as we don't create physical devices for any other
-       * gens. */
-      unreachable("unhandled gen");
-   }
+   result = ANV_GEN_DISPATCH(device, init_device_state, device);
    if (result != VK_SUCCESS)
       goto fail_fd;
 
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 6b393a6..f9f1cbf 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -1182,19 +1182,8 @@ anv_graphics_pipeline_create(
    ANV_FROM_HANDLE(anv_device, device, _device);
    ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);
 
-   switch (device->info.gen) {
-   case 7:
-      if (device->info.is_haswell)
-         return gen75_graphics_pipeline_create(_device, cache, pCreateInfo, 
extra, pAllocator, pPipeline);
-      else
-         return gen7_graphics_pipeline_create(_device, cache, pCreateInfo, 
extra, pAllocator, pPipeline);
-   case 8:
-      return gen8_graphics_pipeline_create(_device, cache, pCreateInfo, extra, 
pAllocator, pPipeline);
-   case 9:
-      return gen9_graphics_pipeline_create(_device, cache, pCreateInfo, extra, 
pAllocator, pPipeline);
-   default:
-      unreachable("unsupported gen\n");
-   }
+   return ANV_GEN_DISPATCH(device, graphics_pipeline_create,
+                           _device, cache, pCreateInfo, extra, pAllocator, 
pPipeline);
 }
 
 VkResult anv_CreateGraphicsPipelines(
@@ -1235,19 +1224,8 @@ static VkResult anv_compute_pipeline_create(
    ANV_FROM_HANDLE(anv_device, device, _device);
    ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);
 
-   switch (device->info.gen) {
-   case 7:
-      if (device->info.is_haswell)
-         return gen75_compute_pipeline_create(_device, cache, pCreateInfo, 
pAllocator, pPipeline);
-      else
-         return gen7_compute_pipeline_create(_device, cache, pCreateInfo, 
pAllocator, pPipeline);
-   case 8:
-      return gen8_compute_pipeline_create(_device, cache, pCreateInfo, 
pAllocator, pPipeline);
-   case 9:
-      return gen9_compute_pipeline_create(_device, cache, pCreateInfo, 
pAllocator, pPipeline);
-   default:
-      unreachable("unsupported gen\n");
-   }
+   return ANV_GEN_DISPATCH(device, compute_pipeline_create,
+                           _device, cache, pCreateInfo, pAllocator, pPipeline);
 }
 
 VkResult anv_CreateComputePipelines(
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 0705263..27ae5e88 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1994,6 +1994,29 @@ ANV_DEFINE_STRUCT_CASTS(anv_common, VkMemoryBarrier)
 ANV_DEFINE_STRUCT_CASTS(anv_common, VkBufferMemoryBarrier)
 ANV_DEFINE_STRUCT_CASTS(anv_common, VkImageMemoryBarrier)
 
+#define ANV_GEN_DISPATCH(device, name, ...)      \
+   ({                                            \
+      __typeof(gen7_ ## name)* __func = NULL;    \
+      switch ((device)->info.gen) {              \
+      case 7:                                    \
+         if ((device)->info.is_haswell) {        \
+            __func = gen75_ ## name;             \
+         } else {                                \
+            __func = gen7_ ## name;              \
+         }                                       \
+         break;                                  \
+      case 8:                                    \
+         __func = gen8_ ## name;                 \
+         break;                                  \
+      case 9:                                    \
+         __func = gen9_ ## name;                 \
+         break;                                  \
+      default:                                   \
+         unreachable("unhandled gen");           \
+      };                                         \
+      __func( __VA_ARGS__);                      \
+   })
+
 /* Gen-specific function declarations */
 #ifdef genX
 #  include "anv_genX.h"
-- 
2.9.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to