gallium: separate out floating-point CAPs into its own enum

The motivation behind this is to add some self-documentation in the code
about how each CAP can be used.

The idea is:
- enum pipe_cap is only valid in get_param
- enum pipe_capf is only valid in get_paramf

Which CAPs are floating-point have been determined based on how everybody
except svga implemented the functions. svga have been modified to match all
the other drivers.

Besides that, the floating-point CAPs are now prefixed with PIPE_CAPF_.
This commit is contained in:
Marek Olšák
2011-11-19 22:38:22 +01:00
parent 2a0126932b
commit bb71f9249a
22 changed files with 157 additions and 130 deletions

View File

@@ -50,7 +50,7 @@ enum u_caps_check_enum {
/* Floats currently lose precision */ /* Floats currently lose precision */
#define UTIL_CHECK_FLOAT(cap, higher) \ #define UTIL_CHECK_FLOAT(cap, higher) \
UTIL_CAPS_CHECK_FLOAT, PIPE_CAP_##cap, (unsigned)(int)(higher) UTIL_CAPS_CHECK_FLOAT, PIPE_CAPF_##cap, (unsigned)(int)(higher)
#define UTIL_CHECK_FORMAT(format) \ #define UTIL_CHECK_FORMAT(format) \
UTIL_CAPS_CHECK_FORMAT, PIPE_FORMAT_##format UTIL_CAPS_CHECK_FORMAT, PIPE_FORMAT_##format

View File

@@ -73,20 +73,26 @@ The integer capabilities:
* ``PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER``: Whether the TGSI * ``PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER``: Whether the TGSI
property FS_COORD_PIXEL_CENTER with value INTEGER is supported. property FS_COORD_PIXEL_CENTER with value INTEGER is supported.
The floating-point capabilities:
* ``PIPE_CAP_MAX_LINE_WIDTH``: The maximum width of a regular line. .. _pipe_capf:
* ``PIPE_CAP_MAX_LINE_WIDTH_AA``: The maximum width of a smoothed line.
* ``PIPE_CAP_MAX_POINT_WIDTH``: The maximum width and height of a point. PIPE_CAPF_*
* ``PIPE_CAP_MAX_POINT_WIDTH_AA``: The maximum width and height of a smoothed point. ^^^^^^^^^^^^^^^^
* ``PIPE_CAP_MAX_TEXTURE_ANISOTROPY``: The maximum level of anisotropy that can be
The floating-point capabilities are:
* ``PIPE_CAPF_MAX_LINE_WIDTH``: The maximum width of a regular line.
* ``PIPE_CAPF_MAX_LINE_WIDTH_AA``: The maximum width of a smoothed line.
* ``PIPE_CAPF_MAX_POINT_WIDTH``: The maximum width and height of a point.
* ``PIPE_CAPF_MAX_POINT_WIDTH_AA``: The maximum width and height of a smoothed point.
* ``PIPE_CAPF_MAX_TEXTURE_ANISOTROPY``: The maximum level of anisotropy that can be
applied to anisotropically filtered textures. applied to anisotropically filtered textures.
* ``PIPE_CAP_MAX_TEXTURE_LOD_BIAS``: The maximum :term:`LOD` bias that may be applied * ``PIPE_CAPF_MAX_TEXTURE_LOD_BIAS``: The maximum :term:`LOD` bias that may be applied
to filtered textures. to filtered textures.
* ``PIPE_CAP_GUARD_BAND_LEFT``, * ``PIPE_CAPF_GUARD_BAND_LEFT``,
``PIPE_CAP_GUARD_BAND_TOP``, ``PIPE_CAPF_GUARD_BAND_TOP``,
``PIPE_CAP_GUARD_BAND_RIGHT``, ``PIPE_CAPF_GUARD_BAND_RIGHT``,
``PIPE_CAP_GUARD_BAND_BOTTOM``: TODO ``PIPE_CAPF_GUARD_BAND_BOTTOM``: TODO
.. _pipe_shader_cap: .. _pipe_shader_cap:

View File

@@ -118,23 +118,23 @@ cell_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_sha
} }
static float static float
cell_get_paramf(struct pipe_screen *screen, enum pipe_cap param) cell_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 0.0; return 0.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; /* arbitrary */ return 16.0; /* arbitrary */
default: default:

