Mesa (master): r300g: enforce microtiled zbuffer from X server
Marek Olšák
mareko at kemper.freedesktop.org
Mon Apr 5 17:53:31 UTC 2010
Module: Mesa
Branch: master
Commit: b05ada76a5473d901ac9c352af3a05a24ed21363
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b05ada76a5473d901ac9c352af3a05a24ed21363
Author: Marek Olšák <maraeo at gmail.com>
Date: Mon Apr 5 19:39:55 2010 +0200
r300g: enforce microtiled zbuffer from X server
This should be relatively safe, I think.
---
src/gallium/drivers/r300/r300_texture.c | 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
index 365b1cd..27801d6 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -879,6 +879,7 @@ static struct pipe_texture*
struct r300_winsys_buffer *buffer;
struct r300_texture* tex;
unsigned stride;
+ boolean override_zb_flags;
/* Support only 2D textures without mipmaps */
if (base->target != PIPE_TEXTURE_2D ||
@@ -908,8 +909,38 @@ static struct pipe_texture*
rws->buffer_get_tiling(rws, buffer, &tex->microtile, &tex->macrotile);
r300_setup_flags(tex);
+
+ /* Enforce microtiled zbuffer. */
+ override_zb_flags = util_format_is_depth_or_stencil(base->format) &&
+ tex->microtile == R300_BUFFER_LINEAR;
+
+ if (override_zb_flags) {
+ switch (util_format_get_blocksize(base->format)) {
+ case 4:
+ tex->microtile = R300_BUFFER_TILED;
+ break;
+
+ case 2:
+ if (rws->get_value(rws, R300_VID_SQUARE_TILING_SUPPORT)) {
+ tex->microtile = R300_BUFFER_SQUARETILED;
+ break;
+ }
+ /* Pass through. */
+
+ default:
+ override_zb_flags = FALSE;
+ }
+ }
+
r300_setup_miptree(rscreen, tex);
r300_setup_texture_state(rscreen, tex);
+
+ if (override_zb_flags) {
+ rws->buffer_set_tiling(rws, tex->buffer,
+ tex->pitch[0],
+ tex->microtile,
+ tex->macrotile);
+ }
return (struct pipe_texture*)tex;
}
More information about the mesa-commit
mailing list