diff options
author | Illia Iorin <[email protected]> | 2019-02-28 12:33:50 +0200 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2019-04-05 11:28:10 +1100 |
commit | a113a42e7369a4e43a1db1c9a7a35a3f7175615e (patch) | |
tree | a52e4b3fba7fe49a9550d53fdfd397f73e067107 | |
parent | a7d40a13ec39df5c1e18c2afaf70988958c11933 (diff) |
mesa/main: Fix multisample texture initialize
Sampler of Multisample textures wasn't initialized correct. So when
texture object created as multisample its sampler is initialized in a
individual case. We change the initial state of TEXTURE_MIN_FILTER and
TEXTURE_MAG_FILTER to NEAREST.
These changes are approved by KhronosGroup.
https://github.com/KhronosGroup/OpenGL-API/issues/45
Signed-off-by: Sergii Romantsov <[email protected]>
Signed-off-by: Illia Iorin <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109057
-rw-r--r-- | src/mesa/main/texobj.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 5dc5cb8e1a9..38860fed4f0 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -272,6 +272,8 @@ _mesa_initialize_texture_object( struct gl_context *ctx, target == GL_TEXTURE_2D_MULTISAMPLE || target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY); + GLenum filter = GL_LINEAR; + memset(obj, 0, sizeof(*obj)); /* init the non-zero fields */ simple_mtx_init(&obj->Mutex, mtx_plain); @@ -292,20 +294,30 @@ _mesa_initialize_texture_object( struct gl_context *ctx, obj->RequiredTextureImageUnits = 1; /* sampler state */ - if (target == GL_TEXTURE_RECTANGLE_NV || - target == GL_TEXTURE_EXTERNAL_OES) { - obj->Sampler.WrapS = GL_CLAMP_TO_EDGE; - obj->Sampler.WrapT = GL_CLAMP_TO_EDGE; - obj->Sampler.WrapR = GL_CLAMP_TO_EDGE; - obj->Sampler.MinFilter = GL_LINEAR; - } - else { - obj->Sampler.WrapS = GL_REPEAT; - obj->Sampler.WrapT = GL_REPEAT; - obj->Sampler.WrapR = GL_REPEAT; - obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR; + switch (target) { + case GL_TEXTURE_2D_MULTISAMPLE: + case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: + filter = GL_NEAREST; + /* fallthrough */ + + case GL_TEXTURE_RECTANGLE_NV: + case GL_TEXTURE_EXTERNAL_OES: + obj->Sampler.WrapS = GL_CLAMP_TO_EDGE; + obj->Sampler.WrapT = GL_CLAMP_TO_EDGE; + obj->Sampler.WrapR = GL_CLAMP_TO_EDGE; + obj->Sampler.MinFilter = filter; + obj->Sampler.MagFilter = filter; + break; + + default: + obj->Sampler.WrapS = GL_REPEAT; + obj->Sampler.WrapT = GL_REPEAT; + obj->Sampler.WrapR = GL_REPEAT; + obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR; + obj->Sampler.MagFilter = GL_LINEAR; + break; } - obj->Sampler.MagFilter = GL_LINEAR; + obj->Sampler.MinLod = -1000.0; obj->Sampler.MaxLod = 1000.0; obj->Sampler.LodBias = 0.0; |