View File

@@ -92,7 +92,7 @@ galahad_screen_get_shader_param(struct pipe_screen *_screen,
static float static float
galahad_screen_get_paramf(struct pipe_screen *_screen, galahad_screen_get_paramf(struct pipe_screen *_screen,
enum pipe_cap param) enum pipe_capf param)
{ {
struct galahad_screen *glhd_screen = galahad_screen(_screen); struct galahad_screen *glhd_screen = galahad_screen(_screen);
struct pipe_screen *screen = glhd_screen->screen; struct pipe_screen *screen = glhd_screen->screen;

View File

@@ -240,23 +240,23 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
} }
static float static float
i915_get_paramf(struct pipe_screen *screen, enum pipe_cap cap) i915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap)
{ {
switch(cap) { switch(cap) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 7.5; return 7.5;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 255.0; return 255.0;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 4.0; return 4.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; return 16.0;
default: default:

View File

@@ -248,23 +248,23 @@ brw_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shad
} }
static float static float
brw_get_paramf(struct pipe_screen *screen, enum pipe_cap param) brw_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 7.5; return 7.5;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 255.0; return 255.0;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 4.0; return 4.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; return 16.0;
default: default:

View File

@@ -89,7 +89,7 @@ identity_screen_get_shader_param(struct pipe_screen *_screen,
static float static float
identity_screen_get_paramf(struct pipe_screen *_screen, identity_screen_get_paramf(struct pipe_screen *_screen,
enum pipe_cap param) enum pipe_capf param)
{ {
struct identity_screen *id_screen = identity_screen(_screen); struct identity_screen *id_screen = identity_screen(_screen);
struct pipe_screen *screen = id_screen->screen; struct pipe_screen *screen = id_screen->screen;

View File

@@ -190,25 +190,25 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe
} }
static float static float
llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_cap param) llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0; /* not actually signficant at this time */ return 16.0; /* not actually signficant at this time */
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; /* arbitrary */ return 16.0; /* arbitrary */
case PIPE_CAP_GUARD_BAND_LEFT: case PIPE_CAPF_GUARD_BAND_LEFT:
case PIPE_CAP_GUARD_BAND_TOP: case PIPE_CAPF_GUARD_BAND_TOP:
case PIPE_CAP_GUARD_BAND_RIGHT: case PIPE_CAPF_GUARD_BAND_RIGHT:
case PIPE_CAP_GUARD_BAND_BOTTOM: case PIPE_CAPF_GUARD_BAND_BOTTOM:
return 0.0; return 0.0;
default: default:
assert(0); assert(0);

View File

@@ -329,7 +329,8 @@ static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
return screen->get_param(screen, param); return screen->get_param(screen, param);
} }
static float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param) static float noop_get_paramf(struct pipe_screen* pscreen,
enum pipe_capf param)
{ {
struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;

View File

@@ -200,18 +200,18 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
} }
static float static float
nv50_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_cap param) nv50_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 10.0f; return 10.0f;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 64.0f; return 64.0f;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0f; return 16.0f;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 4.0f; return 4.0f;
default: default:
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);

View File

@@ -192,18 +192,18 @@ nvc0_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
} }
static float static float
nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_cap param) nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 10.0f; return 10.0f;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 64.0f; return 64.0f;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0f; return 16.0f;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 4.0f; return 4.0f;
default: default:
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);

View File

@@ -188,20 +188,20 @@ nvfx_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, enum
} }
static float static float
nvfx_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_cap param) nvfx_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
{ {
struct nvfx_screen *screen = nvfx_screen(pscreen); struct nvfx_screen *screen = nvfx_screen(pscreen);
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 10.0; return 10.0;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 64.0; return 64.0;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return screen->use_nv4x ? 16.0 : 8.0; return screen->use_nv4x ? 16.0 : 8.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 15.0; return 15.0;
default: default:
NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param); NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);

View File

