xf86-video-intel: 14 commits - src/i965_render.c src/intel_display.c src/intel_dri.c src/intel.h src/intel_video.c src/legacy/i810 src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_display.c src/sna/sna_gradient.c src/sna/sna.h src/sna/sna_transform.c src/sna/sna_video_textured.c
Chris Wilson
ickle at kemper.freedesktop.org
Sat Jun 2 00:41:59 PDT 2012
src/i965_render.c | 179 +++++++++++++++++++++++++++----------------
src/intel.h | 17 ++--
src/intel_display.c | 2
src/intel_dri.c | 2
src/intel_video.c | 11 +-
src/legacy/i810/i810_dri.c | 9 +-
src/legacy/i810/i810_video.c | 40 ++++-----
src/sna/gen4_render.c | 86 +++++++++-----------
src/sna/gen5_render.c | 87 +++++++++-----------
src/sna/gen6_render.c | 4
src/sna/gen7_render.c | 4
src/sna/sna.h | 2
src/sna/sna_display.c | 2
src/sna/sna_gradient.c | 21 ++++-
src/sna/sna_transform.c | 18 ++--
src/sna/sna_video_textured.c | 2
16 files changed, 269 insertions(+), 217 deletions(-)
New commits:
commit 1be2afb81df887ed664ac31d0641da808cfb8888
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Jun 2 08:04:02 2012 +0100
legacy/i810/video: Release memory after creating adaptors
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/legacy/i810/i810_video.c b/src/legacy/i810/i810_video.c
index 2999ee0..729aa8b 100644
--- a/src/legacy/i810/i810_video.c
+++ b/src/legacy/i810/i810_video.c
@@ -155,40 +155,34 @@ static Atom xvBrightness, xvContrast, xvColorKey;
void I810InitVideo(ScreenPtr screen)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
- XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- XF86VideoAdaptorPtr newAdaptor = NULL;
+ XF86VideoAdaptorPtr *adaptors;
int num_adaptors;
-
- if (pScrn->bitsPerPixel != 8)
- {
+
+ num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+
+ if (pScrn->bitsPerPixel != 8) {
+ XF86VideoAdaptorPtr newAdaptor;
+
newAdaptor = I810SetupImageVideo(screen);
I810InitOffscreenImages(screen);
- }
- num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+ if (newAdaptor) {
+ XF86VideoAdaptorPtr *newAdaptors;
- if(newAdaptor) {
- if(!num_adaptors) {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- } else {
- newAdaptors = /* need to free this someplace */
- malloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));
- if(newAdaptors) {
- memcpy(newAdaptors, adaptors, num_adaptors *
- sizeof(XF86VideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
+ newAdaptors =
+ realloc(adaptors,
+ (num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr));
+ if (newAdaptors != NULL) {
+ newAdaptors[num_adaptors++] = newAdaptor;
adaptors = newAdaptors;
- num_adaptors++;
}
}
}
- if(num_adaptors)
- xf86XVScreenInit(screen, adaptors, num_adaptors);
+ if (num_adaptors)
+ xf86XVScreenInit(screen, adaptors, num_adaptors);
- if(newAdaptors)
- free(newAdaptors);
+ free(adaptors);
}
/* *INDENT-OFF* */
commit 261d086265fff6c9b28a67d2fcceed8f107d5cb0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
legacy/i810/dri: Propagate failure from allocating texture memory
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/legacy/i810/i810_dri.c b/src/legacy/i810/i810_dri.c
index 2b3f1e1..28a3b91 100644
--- a/src/legacy/i810/i810_dri.c
+++ b/src/legacy/i810/i810_dri.c
@@ -809,7 +809,12 @@ I810DRIScreenInit(ScreenPtr pScreen)
return FALSE;
}
- I810AllocLow(&(pI810->TexMem), &(pI810->SysMem), pI810DRI->textureSize);
+ if (!I810AllocLow(&(pI810->TexMem), &(pI810->SysMem), pI810DRI->textureSize)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "[agp] Texure memory allocation failed\n");
+ DRICloseScreen(pScreen);
+ return FALSE;
+ }
if (drmAddMap(pI810->drmSubFD, (drm_handle_t) pI810->TexMem.Start,
pI810->TexMem.Size, DRM_AGP, 0,
commit 2ea12b56d42686f75deb33fc126d09acee7e2899
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
legacy/i810: Fix memset(sizeof(*ptr)) rather than memset(sizeof(ptr))
Clear the entire structure and not the first 4 bytes...
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/legacy/i810/i810_dri.c b/src/legacy/i810/i810_dri.c
index 2f02dd9..2b3f1e1 100644
--- a/src/legacy/i810/i810_dri.c
+++ b/src/legacy/i810/i810_dri.c
@@ -959,7 +959,7 @@ I810DRIFinishScreenInit(ScreenPtr pScreen)
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
I810Ptr info = I810PTR(pScrn);
- memset(sPriv, 0, sizeof(sPriv));
+ memset(sPriv, 0, sizeof(*sPriv));
/* Have shadow run only while there is 3d active.
*/
commit d3e15d1460faad192781d74fdc2b5092e9c148ad
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Jun 2 08:14:23 2012 +0100
uxa/i965: Make the unhandled allocation failures explicit
Add assertions to the point of allocation and write failures.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/i965_render.c b/src/i965_render.c
index f9d3158..508a846 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -778,13 +778,16 @@ static drm_intel_bo *gen4_create_sf_state(intel_screen_private *intel,
{
struct brw_sf_unit_state *sf_state;
drm_intel_bo *sf_state_bo;
+ int ret;
sf_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 SF state",
sizeof(*sf_state), 4096);
- drm_intel_bo_map(sf_state_bo, TRUE);
- sf_state = sf_state_bo->virtual;
+ assert(sf_state_bo);
- memset(sf_state, 0, sizeof(*sf_state));
+ ret = drm_intel_bo_map(sf_state_bo, TRUE);
+ assert(ret == 0);
+
+ sf_state = memset(sf_state_bo->virtual, 0, sizeof(*sf_state));
sf_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(SF_KERNEL_NUM_GRF);
sf_state->thread0.kernel_start_pointer =
intel_emit_reloc(sf_state_bo,
@@ -820,6 +823,7 @@ static drm_intel_bo *gen4_create_sf_state(intel_screen_private *intel,
drm_intel_bo_unmap(sf_state_bo);
return sf_state_bo;
+ (void)ret;
}
static drm_intel_bo *sampler_border_color_create(intel_screen_private *intel)
@@ -982,11 +986,16 @@ static drm_intel_bo *gen4_create_sampler_state(intel_screen_private *intel,
{
drm_intel_bo *sampler_state_bo;
struct brw_sampler_state *sampler_state;
+ int ret;
sampler_state_bo =
drm_intel_bo_alloc(intel->bufmgr, "gen4 sampler state",
sizeof(struct brw_sampler_state) * 2, 4096);
- drm_intel_bo_map(sampler_state_bo, TRUE);
+ assert(sampler_state_bo);
+
+ ret = drm_intel_bo_map(sampler_state_bo, TRUE);
+ assert(ret == 0);
+
sampler_state = sampler_state_bo->virtual;
gen4_sampler_state_init(sampler_state_bo,
@@ -999,6 +1008,7 @@ static drm_intel_bo *gen4_create_sampler_state(intel_screen_private *intel,
drm_intel_bo_unmap(sampler_state_bo);
return sampler_state_bo;
+ (void)ret;
}
static drm_intel_bo *
@@ -1011,11 +1021,16 @@ gen7_create_sampler_state(intel_screen_private *intel,
{
drm_intel_bo *sampler_state_bo;
struct gen7_sampler_state *sampler_state;
+ int ret;
sampler_state_bo =
drm_intel_bo_alloc(intel->bufmgr, "gen7 sampler state",
sizeof(struct gen7_sampler_state) * 2, 4096);
- drm_intel_bo_map(sampler_state_bo, TRUE);
+ assert(sampler_state_bo);
+
+ ret = drm_intel_bo_map(sampler_state_bo, TRUE);
+ assert(ret == 0);
+
sampler_state = sampler_state_bo->virtual;
gen7_sampler_state_init(sampler_state_bo,
@@ -1028,6 +1043,7 @@ gen7_create_sampler_state(intel_screen_private *intel,
drm_intel_bo_unmap(sampler_state_bo);
return sampler_state_bo;
+ (void)ret;
}
static inline drm_intel_bo *
@@ -1096,13 +1112,16 @@ static drm_intel_bo *gen4_create_wm_state(intel_screen_private *intel,
{
struct brw_wm_unit_state *state;
drm_intel_bo *wm_state_bo;
+ int ret;
wm_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 WM state",
sizeof(*state), 4096);
- drm_intel_bo_map(wm_state_bo, TRUE);
- state = wm_state_bo->virtual;
+ assert(wm_state_bo);
- memset(state, 0, sizeof(*state));
+ ret = drm_intel_bo_map(wm_state_bo, TRUE);
+ assert(ret == 0);
+
+ state = memset(wm_state_bo->virtual, 0, sizeof(*state));
state->thread0.grf_reg_count = BRW_GRF_BLOCKS(PS_KERNEL_NUM_GRF);
state->thread0.kernel_start_pointer =
intel_emit_reloc(wm_state_bo,
@@ -1162,21 +1181,27 @@ static drm_intel_bo *gen4_create_wm_state(intel_screen_private *intel,
drm_intel_bo_unmap(wm_state_bo);
return wm_state_bo;
+ (void)ret;
}
static drm_intel_bo *gen4_create_cc_viewport(intel_screen_private *intel)
{
drm_intel_bo *bo;
struct brw_cc_viewport vp;
+ int ret;
vp.min_depth = -1.e35;
vp.max_depth = 1.e35;
bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 render unit state",
sizeof(vp), 4096);
- drm_intel_bo_subdata(bo, 0, sizeof(vp), &vp);
+ assert(bo);
+
+ ret = drm_intel_bo_subdata(bo, 0, sizeof(vp), &vp);
+ assert(ret == 0);
return bo;
+ (void)ret;
}
static drm_intel_bo *gen4_create_vs_unit_state(intel_screen_private *intel)
@@ -1204,14 +1229,18 @@ static drm_intel_bo *gen4_create_vs_unit_state(intel_screen_private *intel)
static drm_intel_bo *gen4_create_cc_unit_state(intel_screen_private *intel)
{
drm_intel_bo *cc_state_bo, *cc_vp_bo;
- int i, j;
+ int i, j, ret;
cc_vp_bo = gen4_create_cc_viewport(intel);
cc_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 CC state",
sizeof(struct gen4_cc_unit_state),
4096);
- drm_intel_bo_map(cc_state_bo, TRUE);
+ assert(cc_state_bo);
+
+ ret = drm_intel_bo_map(cc_state_bo, TRUE);
+ assert(ret == 0);
+
for (i = 0; i < BRW_BLENDFACTOR_COUNT; i++) {
for (j = 0; j < BRW_BLENDFACTOR_COUNT; j++) {
cc_state_init(cc_state_bo,
@@ -1225,6 +1254,7 @@ static drm_intel_bo *gen4_create_cc_unit_state(intel_screen_private *intel)
drm_intel_bo_unreference(cc_vp_bo);
return cc_state_bo;
+ (void)ret;
}
static uint32_t i965_get_card_format(PicturePtr picture)
@@ -1724,9 +1754,12 @@ static Bool i965_composite_check_aperture(intel_screen_private *intel)
static void i965_surface_flush(struct intel_screen_private *intel)
{
- drm_intel_bo_subdata(intel->surface_bo,
- 0, intel->surface_used,
- intel->surface_data);
+ int ret;
+
+ ret = drm_intel_bo_subdata(intel->surface_bo,
+ 0, intel->surface_used,
+ intel->surface_data);
+ assert(ret == 0);
intel->surface_used = 0;
assert (intel->surface_reloc != 0);
@@ -1740,6 +1773,10 @@ static void i965_surface_flush(struct intel_screen_private *intel)
intel->surface_bo =
drm_intel_bo_alloc(intel->bufmgr, "surface data",
sizeof(intel->surface_data), 4096);
+ assert(intel->surface_bo);
+
+ return;
+ (void)ret;
}
static void
@@ -2297,6 +2334,8 @@ void gen4_render_state_init(ScrnInfoPtr scrn)
intel->surface_bo =
drm_intel_bo_alloc(intel->bufmgr, "surface data",
sizeof(intel->surface_data), 4096);
+ assert(intel->surface_bo);
+
intel->surface_used = 0;
if (intel->gen4_render_state == NULL)
@@ -2433,14 +2472,18 @@ gen6_composite_create_cc_state(intel_screen_private *intel)
{
struct gen6_color_calc_state *state;
drm_intel_bo *cc_bo;
+ int ret;
cc_bo = drm_intel_bo_alloc(intel->bufmgr,
"gen6 CC state",
sizeof(*state),
4096);
- drm_intel_bo_map(cc_bo, TRUE);
- state = cc_bo->virtual;
- memset(state, 0, sizeof(*state));
+ assert(cc_bo);
+
+ ret = drm_intel_bo_map(cc_bo, TRUE);
+ assert(ret == 0);
+
+ state = memset(cc_bo->virtual, 0, sizeof(*state));
state->constant_r = 1.0;
state->constant_g = 0.0;
state->constant_b = 1.0;
@@ -2448,21 +2491,25 @@ gen6_composite_create_cc_state(intel_screen_private *intel)
drm_intel_bo_unmap(cc_bo);
return cc_bo;
+ (void)ret;
}
static drm_intel_bo *
gen6_composite_create_blend_state(intel_screen_private *intel)
{
drm_intel_bo *blend_bo;
- int src, dst;
+ int src, dst, ret;
blend_bo = drm_intel_bo_alloc(intel->bufmgr,
"gen6 BLEND state",
BRW_BLENDFACTOR_COUNT * BRW_BLENDFACTOR_COUNT * GEN6_BLEND_STATE_PADDED_SIZE,
4096);
- drm_intel_bo_map(blend_bo, TRUE);
- memset(blend_bo->virtual, 0, blend_bo->size);
+ assert(blend_bo);
+ ret = drm_intel_bo_map(blend_bo, TRUE);
+ assert(ret == 0);
+
+ memset(blend_bo->virtual, 0, blend_bo->size);
for (src = 0; src < BRW_BLENDFACTOR_COUNT; src++) {
for (dst = 0; dst < BRW_BLENDFACTOR_COUNT; dst++) {
uint32_t blend_state_offset = (src * BRW_BLENDFACTOR_COUNT + dst) * GEN6_BLEND_STATE_PADDED_SIZE;
@@ -2481,6 +2528,7 @@ gen6_composite_create_blend_state(intel_screen_private *intel)
drm_intel_bo_unmap(blend_bo);
return blend_bo;
+ (void)ret;
}
static drm_intel_bo *
@@ -2488,17 +2536,22 @@ gen6_composite_create_depth_stencil_state(intel_screen_private *intel)
{
struct gen6_depth_stencil_state *state;
drm_intel_bo *depth_stencil_bo;
+ int ret;
depth_stencil_bo = drm_intel_bo_alloc(intel->bufmgr,
"gen6 DEPTH_STENCIL state",
sizeof(*state),
4096);
- drm_intel_bo_map(depth_stencil_bo, TRUE);
- state = depth_stencil_bo->virtual;
- memset(state, 0, sizeof(*state));
+ assert(depth_stencil_bo);
+
+ ret = drm_intel_bo_map(depth_stencil_bo, TRUE);
+ assert(ret == 0);
+
+ state = memset(depth_stencil_bo->virtual, 0, sizeof(*state));
drm_intel_bo_unmap(depth_stencil_bo);
return depth_stencil_bo;
+ (void)ret;
}
static void
diff --git a/src/intel.h b/src/intel.h
index 9e9de04..20d8282 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -601,11 +601,16 @@ static inline drm_intel_bo *intel_bo_alloc_for_data(intel_screen_private *intel,
const char *name)
{
drm_intel_bo *bo;
+ int ret;
bo = drm_intel_bo_alloc(intel->bufmgr, name, size, 4096);
- if (bo)
- drm_intel_bo_subdata(bo, 0, size, data);
+ assert(bo);
+
+ ret = drm_intel_bo_subdata(bo, 0, size, data);
+ assert(ret == 0);
+
return bo;
+ (void)ret;
}
void intel_debug_flush(ScrnInfoPtr scrn);
commit 46fbb3d31bf73df4bd0259a146e9929f62a9c488
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
uxa: NameForAtom may return NULL
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/intel_display.c b/src/intel_display.c
index 89f7259..609cbf7 100644
--- a/src/intel_display.c
+++ b/src/intel_display.c
@@ -1176,6 +1176,8 @@ intel_output_set_property(xf86OutputPtr output, Atom property,
return FALSE;
memcpy(&atom, value->data, 4);
name = NameForAtom(atom);
+ if (name == NULL)
+ return FALSE;
/* search for matching name string, then set its value down */
for (j = 0; j < p->mode_prop->count_enums; j++) {
commit 8451d5dd3c992bcfad9f71aa890b6b225884b978
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
uxa: Use unsigned bitfields for single bits
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/intel.h b/src/intel.h
index 4bdeab3..9e9de04 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -88,9 +88,9 @@ struct intel_pixmap {
uint16_t stride;
uint8_t tiling;
int8_t busy :2;
- int8_t dirty :1;
- int8_t offscreen :1;
- int8_t pinned :1;
+ uint8_t dirty :1;
+ uint8_t offscreen :1;
+ uint8_t pinned :1;
};
#if HAS_DEVPRIVATEKEYREC
commit d66ca06865973833398560a04186e0067d9cb206
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
uxa: Intialize is_glamor_pixmap
It is not clear whether is_glamor_pixmap is always initialized prior to
use, so set it to a safe^W likely value.
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/intel_dri.c b/src/intel_dri.c
index 2a95edb..389ecdd 100644
--- a/src/intel_dri.c
+++ b/src/intel_dri.c
@@ -263,8 +263,8 @@ I830DRI2CreateBuffers(DrawablePtr drawable, unsigned int *attachments,
DRI2BufferPtr buffers;
I830DRI2BufferPrivatePtr privates;
PixmapPtr pixmap, pDepthPixmap;
+ int is_glamor_pixmap = FALSE;
int i;
- int is_glamor_pixmap;
buffers = calloc(count, sizeof *buffers);
if (buffers == NULL)
commit 25a17b2ca5e3945150151c4308761891c0e20bab
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
uxa: Remove 'render_source_is_solid' dead code
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/i965_render.c b/src/i965_render.c
index 98231b8..f9d3158 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -1847,47 +1847,45 @@ i965_emit_composite_primitive(intel_screen_private *intel,
float src_x[3], src_y[3], src_w[3], mask_x[3], mask_y[3], mask_w[3];
Bool is_affine = intel->gen4_render_state->composite_op.is_affine;
- if (! intel->render_source_is_solid) {
- if (is_affine) {
- if (!intel_get_transformed_coordinates(srcX, srcY,
- intel->transform[0],
- &src_x[0],
- &src_y[0]))
- return;
-
- if (!intel_get_transformed_coordinates(srcX, srcY + h,
- intel->transform[0],
- &src_x[1],
- &src_y[1]))
- return;
-
- if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
- intel->transform[0],
- &src_x[2],
- &src_y[2]))
- return;
- } else {
- if (!intel_get_transformed_coordinates_3d(srcX, srcY,
- intel->transform[0],
- &src_x[0],
- &src_y[0],
- &src_w[0]))
- return;
-
- if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
- intel->transform[0],
- &src_x[1],
- &src_y[1],
- &src_w[1]))
- return;
-
- if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
- intel->transform[0],
- &src_x[2],
- &src_y[2],
- &src_w[2]))
- return;
- }
+ if (is_affine) {
+ if (!intel_get_transformed_coordinates(srcX, srcY,
+ intel->transform[0],
+ &src_x[0],
+ &src_y[0]))
+ return;
+
+ if (!intel_get_transformed_coordinates(srcX, srcY + h,
+ intel->transform[0],
+ &src_x[1],
+ &src_y[1]))
+ return;
+
+ if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
+ intel->transform[0],
+ &src_x[2],
+ &src_y[2]))
+ return;
+ } else {
+ if (!intel_get_transformed_coordinates_3d(srcX, srcY,
+ intel->transform[0],
+ &src_x[0],
+ &src_y[0],
+ &src_w[0]))
+ return;
+
+ if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
+ intel->transform[0],
+ &src_x[1],
+ &src_y[1],
+ &src_w[1]))
+ return;
+
+ if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
+ intel->transform[0],
+ &src_x[2],
+ &src_y[2],
+ &src_w[2]))
+ return;
}
if (intel->render_mask) {
diff --git a/src/intel.h b/src/intel.h
index 253a6bf..4bdeab3 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -268,8 +268,6 @@ typedef struct intel_screen_private {
PixmapPtr render_source, render_mask, render_dest;
PicturePtr render_source_picture, render_mask_picture, render_dest_picture;
- CARD32 render_source_solid;
- Bool render_source_is_solid;
Bool needs_3d_invariant;
Bool needs_render_state_emit;
Bool needs_render_vertex_emit;
commit ba0eb230836fa5f94a2f50da5880fdd3b9dfd72e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
uxa: Fix reallocation of XVAdaptors array
Prevent the leak and remove some unsightly code in the process.
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/intel_video.c b/src/intel_video.c
index 83d1eab..09674e5 100644
--- a/src/intel_video.c
+++ b/src/intel_video.c
@@ -337,13 +337,12 @@ void I830InitVideo(ScreenPtr screen)
/* Give our adaptor list enough space for the overlay and/or texture video
* adaptors.
*/
- newAdaptors =
- malloc((num_adaptors + 2) * sizeof(XF86VideoAdaptorPtr *));
- if (newAdaptors == NULL)
+ newAdaptors = realloc(adaptors,
+ (num_adaptors + 2) * sizeof(XF86VideoAdaptorPtr));
+ if (newAdaptors == NULL) {
+ free(adaptors);
return;
-
- memcpy(newAdaptors, adaptors,
- num_adaptors * sizeof(XF86VideoAdaptorPtr));
+ }
adaptors = newAdaptors;
/* Add the adaptors supported by our hardware. First, set up the atoms
commit affb1f82c1401bac3f54654a342e3b16b8bd374b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Jun 2 08:27:59 2012 +0100
sna/gradient: Reuse old gradient bo if allocation of new fails
Prefer a stall to a crash.
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_gradient.c b/src/sna/sna_gradient.c
index 0fda6ce..9ac0328 100644
--- a/src/sna/sna_gradient.c
+++ b/src/sna/sna_gradient.c
@@ -235,6 +235,7 @@ static void
sna_render_finish_solid(struct sna *sna, bool force)
{
struct sna_solid_cache *cache = &sna->render.solid_cache;
+ struct kgem_bo *old;
int i;
DBG(("sna_render_finish_solid(force=%d, domain=%d, busy=%d, dirty=%d)\n",
@@ -253,16 +254,25 @@ sna_render_finish_solid(struct sna *sna, bool force)
kgem_bo_destroy(&sna->kgem, cache->bo[i]);
cache->bo[i] = NULL;
}
- kgem_bo_destroy(&sna->kgem, cache->cache_bo);
+
+ old = cache->cache_bo;
DBG(("sna_render_finish_solid reset\n"));
cache->cache_bo = kgem_create_linear(&sna->kgem, sizeof(cache->color), 0);
+ if (cache->cache_bo == NULL) {
+ cache->cache_bo = old;
+ old = NULL;
+ }
+
cache->bo[0] = kgem_create_proxy(&sna->kgem, cache->cache_bo,
0, sizeof(uint32_t));
cache->bo[0]->pitch = 4;
if (force)
cache->size = 1;
+
+ if (old)
+ kgem_bo_destroy(&sna->kgem, old);
}
struct kgem_bo *
commit e51f984a4c15de42c5bee3aeacee553e2dd4eca0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Jun 2 08:23:35 2012 +0100
sna: Check gradient allocations during init
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_gradient.c b/src/sna/sna_gradient.c
index a52cfb5..0fda6ce 100644
--- a/src/sna/sna_gradient.c
+++ b/src/sna/sna_gradient.c
@@ -336,10 +336,12 @@ static Bool sna_alpha_cache_init(struct sna *sna)
cache->cache_bo,
sizeof(uint32_t)*i,
sizeof(uint32_t));
+ if (cache->bo[i] == NULL)
+ return FALSE;
+
cache->bo[i]->pitch = 4;
}
- kgem_bo_write(&sna->kgem, cache->cache_bo, color, sizeof(color));
- return TRUE;
+ return kgem_bo_write(&sna->kgem, cache->cache_bo, color, sizeof(color));
}
static Bool sna_solid_cache_init(struct sna *sna)
@@ -360,6 +362,9 @@ static Bool sna_solid_cache_init(struct sna *sna)
cache->color[0] = 0xffffffff;
cache->bo[0] = kgem_create_proxy(&sna->kgem, cache->cache_bo,
0, sizeof(uint32_t));
+ if (cache->bo[0] == NULL)
+ return FALSE;
+
cache->bo[0]->pitch = 4;
cache->dirty = 1;
cache->size = 1;
commit 2c5647a18e7856b604bce70270463fc128c2cfcd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
sna: NameForAtom may return NULL
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 5ed3179..9fd59f8 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1509,6 +1509,8 @@ sna_output_set_property(xf86OutputPtr output, Atom property,
return FALSE;
memcpy(&atom, value->data, 4);
name = NameForAtom(atom);
+ if (name == NULL)
+ return FALSE;
/* search for matching name string, then set its value down */
for (j = 0; j < p->mode_prop->count_enums; j++) {
diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c
index bc117a4..33f3f71 100644
--- a/src/sna/sna_video_textured.c
+++ b/src/sna/sna_video_textured.c
@@ -387,7 +387,7 @@ XF86VideoAdaptorPtr sna_video_textured_setup(struct sna *sna,
return NULL;
}
- if (sna->kgem.wedged) {
+ if (wedged(sna)) {
xf86DrvMsg(sna->scrn->scrnIndex, X_WARNING,
"cannot enable XVideo whilst the GPU is wedged\n");
return FALSE;
commit 7867bff00caeff9e1fbe569ca3d37b94f704a4cd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
sna: Replace invalid signed value with unsigned ~0 for uint8_t
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 553cea8..f982b41 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2916,7 +2916,7 @@ gen4_render_fill_boxes(struct sna *sna,
(prefer_blt(sna) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen4_check_dst_format(format))) {
- uint8_t alu = -1;
+ uint8_t alu = ~0;
pixel = 0;
if (op == PictOpClear)
@@ -2929,7 +2929,7 @@ gen4_render_fill_boxes(struct sna *sna,
format))
alu = GXcopy;
- if (alu != -1 &&
+ if (alu != ~0 &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 8b970f4..56db4a0 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -3250,7 +3250,7 @@ gen5_render_fill_boxes(struct sna *sna,
(prefer_blt_fill(sna) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen5_check_dst_format(format))) {
- uint8_t alu = -1;
+ uint8_t alu = ~0;
pixel = 0;
if (op == PictOpClear)
@@ -3263,7 +3263,7 @@ gen5_render_fill_boxes(struct sna *sna,
format))
alu = GXcopy;
- if (alu != -1 &&
+ if (alu != ~0 &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index df2eeb2..cc6cc50 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3661,7 +3661,7 @@ gen6_render_fill_boxes(struct sna *sna,
(prefer_blt_fill(sna, dst_bo) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen6_check_dst_format(format))) {
- uint8_t alu = -1;
+ uint8_t alu = ~0;
pixel = 0;
if (op == PictOpClear)
@@ -3674,7 +3674,7 @@ gen6_render_fill_boxes(struct sna *sna,
format))
alu = GXcopy;
- if (alu != -1 &&
+ if (alu != ~0 &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 6bf25d3..2ee5b6f 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3743,7 +3743,7 @@ gen7_render_fill_boxes(struct sna *sna,
(prefer_blt_fill(sna, dst_bo) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen7_check_dst_format(format))) {
- uint8_t alu = -1;
+ uint8_t alu = ~0;
pixel = 0;
if (op == PictOpClear)
@@ -3756,7 +3756,7 @@ gen7_render_fill_boxes(struct sna *sna,
format))
alu = GXcopy;
- if (alu != -1 &&
+ if (alu != ~0 &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
commit ca72b372237287af0f4475801a9b64efca975832
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jun 1 23:22:31 2012 +0100
sna: Drop return value from 3D point transform
And just fixup the computed coordinates in the face of an invalid
matrix.
Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index dd66a46..553cea8 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -980,29 +980,24 @@ gen4_emit_composite_primitive(struct sna *sna,
&src_x[2],
&src_y[2]);
} else {
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
- r->src.y + op->src.offset[1],
- op->src.transform,
- &src_x[0],
- &src_y[0],
- &src_w[0]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
- r->src.y + op->src.offset[1] + r->height,
- op->src.transform,
- &src_x[1],
- &src_y[1],
- &src_w[1]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
- r->src.y + op->src.offset[1] + r->height,
- op->src.transform,
- &src_x[2],
- &src_y[2],
- &src_w[2]))
- return;
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+ r->src.y + op->src.offset[1],
+ op->src.transform,
+ &src_x[0],
+ &src_y[0],
+ &src_w[0]);
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+ r->src.y + op->src.offset[1] + r->height,
+ op->src.transform,
+ &src_x[1],
+ &src_y[1],
+ &src_w[1]);
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
+ r->src.y + op->src.offset[1] + r->height,
+ op->src.transform,
+ &src_x[2],
+ &src_y[2],
+ &src_w[2]);
}
if (op->mask.bo) {
@@ -1025,29 +1020,24 @@ gen4_emit_composite_primitive(struct sna *sna,
&mask_x[2],
&mask_y[2]);
} else {
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
- r->mask.y + op->mask.offset[1],
- op->mask.transform,
- &mask_x[0],
- &mask_y[0],
- &mask_w[0]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
- r->mask.y + op->mask.offset[1] + r->height,
- op->mask.transform,
- &mask_x[1],
- &mask_y[1],
- &mask_w[1]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
- r->mask.y + op->mask.offset[1] + r->height,
- op->mask.transform,
- &mask_x[2],
- &mask_y[2],
- &mask_w[2]))
- return;
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+ r->mask.y + op->mask.offset[1],
+ op->mask.transform,
+ &mask_x[0],
+ &mask_y[0],
+ &mask_w[0]);
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+ r->mask.y + op->mask.offset[1] + r->height,
+ op->mask.transform,
+ &mask_x[1],
+ &mask_y[1],
+ &mask_w[1]);
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
+ r->mask.y + op->mask.offset[1] + r->height,
+ op->mask.transform,
+ &mask_x[2],
+ &mask_y[2],
+ &mask_w[2]);
}
}
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 9c30041..8b970f4 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -983,29 +983,24 @@ gen5_emit_composite_primitive(struct sna *sna,
&src_x[2],
&src_y[2]);
} else {
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
- r->src.y + op->src.offset[1],
- op->src.transform,
- &src_x[0],
- &src_y[0],
- &src_w[0]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
- r->src.y + op->src.offset[1] + r->height,
- op->src.transform,
- &src_x[1],
- &src_y[1],
- &src_w[1]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
- r->src.y + op->src.offset[1] + r->height,
- op->src.transform,
- &src_x[2],
- &src_y[2],
- &src_w[2]))
- return;
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+ r->src.y + op->src.offset[1],
+ op->src.transform,
+ &src_x[0],
+ &src_y[0],
+ &src_w[0]);
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+ r->src.y + op->src.offset[1] + r->height,
+ op->src.transform,
+ &src_x[1],
+ &src_y[1],
+ &src_w[1]);
+ sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
+ r->src.y + op->src.offset[1] + r->height,
+ op->src.transform,
+ &src_x[2],
+ &src_y[2],
+ &src_w[2]);
}
if (op->mask.bo) {
@@ -1028,29 +1023,25 @@ gen5_emit_composite_primitive(struct sna *sna,
&mask_x[2],
&mask_y[2]);
} else {
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
- r->mask.y + op->mask.offset[1],
- op->mask.transform,
- &mask_x[0],
- &mask_y[0],
- &mask_w[0]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
- r->mask.y + op->mask.offset[1] + r->height,
- op->mask.transform,
- &mask_x[1],
- &mask_y[1],
- &mask_w[1]))
- return;
-
- if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
- r->mask.y + op->mask.offset[1] + r->height,
- op->mask.transform,
- &mask_x[2],
- &mask_y[2],
- &mask_w[2]))
- return;
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+ r->mask.y + op->mask.offset[1],
+ op->mask.transform,
+ &mask_x[0],
+ &mask_y[0],
+ &mask_w[0]);
+
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+ r->mask.y + op->mask.offset[1] + r->height,
+ op->mask.transform,
+ &mask_x[1],
+ &mask_y[1],
+ &mask_w[1]);
+ sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
+ r->mask.y + op->mask.offset[1] + r->height,
+ op->mask.transform,
+ &mask_x[2],
+ &mask_y[2],
+ &mask_w[2]);
}
}
diff --git a/src/sna/sna.h b/src/sna/sna.h
index d9fd9d1..df7f42f 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -500,7 +500,7 @@ sna_get_transformed_coordinates(int x, int y,
const PictTransform *transform,
float *x_out, float *y_out);
-Bool
+void
sna_get_transformed_coordinates_3d(int x, int y,
const PictTransform *transform,
float *x_out, float *y_out, float *z_out);
diff --git a/src/sna/sna_transform.c b/src/sna/sna_transform.c
index 644d404..54852b1 100644
--- a/src/sna/sna_transform.c
+++ b/src/sna/sna_transform.c
@@ -114,7 +114,7 @@ sna_get_transformed_coordinates(int x, int y,
/**
* Returns the un-normalized floating-point coordinates transformed by the given transform.
*/
-Bool
+void
sna_get_transformed_coordinates_3d(int x, int y,
const PictTransform *transform,
float *x_out, float *y_out, float *w_out)
@@ -126,13 +126,13 @@ sna_get_transformed_coordinates_3d(int x, int y,
} else {
int64_t result[3];
- if (!_sna_transform_point(transform, x, y, result))
- return FALSE;
-
- *x_out = result[0] / 65536.;
- *y_out = result[1] / 65536.;
- *w_out = result[2] / 65536.;
+ if (_sna_transform_point(transform, x, y, result)) {
+ *x_out = result[0] / 65536.;
+ *y_out = result[1] / 65536.;
+ *w_out = result[2] / 65536.;
+ } else {
+ *x_out = *y_out = 0;
+ *w_out = 1.;
+ }
}
-
- return TRUE;
}
More information about the xorg-commit
mailing list