llvmpipe: split out scene surface init into separate function

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11015>
This commit is contained in:
Mike Blumenkrantz
2021-05-26 09:02:09 -04:00
committed by Marge Bot
parent a2d1b6d14f
commit 9f5e4ccdb9
+40 -44
View File
@@ -155,6 +155,44 @@ lp_scene_bin_reset(struct lp_scene *scene, unsigned x, unsigned y)
}
}
static void
init_scene_texture(struct lp_scene_surface *ssurf, struct pipe_surface *psurf)
{
if (!psurf) {
ssurf->stride = 0;
ssurf->layer_stride = 0;
ssurf->sample_stride = 0;
ssurf->nr_samples = 0;
ssurf->map = NULL;
return;
}
if (llvmpipe_resource_is_texture(psurf->texture)) {
ssurf->stride = llvmpipe_resource_stride(psurf->texture,
psurf->u.tex.level);
ssurf->layer_stride = llvmpipe_layer_stride(psurf->texture,
psurf->u.tex.level);
ssurf->sample_stride = llvmpipe_sample_stride(psurf->texture);
ssurf->map = llvmpipe_resource_map(psurf->texture,
psurf->u.tex.level,
psurf->u.tex.first_layer,
LP_TEX_USAGE_READ_WRITE);
ssurf->format_bytes = util_format_get_blocksize(psurf->format);
ssurf->nr_samples = util_res_sample_count(psurf->texture);
}
else {
struct llvmpipe_resource *lpr = llvmpipe_resource(psurf->texture);
unsigned pixstride = util_format_get_blocksize(psurf->format);
ssurf->stride = psurf->texture->width0;
ssurf->layer_stride = 0;
ssurf->sample_stride = 0;
ssurf->nr_samples = 1;
ssurf->map = lpr->data;
ssurf->map += psurf->u.buf.first_element * pixstride;
ssurf->format_bytes = util_format_get_blocksize(psurf->format);
}
}
void
lp_scene_begin_rasterization(struct lp_scene *scene)
@@ -166,54 +204,12 @@ lp_scene_begin_rasterization(struct lp_scene *scene)
for (i = 0; i < scene->fb.nr_cbufs; i++) {
struct pipe_surface *cbuf = scene->fb.cbufs[i];
if (!cbuf) {
scene->cbufs[i].stride = 0;
scene->cbufs[i].layer_stride = 0;
scene->cbufs[i].sample_stride = 0;
scene->cbufs[i].nr_samples = 0;
scene->cbufs[i].map = NULL;
continue;
}
if (llvmpipe_resource_is_texture(cbuf->texture)) {
scene->cbufs[i].stride = llvmpipe_resource_stride(cbuf->texture,
cbuf->u.tex.level);
scene->cbufs[i].layer_stride = llvmpipe_layer_stride(cbuf->texture,
cbuf->u.tex.level);
scene->cbufs[i].sample_stride = llvmpipe_sample_stride(cbuf->texture);
scene->cbufs[i].map = llvmpipe_resource_map(cbuf->texture,
cbuf->u.tex.level,
cbuf->u.tex.first_layer,
LP_TEX_USAGE_READ_WRITE);
scene->cbufs[i].format_bytes = util_format_get_blocksize(cbuf->format);
scene->cbufs[i].nr_samples = util_res_sample_count(cbuf->texture);
}
else {
struct llvmpipe_resource *lpr = llvmpipe_resource(cbuf->texture);
unsigned pixstride = util_format_get_blocksize(cbuf->format);
scene->cbufs[i].stride = cbuf->texture->width0;
scene->cbufs[i].layer_stride = 0;
scene->cbufs[i].sample_stride = 0;
scene->cbufs[i].nr_samples = 1;
scene->cbufs[i].map = lpr->data;
scene->cbufs[i].map += cbuf->u.buf.first_element * pixstride;
scene->cbufs[i].format_bytes = util_format_get_blocksize(cbuf->format);
}
init_scene_texture(&scene->cbufs[i], cbuf);
}
if (fb->zsbuf) {
struct pipe_surface *zsbuf = scene->fb.zsbuf;
scene->zsbuf.stride = llvmpipe_resource_stride(zsbuf->texture, zsbuf->u.tex.level);
scene->zsbuf.layer_stride = llvmpipe_layer_stride(zsbuf->texture, zsbuf->u.tex.level);
scene->zsbuf.sample_stride = llvmpipe_sample_stride(zsbuf->texture);
scene->zsbuf.nr_samples = util_res_sample_count(zsbuf->texture);
scene->zsbuf.map = llvmpipe_resource_map(zsbuf->texture,
zsbuf->u.tex.level,
zsbuf->u.tex.first_layer,
LP_TEX_USAGE_READ_WRITE);
scene->zsbuf.format_bytes = util_format_get_blocksize(zsbuf->format);
init_scene_texture(&scene->zsbuf, zsbuf);
}
}