mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
st/mesa: use the texture view's format for render-to-texture
Aside from the bug below, it fixes a simplistic test I've written locally,
and I see no regression in Piglit for radeonsi.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94595
Cc: "11.0 11.1 11.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
(cherry picked from commit a8b315b827)
This commit is contained in:
parent
8b4eb0f123
commit
868cf20717
1 changed files with 15 additions and 7 deletions
|
|
@ -386,6 +386,7 @@ st_update_renderbuffer_surface(struct st_context *st,
|
|||
{
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
struct pipe_resource *resource = strb->texture;
|
||||
struct st_texture_object *stTexObj = NULL;
|
||||
unsigned rtt_width = strb->Base.Width;
|
||||
unsigned rtt_height = strb->Base.Height;
|
||||
unsigned rtt_depth = strb->Base.Depth;
|
||||
|
|
@ -397,9 +398,18 @@ st_update_renderbuffer_surface(struct st_context *st,
|
|||
*/
|
||||
boolean enable_srgb = (st->ctx->Color.sRGBEnabled &&
|
||||
_mesa_get_format_color_encoding(strb->Base.Format) == GL_SRGB);
|
||||
enum pipe_format format = (enable_srgb) ?
|
||||
util_format_srgb(resource->format) :
|
||||
util_format_linear(resource->format);
|
||||
enum pipe_format format = resource->format;
|
||||
|
||||
if (strb->is_rtt) {
|
||||
stTexObj = st_texture_object(strb->Base.TexImage->TexObject);
|
||||
if (stTexObj->surface_based)
|
||||
format = stTexObj->surface_format;
|
||||
}
|
||||
|
||||
format = (enable_srgb) ?
|
||||
util_format_srgb(format) :
|
||||
util_format_linear(format);
|
||||
|
||||
unsigned first_layer, last_layer, level;
|
||||
|
||||
if (resource->target == PIPE_TEXTURE_1D_ARRAY) {
|
||||
|
|
@ -430,8 +440,8 @@ st_update_renderbuffer_surface(struct st_context *st,
|
|||
|
||||
/* Adjust for texture views */
|
||||
if (strb->is_rtt && resource->array_size > 1 &&
|
||||
strb->Base.TexImage->TexObject->Immutable) {
|
||||
struct gl_texture_object *tex = strb->Base.TexImage->TexObject;
|
||||
stTexObj->base.Immutable) {
|
||||
struct gl_texture_object *tex = &stTexObj->base;
|
||||
first_layer += tex->MinLayer;
|
||||
if (!strb->rtt_layered)
|
||||
last_layer += tex->MinLayer;
|
||||
|
|
@ -491,8 +501,6 @@ st_render_texture(struct gl_context *ctx,
|
|||
|
||||
st_update_renderbuffer_surface(st, strb);
|
||||
|
||||
strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
|
||||
|
||||
/* Invalidate buffer state so that the pipe's framebuffer state
|
||||
* gets updated.
|
||||
* That's where the new renderbuffer (which we just created) gets
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue