diff options
author | Dave Airlie <[email protected]> | 2018-03-12 10:21:21 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2018-03-15 12:26:39 +1000 |
commit | 4b15b5e803eb4705f8532e6cc41cfdc8bd065de9 (patch) | |
tree | a01ae21b9629003b9711da0c73790bbac7c90932 /src/gallium/winsys | |
parent | c1e47a3c1fb380b36b7e403c248fbb5ce9e74ffe (diff) |
virgl: resize resource bo allocation if we need to.
This fixes an illegal command buffer on the host seen with
piglit arb_internalformat_query2-max-dimensions
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 8 | ||||
-rw-r--r-- | src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c index 77854680e59..cf3c3bac4b4 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c @@ -620,8 +620,12 @@ static void virgl_drm_add_res(struct virgl_drm_winsys *qdws, unsigned hash = res->res_handle & (sizeof(cbuf->is_handle_added)-1); if (cbuf->cres > cbuf->nres) { - fprintf(stderr,"failure to add relocation\n"); - return; + cbuf->nres += 256; + cbuf->res_bo = realloc(cbuf->res_bo, cbuf->nres * sizeof(struct virgl_hw_buf*)); + if (!cbuf->res_bo) { + fprintf(stderr,"failure to add relocation %d, %d\n", cbuf->cres, cbuf->nres); + return; + } } cbuf->res_bo[cbuf->cres] = NULL; diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c index f62d0d0981d..9a96c6eb83f 100644 --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c @@ -460,8 +460,12 @@ static void virgl_vtest_add_res(struct virgl_vtest_winsys *vtws, unsigned hash = res->res_handle & (sizeof(cbuf->is_handle_added)-1); if (cbuf->cres > cbuf->nres) { - fprintf(stderr,"failure to add relocation\n"); - return; + cbuf->nres += 256; + cbuf->res_bo = realloc(cbuf->res_bo, cbuf->nres * sizeof(struct virgl_hw_buf*)); + if (!cbuf->res_bo) { + fprintf(stderr,"failure to add relocation %d, %d\n", cbuf->cres, cbuf->nres); + return; + } } cbuf->res_bo[cbuf->cres] = NULL; |