summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/svga/svga_context.h2
-rw-r--r--src/gallium/drivers/svga/svga_screen.c14
-rw-r--r--src/gallium/drivers/svga/svga_screen.h2
-rw-r--r--src/gallium/drivers/svga/svga_state_rss.c4
4 files changed, 15 insertions, 7 deletions
diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h
index d6309f7085b..067c791ec68 100644
--- a/src/gallium/drivers/svga/svga_context.h
+++ b/src/gallium/drivers/svga/svga_context.h
@@ -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;
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
index d29a5049e30..8badcb2a595 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -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);
diff --git a/src/gallium/drivers/svga/svga_screen.h b/src/gallium/drivers/svga/svga_screen.h
index 97424fc6f1a..d7d2c756359 100644
--- a/src/gallium/drivers/svga/svga_screen.h
+++ b/src/gallium/drivers/svga/svga_screen.h
@@ -49,6 +49,8 @@ struct svga_screen
SVGA3dHardwareVersion hw_version;
+ float maxPointSize;
+
struct {
boolean force_level_surface_view;
boolean force_surface_view;
diff --git a/src/gallium/drivers/svga/svga_state_rss.c b/src/gallium/drivers/svga/svga_state_rss.c
index 1ee8b7f49b1..a2bcf24dd1b 100644
--- a/src/gallium/drivers/svga/svga_state_rss.c
+++ b/src/gallium/drivers/svga/svga_state_rss.c
@@ -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);
}