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:
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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;
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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),
|
||||||
|
Reference in New Issue
Block a user