@@ -258,15 +258,16 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
return 0; return 0;
} }
static float r300_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param) static float r300_get_paramf(struct pipe_screen* pscreen,
enum pipe_capf param)
{ {
struct r300_screen* r300screen = r300_screen(pscreen); struct r300_screen* r300screen = r300_screen(pscreen);
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
/* The maximum dimensions of the colorbuffer are our practical /* The maximum dimensions of the colorbuffer are our practical
* rendering limits. 2048 pixels should be enough for anybody. */ * rendering limits. 2048 pixels should be enough for anybody. */
if (r300screen->caps.is_r500) { if (r300screen->caps.is_r500) {
@@ -276,14 +277,14 @@ static float r300_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param)
} else { } else {
return 2560.0f; return 2560.0f;
} }
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0f; return 16.0f;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0f; return 16.0f;
case PIPE_CAP_GUARD_BAND_LEFT: case PIPE_CAPF_GUARD_BAND_LEFT:
case PIPE_CAP_GUARD_BAND_TOP: case PIPE_CAPF_GUARD_BAND_TOP:
case PIPE_CAP_GUARD_BAND_RIGHT: case PIPE_CAPF_GUARD_BAND_RIGHT:
case PIPE_CAP_GUARD_BAND_BOTTOM: case PIPE_CAPF_GUARD_BAND_BOTTOM:
/* XXX I don't know what these should be but the least we can do is /* XXX I don't know what these should be but the least we can do is
* silence the potential error message */ * silence the potential error message */
return 0.0f; return 0.0f;

View File

@@ -1074,7 +1074,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
/* Per-vertex point size. /* Per-vertex point size.
* Clamp to [0, max FB size] */ * Clamp to [0, max FB size] */
psiz = pipe->screen->get_paramf(pipe->screen, psiz = pipe->screen->get_paramf(pipe->screen,
PIPE_CAP_MAX_POINT_WIDTH); PIPE_CAPF_MAX_POINT_WIDTH);
point_minmax = point_minmax =
pack_float_16_6x(psiz) << R300_GA_POINT_MINMAX_MAX_SHIFT; pack_float_16_6x(psiz) << R300_GA_POINT_MINMAX_MAX_SHIFT;
} else { } else {

View File

@@ -432,23 +432,24 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
} }
} }
static float r600_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param) static float r600_get_paramf(struct pipe_screen* pscreen,
enum pipe_capf param)
{ {
struct r600_screen *rscreen = (struct r600_screen *)pscreen; struct r600_screen *rscreen = (struct r600_screen *)pscreen;
enum radeon_family family = rscreen->family; enum radeon_family family = rscreen->family;
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
if (family >= CHIP_CEDAR) if (family >= CHIP_CEDAR)
return 16384.0f; return 16384.0f;
else else
return 8192.0f; return 8192.0f;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0f; return 16.0f;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0f; return 16.0f;
default: default:
R600_ERR("r600: unsupported paramf %d\n", param); R600_ERR("r600: unsupported paramf %d\n", param);

View File

@@ -92,7 +92,7 @@ rbug_screen_get_shader_param(struct pipe_screen *_screen,
static float static float
rbug_screen_get_paramf(struct pipe_screen *_screen, rbug_screen_get_paramf(struct pipe_screen *_screen,
enum pipe_cap param) enum pipe_capf param)
{ {
struct rbug_screen *rb_screen = rbug_screen(_screen); struct rbug_screen *rb_screen = rbug_screen(_screen);
struct pipe_screen *screen = rb_screen->screen; struct pipe_screen *screen = rb_screen->screen;

View File

@@ -155,20 +155,20 @@ softpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe
} }
static float static float
softpipe_get_paramf(struct pipe_screen *screen, enum pipe_cap param) softpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
{ {
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
return 255.0; /* arbitrary */ return 255.0; /* arbitrary */
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0; return 16.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; /* arbitrary */ return 16.0; /* arbitrary */
default: default:
return 0; return 0;

View File

@@ -94,34 +94,48 @@ svga_get_name( struct pipe_screen *pscreen )
static float static float
svga_get_paramf(struct pipe_screen *screen, enum pipe_cap param) svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
{ {
struct svga_screen *svgascreen = svga_screen(screen); struct svga_screen *svgascreen = svga_screen(screen);
struct svga_winsys_screen *sws = svgascreen->sws; struct svga_winsys_screen *sws = svgascreen->sws;
SVGA3dDevCapResult result; SVGA3dDevCapResult result;
switch (param) { switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH: case PIPE_CAPF_MAX_LINE_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_LINE_WIDTH_AA: case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 7.0; return 7.0;
case PIPE_CAP_MAX_POINT_WIDTH: case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */ /* fall-through */
case PIPE_CAP_MAX_POINT_WIDTH_AA: case PIPE_CAPF_MAX_POINT_WIDTH_AA:
/* Keep this to a reasonable size to avoid failures in /* Keep this to a reasonable size to avoid failures in
* conform/pntaa.c: * conform/pntaa.c:
*/ */
return SVGA_MAX_POINTSIZE; return SVGA_MAX_POINTSIZE;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
if(!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY, &result)) if(!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY, &result))
return 4.0; return 4.0;
return result.u; return result.u;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0; return 16.0;
default:
return 0;
}
}
static int
svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
{
struct svga_screen *svgascreen = svga_screen(screen);
struct svga_winsys_screen *sws = svgascreen->sws;
SVGA3dDevCapResult result;
switch (param) {
case PIPE_CAP_MAX_COMBINED_SAMPLERS: case PIPE_CAP_MAX_COMBINED_SAMPLERS:
return 16; return 16;
case PIPE_CAP_NPOT_TEXTURES: case PIPE_CAP_NPOT_TEXTURES:
@@ -194,15 +208,6 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_cap param)
} }
} }
/* This is a fairly pointless interface
*/
static int
svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
{
return (int) svga_get_paramf( screen, param );
}
static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param) static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
{ {
struct svga_screen *svgascreen = svga_screen(screen); struct svga_screen *svgascreen = svga_screen(screen);

View File

@@ -132,7 +132,7 @@ trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader,
static float static float
trace_screen_get_paramf(struct pipe_screen *_screen, trace_screen_get_paramf(struct pipe_screen *_screen,
enum pipe_cap param) enum pipe_capf param)
{ {
struct trace_screen *tr_scr = trace_screen(_screen); struct trace_screen *tr_scr = trace_screen(_screen);
struct pipe_screen *screen = tr_scr->screen; struct pipe_screen *screen = tr_scr->screen;

View File

@@ -419,7 +419,7 @@ enum pipe_transfer_usage {
/** /**
* Implementation capabilities/limits which are queried through * Implementation capabilities/limits which are queried through
* pipe_screen::get_param() and pipe_screen::get_paramf(). * pipe_screen::get_param()
*/ */
enum pipe_cap { enum pipe_cap {
PIPE_CAP_NPOT_TEXTURES = 1, PIPE_CAP_NPOT_TEXTURES = 1,
@@ -435,16 +435,6 @@ enum pipe_cap {
PIPE_CAP_MAX_TEXTURE_2D_LEVELS = 12, PIPE_CAP_MAX_TEXTURE_2D_LEVELS = 12,
PIPE_CAP_MAX_TEXTURE_3D_LEVELS = 13, PIPE_CAP_MAX_TEXTURE_3D_LEVELS = 13,
PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS = 14, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS = 14,
PIPE_CAP_MAX_LINE_WIDTH = 15,
PIPE_CAP_MAX_LINE_WIDTH_AA = 16,
PIPE_CAP_MAX_POINT_WIDTH = 17,
PIPE_CAP_MAX_POINT_WIDTH_AA = 18,
PIPE_CAP_MAX_TEXTURE_ANISOTROPY = 19,
PIPE_CAP_MAX_TEXTURE_LOD_BIAS = 20,
PIPE_CAP_GUARD_BAND_LEFT = 21, /*< float */
PIPE_CAP_GUARD_BAND_TOP = 22, /*< float */
PIPE_CAP_GUARD_BAND_RIGHT = 23, /*< float */
PIPE_CAP_GUARD_BAND_BOTTOM = 24, /*< float */
PIPE_CAP_TEXTURE_MIRROR_CLAMP = 25, PIPE_CAP_TEXTURE_MIRROR_CLAMP = 25,
PIPE_CAP_BLEND_EQUATION_SEPARATE = 28, PIPE_CAP_BLEND_EQUATION_SEPARATE = 28,
PIPE_CAP_SM3 = 29, /*< Shader Model, supported */ PIPE_CAP_SM3 = 29, /*< Shader Model, supported */
@@ -478,6 +468,24 @@ enum pipe_cap {
PIPE_CAP_TEXTURE_BARRIER = 53 PIPE_CAP_TEXTURE_BARRIER = 53
}; };
/**
* Implementation limits which are queried through
* pipe_screen::get_paramf()
*/
enum pipe_capf
{
PIPE_CAPF_MAX_LINE_WIDTH = 15,
PIPE_CAPF_MAX_LINE_WIDTH_AA = 16,
PIPE_CAPF_MAX_POINT_WIDTH = 17,
PIPE_CAPF_MAX_POINT_WIDTH_AA = 18,
PIPE_CAPF_MAX_TEXTURE_ANISOTROPY = 19,
PIPE_CAPF_MAX_TEXTURE_LOD_BIAS = 20,
PIPE_CAPF_GUARD_BAND_LEFT = 21, /*< float */
PIPE_CAPF_GUARD_BAND_TOP = 22, /*< float */
PIPE_CAPF_GUARD_BAND_RIGHT = 23, /*< float */
PIPE_CAPF_GUARD_BAND_BOTTOM = 24, /*< float */
};
/* Shader caps not specific to any single stage */ /* Shader caps not specific to any single stage */
enum pipe_shader_cap enum pipe_shader_cap
{ {

View File

@@ -85,7 +85,7 @@ struct pipe_screen {
* Query a float-valued capability/parameter/limit * Query a float-valued capability/parameter/limit
* \param param one of PIPE_CAP_x * \param param one of PIPE_CAP_x
*/ */
float (*get_paramf)( struct pipe_screen *, enum pipe_cap param ); float (*get_paramf)( struct pipe_screen *, enum pipe_capf param );
/** /**
* Query a per-shader-stage integer-valued capability/parameter/limit * Query a per-shader-stage integer-valued capability/parameter/limit

View File

@@ -113,14 +113,18 @@ void st_init_limits(struct st_context *st)
1, MAX_DRAW_BUFFERS); 1, MAX_DRAW_BUFFERS);
c->MaxLineWidth c->MaxLineWidth
= _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH)); = _maxf(1.0f, screen->get_paramf(screen,
PIPE_CAPF_MAX_LINE_WIDTH));
c->MaxLineWidthAA c->MaxLineWidthAA
= _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH_AA)); = _maxf(1.0f, screen->get_paramf(screen,
PIPE_CAPF_MAX_LINE_WIDTH_AA));
c->MaxPointSize c->MaxPointSize
= _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH)); = _maxf(1.0f, screen->get_paramf(screen,
PIPE_CAPF_MAX_POINT_WIDTH));
c->MaxPointSizeAA c->MaxPointSizeAA
= _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH_AA)); = _maxf(1.0f, screen->get_paramf(screen,
PIPE_CAPF_MAX_POINT_WIDTH_AA));
/* called after _mesa_create_context/_mesa_init_point, fix default user /* called after _mesa_create_context/_mesa_init_point, fix default user
* settable max point size up * settable max point size up
*/ */
@@ -132,10 +136,11 @@ void st_init_limits(struct st_context *st)
c->MinPointSizeAA = 0.0f; c->MinPointSizeAA = 0.0f;
c->MaxTextureMaxAnisotropy c->MaxTextureMaxAnisotropy
= _maxf(2.0f, screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_ANISOTROPY)); = _maxf(2.0f, screen->get_paramf(screen,
PIPE_CAPF_MAX_TEXTURE_ANISOTROPY));
c->MaxTextureLodBias c->MaxTextureLodBias
= screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_LOD_BIAS); = screen->get_paramf(screen, PIPE_CAPF_MAX_TEXTURE_LOD_BIAS);
c->MaxDrawBuffers c->MaxDrawBuffers
= CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), = CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),