Mesa (master): st: Pass TextureTiling option from texture to memory obj
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 18 20:57:07 UTC 2020
Module: Mesa
Branch: master
Commit: e48f27ee6454db2856ee24be78873513867c11a0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e48f27ee6454db2856ee24be78873513867c11a0
Author: Eduardo Lima Mitev <elima at igalia.com>
Date: Thu May 7 17:28:44 2020 +0200
st: Pass TextureTiling option from texture to memory obj
If tiling is linear, also adds the corresponding pipe bind flag
to the resource template when creating a new resource from the
memory object.
Modified TexParameteri to update the TextureTiling option only when the
texObj is not immutable (before TexStorageMem*DEXT is called to create
the texture from external memory).
v2: Ensure that memory object is not NULL before setting the
TextureTiling option (fixes TexStorage*D).
v3: Also add flag PIPE_SHARED to bindings (needed for some gallium
drivers).
v4: Use PIPE_BIND_LINEAR instead of adding a new PIPE_RESOURCE_FLAG
(Marek Olšák)
Co-authored-by: Eduardo Lima Mitev <elima at igalia.com>
Co-authored-by: Eleni Maria Stea <estea at igalia.com>
Co-authored-by: Hyunjun Ko <zzoon at igalia.com>
Reviewed-by: Rohan Garg <rohan.garg at collabora.com>
Reviewed-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4565>
---
src/mesa/main/texparam.c | 4 ++--
src/mesa/state_tracker/st_cb_memoryobjects.h | 3 +++
src/mesa/state_tracker/st_cb_texture.c | 8 ++++++++
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index 196ac83cd38..7a2829d6a2a 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -602,8 +602,8 @@ set_tex_parameteri(struct gl_context *ctx,
goto invalid_pname;
case GL_TEXTURE_TILING_EXT:
- if (ctx->Extensions.EXT_memory_object) {
- texObj->TextureTiling = params[0];
+ if (ctx->Extensions.EXT_memory_object && !texObj->Immutable) {
+ texObj->TextureTiling = params[0];
return GL_TRUE;
}
diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.h b/src/mesa/state_tracker/st_cb_memoryobjects.h
index f05475afbca..565768ebad9 100644
--- a/src/mesa/state_tracker/st_cb_memoryobjects.h
+++ b/src/mesa/state_tracker/st_cb_memoryobjects.h
@@ -34,6 +34,9 @@ struct st_memory_object
{
struct gl_memory_object Base;
struct pipe_memory_object *memory;
+
+ /* TEXTURE_TILING_EXT param from gl_texture_object */
+ GLuint TextureTiling;
};
static inline struct st_memory_object *
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index a2d7aa6a6d3..d92a48a5fcf 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -2907,6 +2907,9 @@ st_texture_create_from_memory(struct st_context *st,
pt.bind = bind;
/* only set this for OpenGL textures, not renderbuffers */
pt.flags = PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY;
+ if (memObj->TextureTiling == GL_LINEAR_TILING_EXT)
+ pt.bind |= PIPE_BIND_LINEAR;
+
pt.nr_samples = nr_samples;
pt.nr_storage_samples = nr_samples;
@@ -2951,6 +2954,11 @@ st_texture_storage(struct gl_context *ctx,
bindings = default_bindings(st, fmt);
+ if (smObj) {
+ smObj->TextureTiling = texObj->TextureTiling;
+ bindings |= PIPE_BIND_SHARED;
+ }
+
if (num_samples > 0) {
/* Find msaa sample count which is actually supported. For example,
* if the user requests 1x but only 4x or 8x msaa is supported, we'll
More information about the mesa-commit
mailing list