xf86-video-intel: src/i965_render.c
Eric Anholt
anholt at kemper.freedesktop.org
Tue Jan 27 14:38:57 PST 2009
src/i965_render.c | 82 ++++++++++++++++++++++++++++++------------------------
1 file changed, 47 insertions(+), 35 deletions(-)
New commits:
commit 6c0ca1676bf60529dd331cc739abdf68fa9e918d
Author: Eric Anholt <eric at anholt.net>
Date: Wed Jan 21 15:52:02 2009 -0800
Don't forget the new state bos in check_aperture.
They're tiny so it shouldn't have been a problem, but play it safe. This is
another <5% loss on top of the previously reported value, bringing the whole
series to about 8%.
diff --git a/src/i965_render.c b/src/i965_render.c
index 7092fc9..de1c8b3 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -487,6 +487,7 @@ typedef struct gen4_composite_op {
sampler_state_extend_t src_extend;
sampler_state_extend_t mask_extend;
Bool is_affine;
+ wm_kernel_t wm_kernel;
} gen4_composite_op;
/** Private data for gen4 render accel implementation. */
@@ -1007,7 +1008,6 @@ i965_emit_composite_state(ScrnInfoPtr pScrn)
int urb_cs_start, urb_cs_size;
uint32_t src_blend, dst_blend;
dri_bo *binding_table_bo = composite_op->binding_table_bo;
- wm_kernel_t wm_kernel;
render_state->needs_state_emit = FALSE;
@@ -1118,34 +1118,7 @@ i965_emit_composite_state(ScrnInfoPtr pScrn)
I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
}
- if (pMask) {
- if (pMaskPicture->componentAlpha &&
- PICT_FORMAT_RGB(pMaskPicture->format))
- {
- if (i965_blend_op[op].src_alpha) {
- if (is_affine)
- wm_kernel = WM_KERNEL_MASKCA_SRCALPHA_AFFINE;
- else
- wm_kernel = WM_KERNEL_MASKCA_SRCALPHA_PROJECTIVE;
- } else {
- if (is_affine)
- wm_kernel = WM_KERNEL_MASKCA_AFFINE;
- else
- wm_kernel = WM_KERNEL_MASKCA_PROJECTIVE;
- }
- } else {
- if (is_affine)
- wm_kernel = WM_KERNEL_MASKNOCA_AFFINE;
- else
- wm_kernel = WM_KERNEL_MASKNOCA_PROJECTIVE;
- }
- } else {
- if (is_affine)
- wm_kernel = WM_KERNEL_NOMASK_AFFINE;
- else
- wm_kernel = WM_KERNEL_NOMASK_PROJECTIVE;
- }
- OUT_RELOC(render_state->wm_state_bo[wm_kernel]
+ OUT_RELOC(render_state->wm_state_bo[composite_op->wm_kernel]
[src_filter][src_extend]
[mask_filter][mask_extend],
I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
@@ -1264,6 +1237,16 @@ i965_composite_check_aperture(ScrnInfoPtr pScrn)
pI830->batch_bo,
composite_op->binding_table_bo,
render_state->vertex_buffer_bo,
+ render_state->vs_state_bo,
+ render_state->sf_state_bo,
+ render_state->sf_mask_state_bo,
+ render_state->wm_state_bo[composite_op->wm_kernel]
+ [composite_op->src_filter]
+ [composite_op->src_extend]
+ [composite_op->mask_filter]
+ [composite_op->mask_extend],
+ render_state->cc_state_bo,
+ render_state->sip_kernel_bo,
};
return drm_intel_bufmgr_check_aperture_space(bo_table,
@@ -1369,12 +1352,6 @@ i965_prepare_composite(int op, PicturePtr pSrcPicture,
composite_op->src_filter =
sampler_state_filter_from_picture(pSrcPicture->filter);
- if (!i965_composite_check_aperture(pScrn)) {
- intel_batch_flush(pScrn, FALSE);
- if (!i965_composite_check_aperture(pScrn))
- I830FALLBACK("Couldn't fit render operation in aperture\n");
- }
-
pI830->scale_units[0][0] = pSrc->drawable.width;
pI830->scale_units[0][1] = pSrc->drawable.height;
@@ -1394,6 +1371,41 @@ i965_prepare_composite(int op, PicturePtr pSrcPicture,
i830_transform_is_affine(pI830->transform[1]);
}
+
+ if (pMask) {
+ if (pMaskPicture->componentAlpha &&
+ PICT_FORMAT_RGB(pMaskPicture->format))
+ {
+ if (i965_blend_op[op].src_alpha) {
+ if (composite_op->is_affine)
+ composite_op->wm_kernel = WM_KERNEL_MASKCA_SRCALPHA_AFFINE;
+ else
+ composite_op->wm_kernel = WM_KERNEL_MASKCA_SRCALPHA_PROJECTIVE;
+ } else {
+ if (composite_op->is_affine)
+ composite_op->wm_kernel = WM_KERNEL_MASKCA_AFFINE;
+ else
+ composite_op->wm_kernel = WM_KERNEL_MASKCA_PROJECTIVE;
+ }
+ } else {
+ if (composite_op->is_affine)
+ composite_op->wm_kernel = WM_KERNEL_MASKNOCA_AFFINE;
+ else
+ composite_op->wm_kernel = WM_KERNEL_MASKNOCA_PROJECTIVE;
+ }
+ } else {
+ if (composite_op->is_affine)
+ composite_op->wm_kernel = WM_KERNEL_NOMASK_AFFINE;
+ else
+ composite_op->wm_kernel = WM_KERNEL_NOMASK_PROJECTIVE;
+ }
+
+ if (!i965_composite_check_aperture(pScrn)) {
+ intel_batch_flush(pScrn, FALSE);
+ if (!i965_composite_check_aperture(pScrn))
+ I830FALLBACK("Couldn't fit render operation in aperture\n");
+ }
+
render_state->needs_state_emit = TRUE;
return TRUE;
More information about the xorg-commit
mailing list