summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/i915/i915_clear.c
diff options
context:
space:
mode:
authorDaniel Vetter <[email protected]>2011-09-25 15:53:55 +0200
committerDaniel Vetter <[email protected]>2011-10-07 14:31:16 +0200
commit8dd523b2dfdcda27a0afc449b169f2c26bf73527 (patch)
tree4509d15b413ebb6fe3fd8c76ee1cd5d6b4a96aac /src/gallium/drivers/i915/i915_clear.c
parent305bcda4b583641bab5a7bfa6ce4e30a8559a868 (diff)
i915g: fixup clear params emission
Docs say that default shader input color input need to be spec as ARGB8888. And a clear rect prim essentially uses this value instead of default diffuse. Depth on the other hands is an ieee 32 bit float. Clear stencil is U8. Completely different are the clear values for zone init prims. These are speced in the actual output pixel layout (and need to be repeated for 16 bit formats). Clear up the confusion by adding some comments. v2: Retain the target swizzling support added by Stephan Marchesin. Signed-off-by: Daniel Vetter <[email protected]>
Diffstat (limited to 'src/gallium/drivers/i915/i915_clear.c')
-rw-r--r--src/gallium/drivers/i915/i915_clear.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/drivers/i915/i915_clear.c b/src/gallium/drivers/i915/i915_clear.c
index c682c06cb58..aa453bce580 100644
--- a/src/gallium/drivers/i915/i915_clear.c
+++ b/src/gallium/drivers/i915/i915_clear.c
@@ -61,13 +61,18 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
clear_params |= CLEARPARAM_WRITE_COLOR;
cbuf_tex = i915_texture(cbuf->texture);
+
util_pack_color(color->f, cbuf->format, &u_color);
if (util_format_get_blocksize(cbuf_tex->b.b.format) == 4)
clear_color = u_color.ui;
else
clear_color = (u_color.ui & 0xffff) | (u_color.ui << 16);
- util_pack_color(color->f, cbuf->format, &u_color);
+ /* correctly swizzle clear value */
+ if (i915->current.need_target_fixup)
+ util_pack_color(color->f, cbuf->format, &u_color);
+ else
+ util_pack_color(color->f, PIPE_FORMAT_B8G8R8A8_UNORM, &u_color);
clear_color8888 = u_color.ui;
} else
clear_color = clear_color8888 = 0;
@@ -108,8 +113,10 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
OUT_BATCH(_3DSTATE_CLEAR_PARAMETERS);
OUT_BATCH(clear_params | CLEARPARAM_CLEAR_RECT);
+ /* Used for zone init prim */
OUT_BATCH(clear_color);
OUT_BATCH(clear_depth);
+ /* Used for clear rect prim */
OUT_BATCH(clear_color8888);
OUT_BATCH_F(f_depth);
OUT_BATCH(clear_stencil);