From 9f5e4ccdb9bc76b2c155b9e8a84d03d5cff5d061 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 26 May 2021 09:02:09 -0400 Subject: [PATCH] llvmpipe: split out scene surface init into separate function Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/llvmpipe/lp_scene.c | 84 ++++++++++++------------- 1 file changed, 40 insertions(+), 44 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_scene.c b/src/gallium/drivers/llvmpipe/lp_scene.c index 539b84c6525..44a34902515 100644 --- a/src/gallium/drivers/llvmpipe/lp_scene.c +++ b/src/gallium/drivers/llvmpipe/lp_scene.c @@ -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); } }