[Mesa-dev] [PATCH 16.5/23] i965/skl: Use _mesa_meta_pbo_TexSubImage to upload subimage data to YF/YS tiled textures
Anuj Phogat
anuj.phogat at gmail.com
Mon Mar 30 17:43:10 PDT 2015
No other path currently supports uploading data to these surfaces.
Fixes the incorrect rendering in miplevels > 0 with YF/YS tiling.
Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
---
src/mesa/drivers/dri/i965/intel_tex_subimage.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/intel_tex_subimage.c b/src/mesa/drivers/dri/i965/intel_tex_subimage.c
index 909ff25..a7ad10e 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_subimage.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_subimage.c
@@ -200,8 +200,10 @@ intelTexSubImage(struct gl_context * ctx,
const struct gl_pixelstore_attrib *packing)
{
struct intel_texture_image *intelImage = intel_texture_image(texImage);
+ struct brw_context *brw = brw_context(ctx);
bool ok;
-
+ bool create_pbo = false;
+ uint32_t tr_mode = INTEL_MIPTREE_TRMODE_NONE;
bool tex_busy = intelImage->mt && drm_intel_bo_busy(intelImage->mt->bo);
DBG("%s mesa_format %s target %s format %s type %s level %d %dx%dx%d\n",
@@ -210,13 +212,30 @@ intelTexSubImage(struct gl_context * ctx,
_mesa_lookup_enum_by_nr(format), _mesa_lookup_enum_by_nr(type),
texImage->Level, texImage->Width, texImage->Height, texImage->Depth);
+ if (brw->gen >= 9) {
+ tr_mode = intelImage->mt->tr_mode;
+ /* Set create_pbo = true for surfaces with INTEL_MIPTREE_TRMODE_{YF/YS}.
+ * _mesa_meta_pbo_TexSubImage() is the only working path to upload data
+ * to such surfaces.
+ */
+ create_pbo = tex_busy || (intelImage->mt &&
+ intelImage->mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE);
+ } else {
+ create_pbo = tex_busy;
+ }
+
ok = _mesa_meta_pbo_TexSubImage(ctx, dims, texImage,
xoffset, yoffset, zoffset,
width, height, depth, format, type,
- pixels, false, tex_busy, packing);
+ pixels, false, create_pbo, packing);
if (ok)
return;
+ /* Currently there are no fallback paths to upload data to surfaces with
+ * tr_mode != INTEL_MIPTREE_TRMODE_NONE.
+ */
+ assert(tr_mode == INTEL_MIPTREE_TRMODE_NONE);
+
ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage,
xoffset, yoffset, zoffset,
width, height, depth,
--
2.3.4
More information about the mesa-dev
mailing list