llvmpipe: don't crash/assert on out of memory
Check for null pointers and return early, etc.
This commit is contained in:
parent
249c6735dd
commit
3d6101245b
|
@ -172,7 +172,8 @@ lp_rast_get_color_block_pointer(struct lp_rasterizer_task *task,
|
||||||
assert((y % TILE_VECTOR_HEIGHT) == 0);
|
assert((y % TILE_VECTOR_HEIGHT) == 0);
|
||||||
|
|
||||||
color = task->color_tiles[buf];
|
color = task->color_tiles[buf];
|
||||||
assert(color);
|
if (!color)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
px = x % TILE_SIZE;
|
px = x % TILE_SIZE;
|
||||||
py = y % TILE_SIZE;
|
py = y % TILE_SIZE;
|
||||||
|
|
|
@ -146,13 +146,15 @@ lp_resource_copy(struct pipe_context *pipe,
|
||||||
subdst.level,
|
subdst.level,
|
||||||
LP_TEX_LAYOUT_LINEAR);
|
LP_TEX_LAYOUT_LINEAR);
|
||||||
|
|
||||||
util_copy_rect(dst_linear_ptr, format,
|
if (dst_linear_ptr && src_linear_ptr) {
|
||||||
llvmpipe_resource_stride(&dst_tex->base, subdst.level),
|
util_copy_rect(dst_linear_ptr, format,
|
||||||
dstx, dsty,
|
llvmpipe_resource_stride(&dst_tex->base, subdst.level),
|
||||||
width, height,
|
dstx, dsty,
|
||||||
src_linear_ptr,
|
width, height,
|
||||||
llvmpipe_resource_stride(&src_tex->base, subsrc.level),
|
src_linear_ptr,
|
||||||
srcx, srcy);
|
llvmpipe_resource_stride(&src_tex->base, subsrc.level),
|
||||||
|
srcx, srcy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -389,7 +389,6 @@ llvmpipe_resource_map(struct pipe_resource *resource,
|
||||||
|
|
||||||
map = llvmpipe_get_texture_image(lpr, face + zslice, level,
|
map = llvmpipe_get_texture_image(lpr, face + zslice, level,
|
||||||
tex_usage, layout);
|
tex_usage, layout);
|
||||||
assert(map);
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1035,7 +1034,7 @@ llvmpipe_get_texture_image(struct llvmpipe_resource *lpr,
|
||||||
|
|
||||||
layout_logic(cur_layout, layout, usage, &new_layout, &convert);
|
layout_logic(cur_layout, layout, usage, &new_layout, &convert);
|
||||||
|
|
||||||
if (convert) {
|
if (convert && other_data && target_data) {
|
||||||
if (layout == LP_TEX_LAYOUT_TILED) {
|
if (layout == LP_TEX_LAYOUT_TILED) {
|
||||||
lp_linear_to_tiled(other_data, target_data,
|
lp_linear_to_tiled(other_data, target_data,
|
||||||
x * TILE_SIZE, y * TILE_SIZE,
|
x * TILE_SIZE, y * TILE_SIZE,
|
||||||
|
@ -1067,8 +1066,6 @@ llvmpipe_get_texture_image(struct llvmpipe_resource *lpr,
|
||||||
width_t, height_t, layout);
|
width_t, height_t, layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(target_data);
|
|
||||||
|
|
||||||
return target_data;
|
return target_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1187,13 +1184,16 @@ llvmpipe_get_texture_tile(struct llvmpipe_resource *lpr,
|
||||||
cur_layout = llvmpipe_get_texture_tile_layout(lpr, face_slice, level, tx, ty);
|
cur_layout = llvmpipe_get_texture_tile_layout(lpr, face_slice, level, tx, ty);
|
||||||
|
|
||||||
layout_logic(cur_layout, LP_TEX_LAYOUT_TILED, usage, &new_layout, &convert);
|
layout_logic(cur_layout, LP_TEX_LAYOUT_TILED, usage, &new_layout, &convert);
|
||||||
if (convert) {
|
if (convert && linear_image && tiled_image) {
|
||||||
lp_linear_to_tiled(linear_image, tiled_image,
|
lp_linear_to_tiled(linear_image, tiled_image,
|
||||||
x, y, TILE_SIZE, TILE_SIZE, lpr->base.format,
|
x, y, TILE_SIZE, TILE_SIZE, lpr->base.format,
|
||||||
lpr->row_stride[level],
|
lpr->row_stride[level],
|
||||||
lpr->tiles_per_row[level]);
|
lpr->tiles_per_row[level]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tiled_image)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (new_layout != cur_layout)
|
if (new_layout != cur_layout)
|
||||||
llvmpipe_set_texture_tile_layout(lpr, face_slice, level, tx, ty, new_layout);
|
llvmpipe_set_texture_tile_layout(lpr, face_slice, level, tx, ty, new_layout);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue