v3d: set stride alignment when using simulator
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com> Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37887>
This commit is contained in:
committed by
Marge Bot
parent
d48b276acd
commit
08e2da2379
@@ -573,8 +573,8 @@ v3d_get_dimension_mpad(uint32_t dimension, uint32_t level, uint32_t block_dimens
|
||||
}
|
||||
|
||||
static void
|
||||
v3d_setup_slices(struct v3d_resource *rsc, uint32_t winsys_stride,
|
||||
bool uif_top)
|
||||
v3d_setup_slices(struct v3d_screen *screen, struct v3d_resource *rsc,
|
||||
uint32_t winsys_stride, bool uif_top)
|
||||
{
|
||||
struct pipe_resource *prsc = &rsc->base;
|
||||
uint32_t width = prsc->width0;
|
||||
@@ -695,6 +695,20 @@ v3d_setup_slices(struct v3d_resource *rsc, uint32_t winsys_stride,
|
||||
slice->stride = winsys_stride;
|
||||
else
|
||||
slice->stride = level_width * rsc->cpp;
|
||||
|
||||
#if USE_V3D_SIMULATOR
|
||||
/* Ensure stride alignment matches the one required by the GPU
|
||||
* that drives the display.
|
||||
*/
|
||||
if (slice->tiling == V3D_TILING_RASTER &&
|
||||
prsc->target == PIPE_TEXTURE_2D &&
|
||||
uif_top && !msaa) {
|
||||
slice->stride =
|
||||
align(slice->stride,
|
||||
v3d_simulator_get_raster_stride_align(screen->fd));
|
||||
}
|
||||
#endif
|
||||
|
||||
slice->padded_height = level_height;
|
||||
slice->size = level_height * slice->stride;
|
||||
|
||||
@@ -842,7 +856,7 @@ v3d_resource_create_with_modifiers(struct pipe_screen *pscreen,
|
||||
|
||||
rsc->internal_format = prsc->format;
|
||||
|
||||
v3d_setup_slices(rsc, 0, tmpl->bind & PIPE_BIND_SHARED);
|
||||
v3d_setup_slices(screen, rsc, 0, tmpl->bind & PIPE_BIND_SHARED);
|
||||
|
||||
if (screen->ro && (tmpl->bind & PIPE_BIND_SCANOUT)) {
|
||||
assert(!rsc->tiled);
|
||||
@@ -958,7 +972,7 @@ v3d_resource_from_handle(struct pipe_screen *pscreen,
|
||||
|
||||
rsc->internal_format = prsc->format;
|
||||
|
||||
v3d_setup_slices(rsc, whandle->stride, true);
|
||||
v3d_setup_slices(screen, rsc, whandle->stride, true);
|
||||
v3d_debug_resource_layout(rsc, "import");
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
|
||||
Reference in New Issue
Block a user