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:
committed by
Marge Bot
parent
a2d1b6d14f
commit
9f5e4ccdb9
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user