aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIllia Iorin <[email protected]>2019-02-28 12:33:50 +0200
committerTimothy Arceri <[email protected]>2019-04-05 11:28:10 +1100
commita113a42e7369a4e43a1db1c9a7a35a3f7175615e (patch)
treea52e4b3fba7fe49a9550d53fdfd397f73e067107
parenta7d40a13ec39df5c1e18c2afaf70988958c11933 (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.c38
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;