i965: fix cube map lock-up / corruption
If we're using anything but GL_NEAREST sampling of a cube map, we need to use the BRW_TEXCOORDMODE_CUBE texcoord wrap mode. Before this, the GPU would either lock up or subsequent texture filtering would be corrupted.
This commit is contained in:
parent
2b6235c9f7
commit
6f915b10d5
1 changed files with 13 additions and 9 deletions
|
|
@ -95,6 +95,7 @@ struct wm_sampler_key {
|
|||
int sampler_count;
|
||||
|
||||
struct wm_sampler_entry {
|
||||
GLenum tex_target;
|
||||
GLenum wrap_r, wrap_s, wrap_t;
|
||||
float maxlod, minlod;
|
||||
float lod_bias;
|
||||
|
|
@ -168,19 +169,20 @@ static void brw_update_sampler_state(struct wm_sampler_entry *key,
|
|||
}
|
||||
}
|
||||
|
||||
sampler->ss1.r_wrap_mode = translate_wrap_mode(key->wrap_r);
|
||||
sampler->ss1.s_wrap_mode = translate_wrap_mode(key->wrap_s);
|
||||
sampler->ss1.t_wrap_mode = translate_wrap_mode(key->wrap_t);
|
||||
|
||||
/* Fulsim complains if I don't do this. Hardware doesn't mind:
|
||||
*/
|
||||
#if 0
|
||||
if (texObj->Target == GL_TEXTURE_CUBE_MAP_ARB) {
|
||||
if (key->tex_target == GL_TEXTURE_CUBE_MAP &&
|
||||
(key->minfilter != GL_NEAREST || key->magfilter != GL_NEAREST)) {
|
||||
/* If we're using anything but nearest sampling for a cube map, we
|
||||
* need to set this wrap mode to avoid GPU lock-ups.
|
||||
*/
|
||||
sampler->ss1.r_wrap_mode = BRW_TEXCOORDMODE_CUBE;
|
||||
sampler->ss1.s_wrap_mode = BRW_TEXCOORDMODE_CUBE;
|
||||
sampler->ss1.t_wrap_mode = BRW_TEXCOORDMODE_CUBE;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
sampler->ss1.r_wrap_mode = translate_wrap_mode(key->wrap_r);
|
||||
sampler->ss1.s_wrap_mode = translate_wrap_mode(key->wrap_s);
|
||||
sampler->ss1.t_wrap_mode = translate_wrap_mode(key->wrap_t);
|
||||
}
|
||||
|
||||
/* Set shadow function:
|
||||
*/
|
||||
|
|
@ -234,6 +236,8 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
|
|||
struct gl_texture_image *firstImage =
|
||||
texObj->Image[0][intelObj->firstLevel];
|
||||
|
||||
entry->tex_target = texObj->Target;
|
||||
|
||||
entry->wrap_r = texObj->WrapR;
|
||||
entry->wrap_s = texObj->WrapS;
|
||||
entry->wrap_t = texObj->WrapT;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue