Pass filter kernel size through transforms

This commit is contained in:
Keith Packard 2008-03-17 15:20:52 -07:00
parent 1df02d7ddd
commit 16c093afd4
2 changed files with 20 additions and 10 deletions

View File

@ -111,6 +111,8 @@ struct _rrTransform {
PictFilterPtr filter; PictFilterPtr filter;
xFixed *params; xFixed *params;
int nparams; int nparams;
int width;
int height;
}; };
struct _rrCrtc { struct _rrCrtc {

View File

@ -62,7 +62,9 @@ static Bool
RRTransformSetFilter (RRTransformPtr dst, RRTransformSetFilter (RRTransformPtr dst,
PictFilterPtr filter, PictFilterPtr filter,
xFixed *params, xFixed *params,
int nparams) int nparams,
int width,
int height)
{ {
xFixed *new_params; xFixed *new_params;
@ -80,6 +82,8 @@ RRTransformSetFilter (RRTransformPtr dst,
dst->filter = filter; dst->filter = filter;
dst->params = new_params; dst->params = new_params;
dst->nparams = nparams; dst->nparams = nparams;
dst->width = width;
dst->height = height;
return TRUE; return TRUE;
} }
@ -87,7 +91,7 @@ static Bool
RRTransformCopy (RRTransformPtr dst, RRTransformPtr src) RRTransformCopy (RRTransformPtr dst, RRTransformPtr src)
{ {
if (!RRTransformSetFilter (dst, src->filter, if (!RRTransformSetFilter (dst, src->filter,
src->params, src->nparams)) src->params, src->nparams, src->width, src->height))
return FALSE; return FALSE;
dst->transform = src->transform; dst->transform = src->transform;
dst->inverse = src->inverse; dst->inverse = src->inverse;
@ -602,6 +606,7 @@ RRCrtcTransformSet (RRCrtcPtr crtc,
int nparams) int nparams)
{ {
PictFilterPtr filter = NULL; PictFilterPtr filter = NULL;
int width = 0, height = 0;
if (!PictureTransformIsInverse (transform, inverse)) if (!PictureTransformIsInverse (transform, inverse))
return BadMatch; return BadMatch;
@ -615,9 +620,13 @@ RRCrtcTransformSet (RRCrtcPtr crtc,
if (filter->ValidateParams) if (filter->ValidateParams)
{ {
if (!filter->ValidateParams (crtc->pScreen, filter->id, if (!filter->ValidateParams (crtc->pScreen, filter->id,
params, nparams)) params, nparams, &width, &height))
return BadMatch; return BadMatch;
} }
else {
width = filter->width;
height = filter->height;
}
} }
else else
{ {
@ -625,7 +634,7 @@ RRCrtcTransformSet (RRCrtcPtr crtc,
return BadMatch; return BadMatch;
} }
if (!RRTransformSetFilter (&crtc->client_pending_transform, if (!RRTransformSetFilter (&crtc->client_pending_transform,
filter, params, nparams)) filter, params, nparams, width, height))
return BadAlloc; return BadAlloc;
crtc->client_pending_transform.transform = *transform; crtc->client_pending_transform.transform = *transform;
@ -1037,12 +1046,11 @@ ProcRRSetCrtcConfig (ClientPtr client)
int source_height; int source_height;
PictTransform transform, inverse; PictTransform transform, inverse;
if (!RRComputeTransform (mode, stuff->rotation, RRComputeTransform (mode, stuff->rotation,
stuff->x, stuff->y, stuff->x, stuff->y,
&crtc->client_pending_transform.transform, &crtc->client_pending_transform.transform,
&crtc->client_pending_transform.inverse, &crtc->client_pending_transform.inverse,
&transform, &inverse)) &transform, &inverse);
return BadMatch;
RRModeGetScanoutSize (mode, &transform, &source_width, &source_height); RRModeGetScanoutSize (mode, &transform, &source_width, &source_height);
if (stuff->x + source_width > pScreen->width) if (stuff->x + source_width > pScreen->width)