mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 17:40:11 +01:00
llvmpipe: record sample info for color/depth buffers in scene
This adds the nr_samples + sample_stride to the scene records for cbufs and zsbuf. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4122>
This commit is contained in:
parent
a30db60ede
commit
01e9779c00
5 changed files with 26 additions and 4 deletions
|
|
@ -337,7 +337,7 @@ lp_rast_shade_tile(struct lp_rasterizer_task *task,
|
|||
for (i = 0; i < scene->fb.nr_cbufs; i++){
|
||||
if (scene->fb.cbufs[i]) {
|
||||
stride[i] = scene->cbufs[i].stride;
|
||||
sample_stride[i] = 0;
|
||||
sample_stride[i] = scene->cbufs[i].sample_stride;
|
||||
color[i] = lp_rast_get_color_block_pointer(task, i, tile_x + x,
|
||||
tile_y + y, inputs->layer);
|
||||
}
|
||||
|
|
@ -353,6 +353,7 @@ lp_rast_shade_tile(struct lp_rasterizer_task *task,
|
|||
depth = lp_rast_get_depth_block_pointer(task, tile_x + x,
|
||||
tile_y + y, inputs->layer);
|
||||
depth_stride = scene->zsbuf.stride;
|
||||
depth_sample_stride = scene->zsbuf.sample_stride;
|
||||
}
|
||||
|
||||
/* Propagate non-interpolated raster state. */
|
||||
|
|
@ -438,7 +439,7 @@ lp_rast_shade_quads_mask(struct lp_rasterizer_task *task,
|
|||
for (i = 0; i < scene->fb.nr_cbufs; i++) {
|
||||
if (scene->fb.cbufs[i]) {
|
||||
stride[i] = scene->cbufs[i].stride;
|
||||
sample_stride[i] = 0;
|
||||
sample_stride[i] = scene->cbufs[i].sample_stride;
|
||||
color[i] = lp_rast_get_color_block_pointer(task, i, x, y,
|
||||
inputs->layer);
|
||||
}
|
||||
|
|
@ -452,6 +453,7 @@ lp_rast_shade_quads_mask(struct lp_rasterizer_task *task,
|
|||
/* depth buffer */
|
||||
if (scene->zsbuf.map) {
|
||||
depth_stride = scene->zsbuf.stride;
|
||||
depth_sample_stride = scene->zsbuf.sample_stride;
|
||||
depth = lp_rast_get_depth_block_pointer(task, x, y, inputs->layer);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ lp_rast_shade_quads_all( struct lp_rasterizer_task *task,
|
|||
for (i = 0; i < scene->fb.nr_cbufs; i++) {
|
||||
if (scene->fb.cbufs[i]) {
|
||||
stride[i] = scene->cbufs[i].stride;
|
||||
sample_stride[i] = 0;
|
||||
sample_stride[i] = scene->cbufs[i].sample_stride;
|
||||
color[i] = lp_rast_get_color_block_pointer(task, i, x, y,
|
||||
inputs->layer);
|
||||
}
|
||||
|
|
@ -253,6 +253,7 @@ lp_rast_shade_quads_all( struct lp_rasterizer_task *task,
|
|||
|
||||
if (scene->zsbuf.map) {
|
||||
depth = lp_rast_get_depth_block_pointer(task, x, y, inputs->layer);
|
||||
depth_sample_stride = scene->zsbuf.sample_stride;
|
||||
depth_stride = scene->zsbuf.stride;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,6 +160,8 @@ lp_scene_begin_rasterization(struct lp_scene *scene)
|
|||
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;
|
||||
}
|
||||
|
|
@ -169,18 +171,22 @@ lp_scene_begin_rasterization(struct lp_scene *scene)
|
|||
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);
|
||||
|
|
@ -191,7 +197,8 @@ lp_scene_begin_rasterization(struct lp_scene *scene)
|
|||
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,
|
||||
|
|
@ -545,6 +552,7 @@ void lp_scene_begin_binning(struct lp_scene *scene,
|
|||
max_layer = MIN2(max_layer, zsbuf->u.tex.last_layer - zsbuf->u.tex.first_layer);
|
||||
}
|
||||
scene->fb_max_layer = max_layer;
|
||||
scene->fb_max_samples = util_framebuffer_get_num_samples(fb);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -143,11 +143,16 @@ struct lp_scene {
|
|||
unsigned stride;
|
||||
unsigned layer_stride;
|
||||
unsigned format_bytes;
|
||||
unsigned sample_stride;
|
||||
unsigned nr_samples;
|
||||
} zsbuf, cbufs[PIPE_MAX_COLOR_BUFS];
|
||||
|
||||
/* The amount of layers in the fb (minimum of all attachments) */
|
||||
unsigned fb_max_layer;
|
||||
|
||||
/* max samples for bound framebuffer */
|
||||
unsigned fb_max_samples;
|
||||
|
||||
/** the framebuffer to render the scene into */
|
||||
struct pipe_framebuffer_state fb;
|
||||
|
||||
|
|
|
|||
|
|
@ -195,6 +195,12 @@ llvmpipe_resource_stride(struct pipe_resource *resource,
|
|||
return lpr->row_stride[level];
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
llvmpipe_sample_stride(struct pipe_resource *resource)
|
||||
{
|
||||
struct llvmpipe_resource *lpr = llvmpipe_resource(resource);
|
||||
return lpr->sample_stride;
|
||||
}
|
||||
|
||||
void *
|
||||
llvmpipe_resource_map(struct pipe_resource *resource,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue