st/mesa: re-arrange st_finalize_texture
Move the early-out for surface-based textures earlier. This narrows the scope of the locking added in a follow-up commit. Fix one remaining case of initializing a surface-based texture without properly finalizing it. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -2473,9 +2473,6 @@ st_finalize_texture(struct gl_context *ctx,
|
||||
stObj->lastLevel = stObj->base._MaxLevel;
|
||||
}
|
||||
|
||||
firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace][stObj->base.BaseLevel]);
|
||||
assert(firstImage);
|
||||
|
||||
/* Skip the loop over images in the common case of no images having
|
||||
* changed. But if the GL_BASE_LEVEL or GL_MAX_LEVEL change to something we
|
||||
* haven't looked at, then we do need to look at those new images.
|
||||
@@ -2486,6 +2483,14 @@ st_finalize_texture(struct gl_context *ctx,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* If this texture comes from a window system, there is nothing else to do. */
|
||||
if (stObj->surface_based) {
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace][stObj->base.BaseLevel]);
|
||||
assert(firstImage);
|
||||
|
||||
/* If both firstImage and stObj point to a texture which can contain
|
||||
* all active images, favour firstImage. Note that because of the
|
||||
* completeness requirement, we know that the image dimensions
|
||||
@@ -2498,11 +2503,6 @@ st_finalize_texture(struct gl_context *ctx,
|
||||
st_texture_release_all_sampler_views(st, stObj);
|
||||
}
|
||||
|
||||
/* If this texture comes from a window system, there is nothing else to do. */
|
||||
if (stObj->surface_based) {
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* Find gallium format for the Mesa texture */
|
||||
firstImageFormat =
|
||||
st_mesa_format_to_pipe_format(st, firstImage->base.TexFormat);
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include "st_cb_fbo.h"
|
||||
#include "st_cb_flush.h"
|
||||
#include "st_manager.h"
|
||||
#include "st_sampler_view.h"
|
||||
|
||||
#include "state_tracker/st_gl_api.h"
|
||||
|
||||
@@ -734,6 +735,8 @@ st_context_teximage(struct st_context_iface *stctxi,
|
||||
width = height = depth = 0;
|
||||
}
|
||||
|
||||
pipe_resource_reference(&stObj->pt, tex);
|
||||
st_texture_release_all_sampler_views(st, stObj);
|
||||
pipe_resource_reference(&stImage->pt, tex);
|
||||
stObj->surface_format = pipe_format;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user