Mesa (main): freedreno: export supported primtypes
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Aug 27 19:56:58 UTC 2021
Module: Mesa
Branch: main
Commit: 744ef862b8d30d2037b8826153d2d2366e99844b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=744ef862b8d30d2037b8826153d2d2366e99844b
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri Aug 27 10:54:35 2021 -0400
freedreno: export supported primtypes
Acked-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12600>
---
src/gallium/drivers/freedreno/a2xx/fd2_screen.c | 17 +++++++++++++++++
src/gallium/drivers/freedreno/a3xx/fd3_screen.c | 8 ++++++++
src/gallium/drivers/freedreno/a4xx/fd4_screen.c | 8 ++++++++
src/gallium/drivers/freedreno/a5xx/fd5_screen.c | 8 ++++++++
src/gallium/drivers/freedreno/a6xx/fd6_screen.c | 13 +++++++++++++
src/gallium/drivers/freedreno/freedreno_screen.c | 4 ++++
src/gallium/drivers/freedreno/freedreno_screen.h | 1 +
7 files changed, 59 insertions(+)
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_screen.c b/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
index 1ed14da2ff1..65d9fbef342 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
@@ -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);
+ }
}
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_screen.c b/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
index f0095bcd85a..854d73daeaa 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
@@ -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);
}
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_screen.c b/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
index a85a32675bb..f5e62ba2e1a 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
@@ -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);
}
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_screen.c b/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
index 1393abf85fd..aa6856f3774 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
@@ -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);
}
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_screen.c b/src/gallium/drivers/freedreno/a6xx/fd6_screen.c
index 1a7f373bb73..90e36a3f55a 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_screen.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_screen.c
@@ -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);
}
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index 0f3efc2010d..7b5729bc3d9 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -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:
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.h b/src/gallium/drivers/freedreno/freedreno_screen.h
index ca396e0c16e..596d810b7e1 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.h
+++ b/src/gallium/drivers/freedreno/freedreno_screen.h
@@ -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;
More information about the mesa-commit
mailing list