gallium: implement seamless cubemap extensions

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Marek Olšák
2011-05-02 02:37:46 +02:00
parent bf65c9ea41
commit a5f0a11477
5 changed files with 18 additions and 0 deletions

View File

@@ -107,3 +107,7 @@ max_anisotropy
Set to zero to disable anisotropic filtering. Any other setting enables Set to zero to disable anisotropic filtering. Any other setting enables
anisotropic filtering, however it's not unexpected some drivers only will anisotropic filtering, however it's not unexpected some drivers only will
change their filtering with a setting of 2 and higher. change their filtering with a setting of 2 and higher.
seamless_cube_map
If set, the bilinear filter of a cube map may take samples from adjacent
cube map faces when sampled near a texture border to produce a seamless
look.

View File

@@ -466,6 +466,8 @@ enum pipe_cap {
PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44,
PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL = 45, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL = 45,
PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46, PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46,
PIPE_CAP_SEAMLESS_CUBE_MAP = 47,
PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48,
}; };
/* Shader caps not specific to any single stage */ /* Shader caps not specific to any single stage */

View File

@@ -269,6 +269,7 @@ struct pipe_sampler_state
unsigned compare_func:3; /**< PIPE_FUNC_x */ unsigned compare_func:3; /**< PIPE_FUNC_x */
unsigned normalized_coords:1; /**< Are coords normalized to [0,1]? */ unsigned normalized_coords:1; /**< Are coords normalized to [0,1]? */
unsigned max_anisotropy:6; unsigned max_anisotropy:6;
unsigned seamless_cube_map:1;
float lod_bias; /**< LOD/lambda bias */ float lod_bias; /**< LOD/lambda bias */
float min_lod, max_lod; /**< LOD clamp range, after bias */ float min_lod, max_lod; /**< LOD clamp range, after bias */
float border_color[4]; float border_color[4];

View File

@@ -201,6 +201,9 @@ update_samplers(struct st_context *st)
= st_compare_func_to_pipe(msamp->CompareFunc); = st_compare_func_to_pipe(msamp->CompareFunc);
} }
sampler->seamless_cube_map =
st->ctx->Texture.CubeMapSeamless || msamp->CubeMapSeamless;
st->state.num_samplers = su + 1; st->state.num_samplers = su + 1;
/*printf("%s su=%u non-null\n", __FUNCTION__, su);*/ /*printf("%s su=%u non-null\n", __FUNCTION__, su);*/

View File

@@ -595,4 +595,12 @@ void st_init_extensions(struct st_context *st)
PIPE_BIND_SAMPLER_VIEW)) { PIPE_BIND_SAMPLER_VIEW)) {
ctx->Extensions.EXT_packed_float = GL_TRUE; ctx->Extensions.EXT_packed_float = GL_TRUE;
} }
if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE)) {
ctx->Extensions.ARB_seamless_cube_map = GL_TRUE;
ctx->Extensions.AMD_seamless_cubemap_per_texture = GL_TRUE;
}
else if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP)) {
ctx->Extensions.ARB_seamless_cube_map = GL_TRUE;
}
} }