mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
mesa: force rendertarget usage on required-renderable formats
the existing guesswork during format selection for teximage is
accurate most of the time, but it's not accurate all of the time.
GL/ES each have a set of sized formats that are required to be
color renderable, and so any time one of these is allocated as a
texture, it MUST have the rendertarget usage bit attached so that
it can later be bound as a framebuffer attachment
an alternative might be to relax this and then try to do migration
to a different format/buffer later if necessary, but that's hard and
probably not actually as useful
cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28055>
(cherry picked from commit 0f66589c2a)
This commit is contained in:
parent
84abf14d9c
commit
ef52324fb9
2 changed files with 19 additions and 2 deletions
|
|
@ -1254,7 +1254,7 @@
|
|||
"description": "mesa: force rendertarget usage on required-renderable formats",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null,
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -1333,6 +1333,21 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
|
|||
is_renderbuffer = true;
|
||||
} else {
|
||||
pTarget = gl_target_to_pipe(target);
|
||||
if (internalFormat == format) {
|
||||
if (internalFormat == GL_RGBA) {
|
||||
/* with GL_RGBA, these are effectively aliases to required formats */
|
||||
switch (type) {
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_INT_8_8_8_8:
|
||||
is_renderbuffer = true;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
} else if (internalFormat == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
|
||||
is_renderbuffer = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (target == GL_TEXTURE_1D || target == GL_TEXTURE_1D_ARRAY) {
|
||||
|
|
@ -1351,7 +1366,9 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
|
|||
bindings = PIPE_BIND_SAMPLER_VIEW;
|
||||
if (_mesa_is_depth_or_stencil_format(internalFormat))
|
||||
bindings |= PIPE_BIND_DEPTH_STENCIL;
|
||||
else if (is_renderbuffer || internalFormat == 3 || internalFormat == 4 ||
|
||||
else if (is_renderbuffer)
|
||||
bindings |= PIPE_BIND_RENDER_TARGET;
|
||||
else if (internalFormat == 3 || internalFormat == 4 ||
|
||||
internalFormat == GL_RGB || internalFormat == GL_RGBA ||
|
||||
internalFormat == GL_RGBA2 ||
|
||||
internalFormat == GL_RGB4 || internalFormat == GL_RGBA4 ||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue