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@igalia.com> Co-authored-by: Eleni Maria Stea <estea@igalia.com> Co-authored-by: Hyunjun Ko <zzoon@igalia.com> Reviewed-by: Rohan Garg <rohan.garg@collabora.com> Reviewed-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4565>
This commit is contained in:
parent
b479de8537
commit
e48f27ee64
|
@ -602,8 +602,8 @@ set_tex_parameteri(struct gl_context *ctx,
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
|
|
||||||
case GL_TEXTURE_TILING_EXT:
|
case GL_TEXTURE_TILING_EXT:
|
||||||
if (ctx->Extensions.EXT_memory_object) {
|
if (ctx->Extensions.EXT_memory_object && !texObj->Immutable) {
|
||||||
texObj->TextureTiling = params[0];
|
texObj->TextureTiling = params[0];
|
||||||
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,9 @@ struct st_memory_object
|
||||||
{
|
{
|
||||||
struct gl_memory_object Base;
|
struct gl_memory_object Base;
|
||||||
struct pipe_memory_object *memory;
|
struct pipe_memory_object *memory;
|
||||||
|
|
||||||
|
/* TEXTURE_TILING_EXT param from gl_texture_object */
|
||||||
|
GLuint TextureTiling;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct st_memory_object *
|
static inline struct st_memory_object *
|
||||||
|
|
|
@ -2907,6 +2907,9 @@ st_texture_create_from_memory(struct st_context *st,
|
||||||
pt.bind = bind;
|
pt.bind = bind;
|
||||||
/* only set this for OpenGL textures, not renderbuffers */
|
/* only set this for OpenGL textures, not renderbuffers */
|
||||||
pt.flags = PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY;
|
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_samples = nr_samples;
|
||||||
pt.nr_storage_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);
|
bindings = default_bindings(st, fmt);
|
||||||
|
|
||||||
|
if (smObj) {
|
||||||
|
smObj->TextureTiling = texObj->TextureTiling;
|
||||||
|
bindings |= PIPE_BIND_SHARED;
|
||||||
|
}
|
||||||
|
|
||||||
if (num_samples > 0) {
|
if (num_samples > 0) {
|
||||||
/* Find msaa sample count which is actually supported. For example,
|
/* 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
|
* if the user requests 1x but only 4x or 8x msaa is supported, we'll
|
||||||
|
|
Loading…
Reference in New Issue