freedreno: export supported primtypes
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 27 Aug 2021 14:54:35 +0000 (10:54 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 27 Aug 2021 19:38:19 +0000 (19:38 +0000)
Acked-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12600>

src/gallium/drivers/freedreno/a2xx/fd2_screen.c
src/gallium/drivers/freedreno/a3xx/fd3_screen.c
src/gallium/drivers/freedreno/a4xx/fd4_screen.c
src/gallium/drivers/freedreno/a5xx/fd5_screen.c
src/gallium/drivers/freedreno/a6xx/fd6_screen.c
src/gallium/drivers/freedreno/freedreno_screen.c
src/gallium/drivers/freedreno/freedreno_screen.h

index 1ed14da..65d9fbe 100644 (file)
@@ -107,4 +107,21 @@ fd2_screen_init(struct pipe_screen *pscreen)
       screen->tile_mode = fd2_tile_mode;
 
    fd2_emit_init_screen(pscreen);
+
+   if (screen->gpu_id >= 220) {
+      screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                          BITFIELD_BIT(PIPE_PRIM_LINES) |
+                          BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                          BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
+   } else {
+      screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                          BITFIELD_BIT(PIPE_PRIM_LINES) |
+                          BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                          BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
+   }
 }
index f0095bc..854d73d 100644 (file)
@@ -107,4 +107,12 @@ fd3_screen_init(struct pipe_screen *pscreen)
    screen->setup_slices = fd3_setup_slices;
    if (FD_DBG(TTILE))
       screen->tile_mode = fd3_tile_mode;
+
+   screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                       BITFIELD_BIT(PIPE_PRIM_LINES) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
 }
index a85a326..f5e62ba 100644 (file)
@@ -108,4 +108,12 @@ fd4_screen_init(struct pipe_screen *pscreen)
    pscreen->is_format_supported = fd4_screen_is_format_supported;
    fd4_emit_init_screen(pscreen);
    ir3_screen_init(pscreen);
+
+   screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                       BITFIELD_BIT(PIPE_PRIM_LINES) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
 }
index 1393abf..aa6856f 100644 (file)
@@ -129,4 +129,12 @@ fd5_screen_init(struct pipe_screen *pscreen)
 
    fd5_emit_init_screen(pscreen);
    ir3_screen_init(pscreen);
+
+   screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                       BITFIELD_BIT(PIPE_PRIM_LINES) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
 }
index 1a7f373..90e36a3 100644 (file)
@@ -143,4 +143,17 @@ fd6_screen_init(struct pipe_screen *pscreen)
    fd6_resource_screen_init(pscreen);
    fd6_emit_init_screen(pscreen);
    ir3_screen_init(pscreen);
+
+   screen->primtypes = BITFIELD_BIT(PIPE_PRIM_POINTS) |
+                       BITFIELD_BIT(PIPE_PRIM_LINES) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN) |
+                       BITFIELD_BIT(PIPE_PRIM_LINES_ADJACENCY) |
+                       BITFIELD_BIT(PIPE_PRIM_LINE_STRIP_ADJACENCY) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLES_ADJACENCY) |
+                       BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY) |
+                       BITFIELD_BIT(PIPE_PRIM_PATCHES);
 }
index 0f3efc2..7b5729b 100644 (file)
@@ -239,6 +239,10 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_PCI_FUNCTION:
       return 0;
 
+   case PIPE_CAP_SUPPORTED_PRIM_MODES:
+   case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART:
+      return screen->primtypes;
+
    case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
    case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
    case PIPE_CAP_VERTEX_SHADER_SATURATE:
index ca396e0..596d810 100644 (file)
@@ -89,6 +89,7 @@ struct fd_screen {
    uint32_t ram_size;
    uint32_t max_rts; /* max # of render targets */
    uint32_t priority_mask;
+   uint32_t primtypes;
    bool has_timestamp;
    bool has_robustness;
    bool has_syncobj;