svga: Advertise SVGA3D_DEVCAP_MAX_POINT_SIZE.
Backends usually advertise a SVGA3D_DEVCAP_MAX_POINT_SIZE between 63 and 256, so an hardcoded max point size of 80 is often incorrect. This limitation does not apply for anti-aliased points (as they are done via draw module) but we still advertise the same limit for both, because all others pipe drivers do. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
d9c4209777
commit
9773370eda
|
@ -41,8 +41,6 @@
|
|||
#include "svga3d_shaderdefs.h"
|
||||
|
||||
|
||||
#define SVGA_MAX_POINTSIZE 80.0
|
||||
|
||||
struct draw_vertex_shader;
|
||||
struct draw_fragment_shader;
|
||||
struct svga_shader_result;
|
||||
|
|
|
@ -109,10 +109,7 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
case PIPE_CAPF_MAX_POINT_WIDTH:
|
||||
/* fall-through */
|
||||
case PIPE_CAPF_MAX_POINT_WIDTH_AA:
|
||||
/* Keep this to a reasonable size to avoid failures in
|
||||
* conform/pntaa.c:
|
||||
*/
|
||||
return SVGA_MAX_POINTSIZE;
|
||||
return svgascreen->maxPointSize;
|
||||
|
||||
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
|
||||
if(!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY, &result))
|
||||
|
@ -543,6 +540,15 @@ svga_screen_create(struct svga_winsys_screen *sws)
|
|||
}
|
||||
}
|
||||
|
||||
if (!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_POINT_SIZE, &result)) {
|
||||
svgascreen->maxPointSize = 1.0F;
|
||||
} else {
|
||||
/* Keep this to a reasonable size to avoid failures in
|
||||
* conform/pntaa.c:
|
||||
*/
|
||||
svgascreen->maxPointSize = MIN2(result.f, 80.0f);
|
||||
}
|
||||
|
||||
pipe_mutex_init(svgascreen->tex_mutex);
|
||||
pipe_mutex_init(svgascreen->swc_mutex);
|
||||
|
||||
|
|
|
@ -49,6 +49,8 @@ struct svga_screen
|
|||
|
||||
SVGA3dHardwareVersion hw_version;
|
||||
|
||||
float maxPointSize;
|
||||
|
||||
struct {
|
||||
boolean force_level_surface_view;
|
||||
boolean force_surface_view;
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "util/u_math.h"
|
||||
|
||||
#include "svga_context.h"
|
||||
#include "svga_screen.h"
|
||||
#include "svga_state.h"
|
||||
#include "svga_cmd.h"
|
||||
|
||||
|
@ -77,6 +78,7 @@ svga_queue_rs( struct rs_queue *q,
|
|||
static int emit_rss( struct svga_context *svga,
|
||||
unsigned dirty )
|
||||
{
|
||||
struct svga_screen *screen = svga_screen(svga->pipe.screen);
|
||||
struct rs_queue queue;
|
||||
float point_size_min;
|
||||
|
||||
|
@ -221,7 +223,7 @@ static int emit_rss( struct svga_context *svga,
|
|||
EMIT_RS( svga, curr->linepattern, LINEPATTERN, fail );
|
||||
EMIT_RS_FLOAT( svga, curr->pointsize, POINTSIZE, fail );
|
||||
EMIT_RS_FLOAT( svga, point_size_min, POINTSIZEMIN, fail );
|
||||
EMIT_RS_FLOAT( svga, SVGA_MAX_POINTSIZE, POINTSIZEMAX, fail );
|
||||
EMIT_RS_FLOAT( svga, screen->maxPointSize, POINTSIZEMAX, fail );
|
||||
EMIT_RS( svga, curr->pointsprite, POINTSPRITEENABLE, fail);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue