summaryrefslogtreecommitdiff
path: root/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch')
-rw-r--r--extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch533
1 files changed, 0 insertions, 533 deletions
diff --git a/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch b/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
deleted file mode 100644
index 5c3b1d7d6..000000000
--- a/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
+++ /dev/null
@@ -1,533 +0,0 @@
-From fbee314a4194671bfc6dfaa90141498a2f45de4e Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Mon, 27 Feb 2012 16:29:38 +0000
-Subject: [PATCH 1/5] uxa/gen3: Remove special casing of solid pictures
-
-Fixes use of alpha-groups and opacity masks in cairo.
-
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
----
- src/i915_render.c | 366 ++++++++++++++++++-----------------------------------
- 1 file changed, 122 insertions(+), 244 deletions(-)
-
-diff --git a/src/i915_render.c b/src/i915_render.c
-index 87d2336..6210035 100644
---- a/src/i915_render.c
-+++ b/src/i915_render.c
-@@ -257,11 +257,8 @@ i915_check_composite_texture(ScreenPtr screen, PicturePtr picture)
- return FALSE;
- }
-
-- if (picture->pSourcePict) {
-- SourcePict *source = picture->pSourcePict;
-- if (source->type == SourcePictTypeSolidFill)
-- return TRUE;
-- }
-+ if (picture->pSourcePict)
-+ return FALSE;
-
- if (picture->pDrawable) {
- int w, h, i;
-@@ -387,23 +384,6 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit)
- }
-
- static void
--i915_emit_composite_primitive_constant(intel_screen_private *intel,
-- int srcX, int srcY,
-- int maskX, int maskY,
-- int dstX, int dstY,
-- int w, int h)
--{
-- OUT_VERTEX(dstX + w);
-- OUT_VERTEX(dstY + h);
--
-- OUT_VERTEX(dstX);
-- OUT_VERTEX(dstY + h);
--
-- OUT_VERTEX(dstX);
-- OUT_VERTEX(dstY);
--}
--
--static void
- i915_emit_composite_primitive_identity_source(intel_screen_private *intel,
- int srcX, int srcY,
- int maskX, int maskY,
-@@ -470,29 +450,6 @@ i915_emit_composite_primitive_affine_source(intel_screen_private *intel,
- }
-
- static void
--i915_emit_composite_primitive_constant_identity_mask(intel_screen_private *intel,
-- int srcX, int srcY,
-- int maskX, int maskY,
-- int dstX, int dstY,
-- int w, int h)
--{
-- OUT_VERTEX(dstX + w);
-- OUT_VERTEX(dstY + h);
-- OUT_VERTEX((maskX + w) * intel->scale_units[0][0]);
-- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]);
--
-- OUT_VERTEX(dstX);
-- OUT_VERTEX(dstY + h);
-- OUT_VERTEX(maskX * intel->scale_units[0][0]);
-- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]);
--
-- OUT_VERTEX(dstX);
-- OUT_VERTEX(dstY);
-- OUT_VERTEX(maskX * intel->scale_units[0][0]);
-- OUT_VERTEX(maskY * intel->scale_units[0][1]);
--}
--
--static void
- i915_emit_composite_primitive_identity_source_mask(intel_screen_private *intel,
- int srcX, int srcY,
- int maskX, int maskY,
-@@ -536,63 +493,61 @@ i915_emit_composite_primitive(intel_screen_private *intel,
-
- per_vertex = 2; /* dest x/y */
-
-- if (! intel->render_source_is_solid) {
-- src_unit = tex_unit++;
--
-- is_affine_src = intel_transform_is_affine(intel->transform[src_unit]);
-- if (is_affine_src) {
-- if (!intel_get_transformed_coordinates(srcX, srcY,
-- intel->
-- transform[src_unit],
-- &src_x[0],
-- &src_y[0]))
-- return;
--
-- if (!intel_get_transformed_coordinates(srcX, srcY + h,
-- intel->
-- transform[src_unit],
-- &src_x[1],
-- &src_y[1]))
-- return;
--
-- if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
-- intel->
-- transform[src_unit],
-- &src_x[2],
-- &src_y[2]))
-- return;
--
-- per_vertex += 2; /* src x/y */
-- } else {
-- if (!intel_get_transformed_coordinates_3d(srcX, srcY,
-- intel->
-- transform[src_unit],
-- &src_x[0],
-- &src_y[0],
-- &src_w[0]))
-- return;
--
-- if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
-- intel->
-- transform[src_unit],
-- &src_x[1],
-- &src_y[1],
-- &src_w[1]))
-- return;
--
-- if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
-- intel->
-- transform[src_unit],
-- &src_x[2],
-- &src_y[2],
-- &src_w[2]))
-- return;
--
-- per_vertex += 4; /* src x/y/z/w */
-- }
-+ src_unit = tex_unit++;
-+
-+ is_affine_src = intel_transform_is_affine(intel->transform[src_unit]);
-+ if (is_affine_src) {
-+ if (!intel_get_transformed_coordinates(srcX, srcY,
-+ intel->
-+ transform[src_unit],
-+ &src_x[0],
-+ &src_y[0]))
-+ return;
-+
-+ if (!intel_get_transformed_coordinates(srcX, srcY + h,
-+ intel->
-+ transform[src_unit],
-+ &src_x[1],
-+ &src_y[1]))
-+ return;
-+
-+ if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
-+ intel->
-+ transform[src_unit],
-+ &src_x[2],
-+ &src_y[2]))
-+ return;
-+
-+ per_vertex += 2; /* src x/y */
-+ } else {
-+ if (!intel_get_transformed_coordinates_3d(srcX, srcY,
-+ intel->
-+ transform[src_unit],
-+ &src_x[0],
-+ &src_y[0],
-+ &src_w[0]))
-+ return;
-+
-+ if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
-+ intel->
-+ transform[src_unit],
-+ &src_x[1],
-+ &src_y[1],
-+ &src_w[1]))
-+ return;
-+
-+ if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
-+ intel->
-+ transform[src_unit],
-+ &src_x[2],
-+ &src_y[2],
-+ &src_w[2]))
-+ return;
-+
-+ per_vertex += 4; /* src x/y/z/w */
- }
-
-- if (intel->render_mask && ! intel->render_mask_is_solid) {
-+ if (intel->render_mask) {
- mask_unit = tex_unit++;
-
- is_affine_mask = intel_transform_is_affine(intel->transform[mask_unit]);
-@@ -650,15 +605,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
-
- OUT_VERTEX(dstX + w);
- OUT_VERTEX(dstY + h);
-- if (! intel->render_source_is_solid) {
-- OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]);
-- OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]);
-- if (!is_affine_src) {
-+ OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]);
-+ OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]);
-+ if (!is_affine_src) {
- OUT_VERTEX(0.0);
- OUT_VERTEX(src_w[2]);
-- }
- }
-- if (intel->render_mask && ! intel->render_mask_is_solid) {
-+ if (intel->render_mask) {
- OUT_VERTEX(mask_x[2] * intel->scale_units[mask_unit][0]);
- OUT_VERTEX(mask_y[2] * intel->scale_units[mask_unit][1]);
- if (!is_affine_mask) {
-@@ -669,15 +622,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
-
- OUT_VERTEX(dstX);
- OUT_VERTEX(dstY + h);
-- if (! intel->render_source_is_solid) {
-- OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]);
-- OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]);
-- if (!is_affine_src) {
-+ OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]);
-+ OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]);
-+ if (!is_affine_src) {
- OUT_VERTEX(0.0);
- OUT_VERTEX(src_w[1]);
-- }
- }
-- if (intel->render_mask && ! intel->render_mask_is_solid) {
-+ if (intel->render_mask) {
- OUT_VERTEX(mask_x[1] * intel->scale_units[mask_unit][0]);
- OUT_VERTEX(mask_y[1] * intel->scale_units[mask_unit][1]);
- if (!is_affine_mask) {
-@@ -688,15 +639,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
-
- OUT_VERTEX(dstX);
- OUT_VERTEX(dstY);
-- if (! intel->render_source_is_solid) {
-- OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]);
-- OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]);
-- if (!is_affine_src) {
-+ OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]);
-+ OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]);
-+ if (!is_affine_src) {
- OUT_VERTEX(0.0);
- OUT_VERTEX(src_w[0]);
-- }
- }
-- if (intel->render_mask && ! intel->render_mask_is_solid) {
-+ if (intel->render_mask) {
- OUT_VERTEX(mask_x[0] * intel->scale_units[mask_unit][0]);
- OUT_VERTEX(mask_y[0] * intel->scale_units[mask_unit][1]);
- if (!is_affine_mask) {
-@@ -729,29 +678,11 @@ i915_prepare_composite(int op, PicturePtr source_picture,
- intel->render_dest_picture = dest_picture;
- intel->render_dest = dest;
-
-- intel->render_source_is_solid = FALSE;
-- if (source_picture->pSourcePict) {
-- SourcePict *source = source_picture->pSourcePict;
-- if (source->type == SourcePictTypeSolidFill) {
-- intel->render_source_is_solid = TRUE;
-- intel->render_source_solid = source->solidFill.color;
-- }
-- }
-- if (!intel->render_source_is_solid && !intel_check_pitch_3d(source))
-+ if (!intel_check_pitch_3d(source))
- return FALSE;
-
-- intel->render_mask_is_solid = FALSE;
-- if (mask) {
-- if (mask_picture->pSourcePict) {
-- SourcePict *source = mask_picture->pSourcePict;
-- if (source->type == SourcePictTypeSolidFill) {
-- intel->render_mask_is_solid = TRUE;
-- intel->render_mask_solid = source->solidFill.color;
-- }
-- }
-- if (!intel->render_mask_is_solid && !intel_check_pitch_3d(mask))
-- return FALSE;
-- }
-+ if (mask && !intel_check_pitch_3d(mask))
-+ return FALSE;
-
- if (!intel_check_pitch_3d(dest))
- return FALSE;
-@@ -787,31 +718,27 @@ i915_prepare_composite(int op, PicturePtr source_picture,
- intel->scale_units[1][1] = -1;
-
- floats_per_vertex = 2; /* dest x/y */
-- if (! intel->render_source_is_solid) {
-- if (!i915_texture_setup(source_picture, source, tex_unit++)) {
-- intel_debug_fallback(scrn, "fail to setup src texture\n");
-- return FALSE;
-- }
--
-- if (intel_transform_is_affine(source_picture->transform))
-- floats_per_vertex += 2; /* src x/y */
-- else
-- floats_per_vertex += 4; /* src x/y/z/w */
-+ if (!i915_texture_setup(source_picture, source, tex_unit++)) {
-+ intel_debug_fallback(scrn, "fail to setup src texture\n");
-+ return FALSE;
- }
-
-- if (mask != NULL) {
-- if (! intel->render_mask_is_solid) {
-- if (!i915_texture_setup(mask_picture, mask, tex_unit++)) {
-- intel_debug_fallback(scrn,
-- "fail to setup mask texture\n");
-- return FALSE;
-- }
-+ if (intel_transform_is_affine(source_picture->transform))
-+ floats_per_vertex += 2; /* src x/y */
-+ else
-+ floats_per_vertex += 4; /* src x/y/z/w */
-
-- if (intel_transform_is_affine(mask_picture->transform))
-- floats_per_vertex += 2; /* mask x/y */
-- else
-- floats_per_vertex += 4; /* mask x/y/z/w */
-+ if (mask != NULL) {
-+ if (!i915_texture_setup(mask_picture, mask, tex_unit++)) {
-+ intel_debug_fallback(scrn,
-+ "fail to setup mask texture\n");
-+ return FALSE;
- }
-+
-+ if (intel_transform_is_affine(mask_picture->transform))
-+ floats_per_vertex += 2; /* mask x/y */
-+ else
-+ floats_per_vertex += 4; /* mask x/y/z/w */
- }
-
- intel->i915_render_state.op = op;
-@@ -827,17 +754,13 @@ i915_prepare_composite(int op, PicturePtr source_picture,
-
- intel->prim_emit = i915_emit_composite_primitive;
- if (!mask) {
-- if (intel->render_source_is_solid)
-- intel->prim_emit = i915_emit_composite_primitive_constant;
-- else if (intel->transform[0] == NULL)
-+ if (intel->transform[0] == NULL)
- intel->prim_emit = i915_emit_composite_primitive_identity_source;
- else if (intel_transform_is_affine(intel->transform[0]))
- intel->prim_emit = i915_emit_composite_primitive_affine_source;
- } else {
- if (intel->transform[0] == NULL) {
-- if (intel->render_source_is_solid)
-- intel->prim_emit = i915_emit_composite_primitive_constant_identity_mask;
-- else if (intel->transform[1] == NULL)
-+ if (intel->transform[1] == NULL)
- intel->prim_emit = i915_emit_composite_primitive_identity_source_mask;
- }
- }
-@@ -856,39 +779,25 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op)
- PicturePtr mask_picture = intel->render_mask_picture;
- PixmapPtr mask = intel->render_mask;
- int src_reg, mask_reg;
-- Bool is_solid_src, is_solid_mask;
- Bool dest_is_alpha = PIXMAN_FORMAT_RGB(intel->render_dest_picture->format) == 0;
-- int tex_unit, t;
- FS_LOCALS();
-
-- is_solid_src = intel->render_source_is_solid;
-- is_solid_mask = intel->render_mask_is_solid;
--
- FS_BEGIN();
-
- /* Declare the registers necessary for our program. */
-- t = 0;
-- if (is_solid_src) {
-- i915_fs_dcl(FS_T8);
-- src_reg = FS_T8;
-- } else {
-- i915_fs_dcl(FS_T0);
-- i915_fs_dcl(FS_S0);
-- t++;
-- }
-+ i915_fs_dcl(FS_T0);
-+ i915_fs_dcl(FS_S0);
- if (!mask) {
- /* No mask, so load directly to output color */
-- if (! is_solid_src) {
-- if (dest_is_alpha)
-- src_reg = FS_R0;
-- else
-- src_reg = FS_OC;
-+ if (dest_is_alpha)
-+ src_reg = FS_R0;
-+ else
-+ src_reg = FS_OC;
-
-- if (intel_transform_is_affine(intel->transform[0]))
-- i915_fs_texld(src_reg, FS_S0, FS_T0);
-- else
-- i915_fs_texldp(src_reg, FS_S0, FS_T0);
-- }
-+ if (intel_transform_is_affine(intel->transform[0]))
-+ i915_fs_texld(src_reg, FS_S0, FS_T0);
-+ else
-+ i915_fs_texldp(src_reg, FS_S0, FS_T0);
-
- if (src_reg != FS_OC) {
- if (dest_is_alpha)
-@@ -897,35 +806,24 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op)
- i915_fs_mov(FS_OC, i915_fs_operand_reg(src_reg));
- }
- } else {
-- if (is_solid_mask) {
-- i915_fs_dcl(FS_T9);
-- mask_reg = FS_T9;
-- } else {
-- i915_fs_dcl(FS_T0 + t);
-- i915_fs_dcl(FS_S0 + t);
-- }
-+ i915_fs_dcl(FS_T1);
-+ i915_fs_dcl(FS_S1);
-
-- tex_unit = 0;
-- if (! is_solid_src) {
-- /* Load the source_picture texel */
-- if (intel_transform_is_affine(intel->transform[tex_unit]))
-- i915_fs_texld(FS_R0, FS_S0, FS_T0);
-- else
-- i915_fs_texldp(FS_R0, FS_S0, FS_T0);
-+ /* Load the source_picture texel */
-+ if (intel_transform_is_affine(intel->transform[0]))
-+ i915_fs_texld(FS_R0, FS_S0, FS_T0);
-+ else
-+ i915_fs_texldp(FS_R0, FS_S0, FS_T0);
-
-- src_reg = FS_R0;
-- tex_unit++;
-- }
-+ src_reg = FS_R0;
-
-- if (! is_solid_mask) {
-- /* Load the mask_picture texel */
-- if (intel_transform_is_affine(intel->transform[tex_unit]))
-- i915_fs_texld(FS_R1, FS_S0 + t, FS_T0 + t);
-- else
-- i915_fs_texldp(FS_R1, FS_S0 + t, FS_T0 + t);
-+ /* Load the mask_picture texel */
-+ if (intel_transform_is_affine(intel->transform[1]))
-+ i915_fs_texld(FS_R1, FS_S1, FS_T1);
-+ else
-+ i915_fs_texldp(FS_R1, FS_S1, FS_T1);
-
-- mask_reg = FS_R1;
-- }
-+ mask_reg = FS_R1;
-
- if (dest_is_alpha) {
- i915_fs_mul(FS_OC,
-@@ -972,7 +870,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
- PicturePtr dest_picture = intel->render_dest_picture;
- PixmapPtr mask = intel->render_mask;
- PixmapPtr dest = intel->render_dest;
-- Bool is_solid_src, is_solid_mask;
- int tex_count, t;
-
- intel->needs_render_state_emit = FALSE;
-@@ -980,12 +877,7 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
- IntelEmitInvarientState(scrn);
- intel->last_3d = LAST_3D_RENDER;
-
-- is_solid_src = intel->render_source_is_solid;
-- is_solid_mask = intel->render_mask_is_solid;
--
-- tex_count = 0;
-- tex_count += ! is_solid_src;
-- tex_count += mask && ! is_solid_mask;
-+ tex_count = 1 + (mask != NULL);
-
- assert(intel->in_batch_atomic);
-
-@@ -1007,15 +899,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
- }
- }
-
-- if (is_solid_src) {
-- OUT_BATCH (_3DSTATE_DFLT_DIFFUSE_CMD);
-- OUT_BATCH (intel->render_source_solid);
-- }
-- if (mask && is_solid_mask) {
-- OUT_BATCH (_3DSTATE_DFLT_SPEC_CMD);
-- OUT_BATCH (intel->render_mask_solid);
-- }
--
- /* BUF_INFO is an implicit flush, so avoid if the target has not changed.
- * XXX However for reasons unfathomed, correct rendering in KDE requires
- * at least a MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH here.
-@@ -1058,20 +941,15 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
- uint32_t ss2;
-
- ss2 = ~0;
-- t = 0;
-- if (! is_solid_src) {
-- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT);
-- ss2 |= S2_TEXCOORD_FMT(t,
-- intel_transform_is_affine(intel->transform[t]) ?
-- TEXCOORDFMT_2D : TEXCOORDFMT_4D);
-- t++;
-- }
-- if (mask && ! is_solid_mask) {
-- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT);
-- ss2 |= S2_TEXCOORD_FMT(t,
-- intel_transform_is_affine(intel->transform[t]) ?
-+ ss2 &= ~S2_TEXCOORD_FMT(0, TEXCOORDFMT_NOT_PRESENT);
-+ ss2 |= S2_TEXCOORD_FMT(0,
-+ intel_transform_is_affine(intel->transform[0]) ?
-+ TEXCOORDFMT_2D : TEXCOORDFMT_4D);
-+ if (mask) {
-+ ss2 &= ~S2_TEXCOORD_FMT(1, TEXCOORDFMT_NOT_PRESENT);
-+ ss2 |= S2_TEXCOORD_FMT(1,
-+ intel_transform_is_affine(intel->transform[1]) ?
- TEXCOORDFMT_2D : TEXCOORDFMT_4D);
-- t++;
- }
-
- if (intel->needs_render_ca_pass) {
---
-1.7.10
-