Am 21.08.2014 18:44, schrieb Marek Olšák: > From: Marek Olšák <marek.ol...@amd.com> > > This is already supported by r600g and radeonsi. > Alex suggested this could be useful for video acceleration state trackers. > --- > src/gallium/auxiliary/tgsi/tgsi_strings.c | 3 ++- > src/gallium/auxiliary/util/u_prim.h | 1 + > src/gallium/docs/source/screen.rst | 6 ++++++ > src/gallium/drivers/r600/r600_pipe.c | 1 + > src/gallium/drivers/radeon/r600_pipe_common.h | 2 +- > src/gallium/drivers/radeonsi/si_pipe.c | 1 + > src/gallium/include/pipe/p_defines.h | 4 +++- > 7 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c > b/src/gallium/auxiliary/tgsi/tgsi_strings.c > index 3c108a8..ddc23c1 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c > @@ -164,7 +164,8 @@ const char *tgsi_primitive_names[PIPE_PRIM_MAX] = > "LINES_ADJACENCY", > "LINE_STRIP_ADJACENCY", > "TRIANGLES_ADJACENCY", > - "TRIANGLE_STRIP_ADJACENCY" > + "TRIANGLE_STRIP_ADJACENCY", > + "RECTANGLES" > }; > > const char *tgsi_fs_coord_origin_names[2] = > diff --git a/src/gallium/auxiliary/util/u_prim.h > b/src/gallium/auxiliary/util/u_prim.h > index cf1a18f..d631dc1 100644 > --- a/src/gallium/auxiliary/util/u_prim.h > +++ b/src/gallium/auxiliary/util/u_prim.h > @@ -131,6 +131,7 @@ u_prim_vertex_count(unsigned prim) > { 4, 1 }, /* PIPE_PRIM_LINE_STRIP_ADJACENCY */ > { 6, 6 }, /* PIPE_PRIM_TRIANGLES_ADJACENCY */ > { 6, 2 }, /* PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY */ > + { 3, 3 } /* PIPE_PRIM_RECTANGLES */ > }; > > return (likely(prim < PIPE_PRIM_MAX)) ? &prim_table[prim] : NULL; > diff --git a/src/gallium/docs/source/screen.rst > b/src/gallium/docs/source/screen.rst > index eee254e..f162ec0 100644 > --- a/src/gallium/docs/source/screen.rst > +++ b/src/gallium/docs/source/screen.rst > @@ -26,6 +26,12 @@ The integer capabilities: > normalized coordinates, and mipmaps. > * ``PIPE_CAP_TWO_SIDED_STENCIL``: Whether the stencil test can also affect > back-facing > polygons. > +* ``PIPE_CAP_PRIM_TYPE_RECTANGLES``: Whether rectangle primitives are > supported. > + Rectangles are like quads, but they are only specified by the first 3 > vertices. > + The 4th vertex is computed from the first three by hardware. Rectangles > must > + be parallel with screen borders, which means they can only be rotated with > + 90-degree increments. Rectangles bypass clipping and therefore can be > specified > + in screen coordinates. Do they also need to be planar (same z for each vertex)? Also, the implicit bypass clip / screen coordinate specification makes them quite an outlier among all the primitives. Hmm...
> * ``PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS``: How many dual-source blend > RTs are support. > :ref:`Blend` for more information. > * ``PIPE_CAP_ANISOTROPIC_FILTER``: Whether textures can be filtered > anisotropically. > diff --git a/src/gallium/drivers/r600/r600_pipe.c > b/src/gallium/drivers/r600/r600_pipe.c > index 3d07864..7294c8c 100644 > --- a/src/gallium/drivers/r600/r600_pipe.c > +++ b/src/gallium/drivers/r600/r600_pipe.c > @@ -262,6 +262,7 @@ static int r600_get_param(struct pipe_screen* pscreen, > enum pipe_cap param) > case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT: > case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION: > case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT: > + case PIPE_CAP_PRIM_TYPE_RECTANGLES: > return 1; > > case PIPE_CAP_COMPUTE: > diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h > b/src/gallium/drivers/radeon/r600_pipe_common.h > index ed16e1a..903395d 100644 > --- a/src/gallium/drivers/radeon/r600_pipe_common.h > +++ b/src/gallium/drivers/radeon/r600_pipe_common.h > @@ -76,7 +76,7 @@ > #define R600_CONTEXT_VGT_STREAMOUT_SYNC (1 << 20) > > /* special primitive types */ > -#define R600_PRIM_RECTANGLE_LIST PIPE_PRIM_MAX > +#define R600_PRIM_RECTANGLE_LIST PIPE_PRIM_RECTANGLES > > /* Debug flags. */ > /* logging */ > diff --git a/src/gallium/drivers/radeonsi/si_pipe.c > b/src/gallium/drivers/radeonsi/si_pipe.c > index ae1d043..9431ea4 100644 > --- a/src/gallium/drivers/radeonsi/si_pipe.c > +++ b/src/gallium/drivers/radeonsi/si_pipe.c > @@ -216,6 +216,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum > pipe_cap param) > case PIPE_CAP_CUBE_MAP_ARRAY: > case PIPE_CAP_SAMPLE_SHADING: > case PIPE_CAP_DRAW_INDIRECT: > + case PIPE_CAP_PRIM_TYPE_RECTANGLES: > return 1; > > case PIPE_CAP_TEXTURE_MULTISAMPLE: > diff --git a/src/gallium/include/pipe/p_defines.h > b/src/gallium/include/pipe/p_defines.h > index 04e4798..d92261c 100644 > --- a/src/gallium/include/pipe/p_defines.h > +++ b/src/gallium/include/pipe/p_defines.h > @@ -419,7 +419,8 @@ enum pipe_flush_flags { > #define PIPE_PRIM_LINE_STRIP_ADJACENCY 11 > #define PIPE_PRIM_TRIANGLES_ADJACENCY 12 > #define PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY 13 > -#define PIPE_PRIM_MAX 14 > +#define PIPE_PRIM_RECTANGLES 14 > +#define PIPE_PRIM_MAX 15 > > > /** > @@ -479,6 +480,7 @@ enum pipe_flush_flags { > enum pipe_cap { > PIPE_CAP_NPOT_TEXTURES = 1, > PIPE_CAP_TWO_SIDED_STENCIL = 2, > + PIPE_CAP_PRIM_TYPE_RECTANGLES = 3, > PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS = 4, > PIPE_CAP_ANISOTROPIC_FILTER = 5, > PIPE_CAP_POINT_SPRITE = 6, > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev