diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c index 033a6619f0f..f36ff77484a 100644 --- a/src/gallium/drivers/v3d/v3d_screen.c +++ b/src/gallium/drivers/v3d/v3d_screen.c @@ -275,6 +275,10 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MAX_GS_INVOCATIONS: return 32; + case PIPE_CAP_SUPPORTED_PRIM_MODES: + case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART: + return screen->prim_types; + default: return u_pipe_screen_get_param_defaults(pscreen, param); } @@ -832,6 +836,19 @@ v3d_screen_create(int fd, const struct pipe_screen_config *config, pscreen->get_driver_query_info = v3d_get_driver_query_info; } + /* Generate the bitmask of supported draw primitives. */ + screen->prim_types = BITFIELD_BIT(PIPE_PRIM_POINTS) | + BITFIELD_BIT(PIPE_PRIM_LINES) | + BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) | + BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) | + 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); + return pscreen; fail: diff --git a/src/gallium/drivers/v3d/v3d_screen.h b/src/gallium/drivers/v3d/v3d_screen.h index 3469731a2df..9bf2a065487 100644 --- a/src/gallium/drivers/v3d/v3d_screen.h +++ b/src/gallium/drivers/v3d/v3d_screen.h @@ -76,6 +76,7 @@ struct v3d_screen { uint32_t bo_size; uint32_t bo_count; + uint32_t prim_types; bool has_csd; bool has_cache_flush;