X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fintel_tex_validate.c;h=08cf3bf7dc16d589791fa963bc2898de5006be2e;hb=9c9f45b82410646d2f7a8576d03de9916118bf07;hp=4991c2997efb3f7603852b818bcfd8607bb22454;hpb=b5c5aac687ca4e203695790e334c1f7f3315c240;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/intel_tex_validate.c b/src/mesa/drivers/dri/i965/intel_tex_validate.c index 4991c2997ef..08cf3bf7dc1 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_validate.c +++ b/src/mesa/drivers/dri/i965/intel_tex_validate.c @@ -24,6 +24,7 @@ #include "main/mtypes.h" #include "main/macros.h" #include "main/samplerobj.h" +#include "main/teximage.h" #include "main/texobj.h" #include "brw_context.h" @@ -63,7 +64,7 @@ intel_update_max_level(struct intel_texture_object *intelObj, * BaseLevel/MaxLevel/filtering, and copy in any texture images that are * stored in other miptrees. */ -GLuint +void intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) { struct gl_context *ctx = &brw->ctx; @@ -77,7 +78,7 @@ intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) /* TBOs require no validation -- they always just point to their BO. */ if (tObj->Target == GL_TEXTURE_BUFFER) - return true; + return; /* We know that this is true by now, and if it wasn't, we might have * mismatched level sizes and the copies would fail. @@ -97,7 +98,7 @@ intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) if (!intelObj->needs_validate && validate_first_level >= intelObj->validated_first_level && validate_last_level <= intelObj->validated_last_level) { - return true; + return; } /* On recent generations, immutable textures should not get this far @@ -128,14 +129,15 @@ intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) /* May need to create a new tree: */ if (!intelObj->mt) { - intel_miptree_get_dimensions_for_image(&firstImage->base.Base, - &width, &height, &depth); + intel_get_image_dims(&firstImage->base.Base, &width, &height, &depth); perf_debug("Creating new %s %dx%dx%d %d-level miptree to handle " "finalized texture miptree.\n", _mesa_get_format_name(firstImage->base.Base.TexFormat), width, height, depth, validate_last_level + 1); + const uint32_t layout_flags = MIPTREE_LAYOUT_ACCELERATED_UPLOAD | + MIPTREE_LAYOUT_TILING_ANY; intelObj->mt = intel_miptree_create(brw, intelObj->base.Target, firstImage->base.Base.TexFormat, @@ -145,10 +147,9 @@ intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) height, depth, 0 /* num_samples */, - INTEL_MIPTREE_TILING_ANY, - MIPTREE_LAYOUT_ACCELERATED_UPLOAD); + layout_flags); if (!intelObj->mt) - return false; + return; } /* Pull in any images not in the object's tree: @@ -179,6 +180,23 @@ intel_finalize_mipmap_tree(struct brw_context *brw, GLuint unit) intelObj->validated_last_level = validate_last_level; intelObj->_Format = intelObj->mt->format; intelObj->needs_validate = false; +} - return true; +/** + * Finalizes all textures, completing any rendering that needs to be done + * to prepare them. + */ +void +brw_validate_textures(struct brw_context *brw) +{ + struct gl_context *ctx = &brw->ctx; + const int max_enabled_unit = ctx->Texture._MaxEnabledTexImageUnit; + + for (int unit = 0; unit <= max_enabled_unit; unit++) { + struct gl_texture_unit *tex_unit = &ctx->Texture.Unit[unit]; + + if (tex_unit->_Current) { + intel_finalize_mipmap_tree(brw, unit); + } + } }