mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
nv50,nvc0: activate seamless cube map filtering
This commit is contained in:
parent
27d3e0b25c
commit
531b12af35
3 changed files with 44 additions and 1 deletions
|
|
@ -89,7 +89,10 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_TEXTURE_SHADOW_MAP:
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
return nv50_screen(pscreen)->tesla->grclass >= NVA0_3D;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||
return 0;
|
||||
case PIPE_CAP_TWO_SIDED_STENCIL:
|
||||
case PIPE_CAP_DEPTH_CLAMP:
|
||||
case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
|
||||
|
|
@ -417,6 +420,11 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
|
|||
BEGIN_RING(chan, RING_3D(BLEND_SEPARATE_ALPHA), 1);
|
||||
OUT_RING (chan, 1);
|
||||
|
||||
if (tesla_class >= NVA0_3D) {
|
||||
BEGIN_RING(chan, RING_3D_(NVA0_3D_TEX_MISC), 1);
|
||||
OUT_RING (chan, NVA0_3D_TEX_MISC_SEAMLESS_CUBE_MAP);
|
||||
}
|
||||
|
||||
BEGIN_RING(chan, RING_3D(SCREEN_Y_CONTROL), 1);
|
||||
OUT_RING (chan, 0);
|
||||
BEGIN_RING(chan, RING_3D(WINDOW_OFFSET_X), 2);
|
||||
|
|
|
|||
|
|
@ -34,6 +34,36 @@
|
|||
|
||||
#include "nouveau/nouveau_gldefs.h"
|
||||
|
||||
/* Caveats:
|
||||
* ! pipe_sampler_state.normalized_coords is ignored - rectangle textures will
|
||||
* use non-normalized coordinates, everything else won't
|
||||
* (The relevant bit is in the TIC entry and not the TSC entry.)
|
||||
*
|
||||
* ! pipe_sampler_state.seamless_cube_map is ignored - seamless filtering is
|
||||
* always activated on NVA0 +
|
||||
* (Give me the global bit, otherwise it's not worth the CPU work.)
|
||||
*
|
||||
* ! pipe_sampler_state.border_color is not swizzled according to the texture
|
||||
* swizzle in pipe_sampler_view
|
||||
* (This will be ugly with indirect independent texture/sampler access,
|
||||
* we'd have to emulate the logic in the shader. GL doesn't have that,
|
||||
* D3D doesn't have swizzle, if we knew what we were implementing we'd be
|
||||
* good.)
|
||||
*
|
||||
* ! pipe_rasterizer_state.line_last_pixel is ignored - it is never drawn
|
||||
*
|
||||
* ! pipe_rasterizer_state.flatshade_first also applies to QUADS
|
||||
* (There's a GL query for that, forcing an exception is just ridiculous.)
|
||||
*
|
||||
* ! pipe_rasterizer_state.gl_rasterization_rules is ignored - pixel centers
|
||||
* are always at half integer coordinates and the top-left rule applies
|
||||
* (There does not seem to be a hardware switch for this.)
|
||||
*
|
||||
* ! pipe_rasterizer_state.sprite_coord_enable is masked with 0xff on NVC0
|
||||
* (The hardware only has 8 slots meant for TexCoord and we have to assign
|
||||
* in advance to maintain elegant separate shader objects.)
|
||||
*/
|
||||
|
||||
static INLINE uint32_t
|
||||
nv50_colormask(unsigned mask)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -74,7 +74,10 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_TEXTURE_SHADOW_MAP:
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||
return 0;
|
||||
case PIPE_CAP_TWO_SIDED_STENCIL:
|
||||
case PIPE_CAP_DEPTH_CLAMP:
|
||||
case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
|
||||
|
|
@ -441,6 +444,8 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
|
|||
OUT_RING (chan, 1);
|
||||
BEGIN_RING(chan, RING_3D(BLEND_ENABLE_COMMON), 1);
|
||||
OUT_RING (chan, 0);
|
||||
BEGIN_RING(chan, RING_3D(TEX_MISC), 1);
|
||||
OUT_RING (chan, NVC0_3D_TEX_MISC_SEAMLESS_CUBE_MAP);
|
||||
|
||||
nvc0_magic_3d_init(chan);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue