freedreno: reject imports with bogus pitch
Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
b4e88b500c
commit
32c061b110
|
@ -898,15 +898,18 @@ fd_resource_from_handle(struct pipe_screen *pscreen,
|
||||||
|
|
||||||
util_range_init(&rsc->valid_buffer_range);
|
util_range_init(&rsc->valid_buffer_range);
|
||||||
|
|
||||||
rsc->bo = fd_screen_bo_from_handle(pscreen, handle, &slice->pitch);
|
rsc->bo = fd_screen_bo_from_handle(pscreen, handle);
|
||||||
if (!rsc->bo)
|
if (!rsc->bo)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
rsc->base.vtbl = &fd_resource_vtbl;
|
rsc->base.vtbl = &fd_resource_vtbl;
|
||||||
rsc->cpp = util_format_get_blocksize(tmpl->format);
|
rsc->cpp = util_format_get_blocksize(tmpl->format);
|
||||||
slice->pitch /= rsc->cpp;
|
slice->pitch = handle->stride / rsc->cpp;
|
||||||
slice->offset = handle->offset;
|
slice->offset = handle->offset;
|
||||||
|
|
||||||
|
if ((slice->pitch < align(prsc->width0, 32)) || (slice->pitch % 32))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
assert(rsc->cpp);
|
assert(rsc->cpp);
|
||||||
|
|
||||||
return prsc;
|
return prsc;
|
||||||
|
|
|
@ -536,8 +536,7 @@ fd_screen_bo_get_handle(struct pipe_screen *pscreen,
|
||||||
|
|
||||||
struct fd_bo *
|
struct fd_bo *
|
||||||
fd_screen_bo_from_handle(struct pipe_screen *pscreen,
|
fd_screen_bo_from_handle(struct pipe_screen *pscreen,
|
||||||
struct winsys_handle *whandle,
|
struct winsys_handle *whandle)
|
||||||
unsigned *out_stride)
|
|
||||||
{
|
{
|
||||||
struct fd_screen *screen = fd_screen(pscreen);
|
struct fd_screen *screen = fd_screen(pscreen);
|
||||||
struct fd_bo *bo;
|
struct fd_bo *bo;
|
||||||
|
@ -558,8 +557,6 @@ fd_screen_bo_from_handle(struct pipe_screen *pscreen,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*out_stride = whandle->stride;
|
|
||||||
|
|
||||||
return bo;
|
return bo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,8 +86,7 @@ boolean fd_screen_bo_get_handle(struct pipe_screen *pscreen,
|
||||||
unsigned stride,
|
unsigned stride,
|
||||||
struct winsys_handle *whandle);
|
struct winsys_handle *whandle);
|
||||||
struct fd_bo * fd_screen_bo_from_handle(struct pipe_screen *pscreen,
|
struct fd_bo * fd_screen_bo_from_handle(struct pipe_screen *pscreen,
|
||||||
struct winsys_handle *whandle,
|
struct winsys_handle *whandle);
|
||||||
unsigned *out_stride);
|
|
||||||
|
|
||||||
struct pipe_screen * fd_screen_create(struct fd_device *dev);
|
struct pipe_screen * fd_screen_create(struct fd_device *dev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue