* [PATCH mesa] nv30: Fix creation of scanout buffers
@ 2015-08-12 12:24 Hans de Goede
[not found] ` <1439382297-5647-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Hans de Goede @ 2015-08-12 12:24 UTC (permalink / raw)
To: mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Scanout buffers on nv30 must always be non-swizzled and have special
width alignment constraints.
These constrains have been taken from the xf86-video-nouveau
src/nv_accel_common.c: nouveau_allocate_surface() function.
nouveau_allocate_surface() applies these width constraints only when a
tiled attribute is set, which it sets for all surfaces allocated via
dri, and this "tiling" is not the same as swizzling, scanout surfaces
must be linear / have a uniform_pitch or only complete garbage is shown.
This commit fixes dri3 on nv30 showing a garbled display, with dri3 the
scanout buffers are allocated by mesa, rather then by the ddx, and the
wrong stride of these buffers was causing the garbled display.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
src/gallium/drivers/nouveau/nv30/nv30_miptree.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
index c75b4b9..2276347 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
@@ -28,6 +28,7 @@
#include "util/u_surface.h"
#include "nv_m2mf.xml.h"
+#include "nv_object.xml.h"
#include "nv30/nv30_screen.h"
#include "nv30/nv30_context.h"
#include "nv30/nv30_resource.h"
@@ -362,6 +363,7 @@ nv30_miptree_create(struct pipe_screen *pscreen,
blocksz = util_format_get_blocksize(pt->format);
if ((pt->target == PIPE_TEXTURE_RECT) ||
+ (pt->bind & PIPE_BIND_SCANOUT) ||
!util_is_power_of_two(pt->width0) ||
!util_is_power_of_two(pt->height0) ||
!util_is_power_of_two(pt->depth0) ||
@@ -369,6 +371,14 @@ nv30_miptree_create(struct pipe_screen *pscreen,
util_format_is_float(pt->format) || mt->ms_mode) {
mt->uniform_pitch = util_format_get_nblocksx(pt->format, w) * blocksz;
mt->uniform_pitch = align(mt->uniform_pitch, 64);
+ if (pt->bind & PIPE_BIND_SCANOUT) {
+ struct nv30_screen *screen = nv30_screen(pscreen);
+ int pitch_align = MAX2(
+ screen->eng3d->oclass >= NV40_3D_CLASS ? 1024 : 256,
+ /* round_down_pow2(mt->uniform_pitch / 4) */
+ 1 << (util_last_bit(mt->uniform_pitch / 4) - 1));
+ mt->uniform_pitch = align(mt->uniform_pitch, pitch_align);
+ }
}
if (!mt->uniform_pitch)
--
2.4.3
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH mesa] nv30: Fix creation of scanout buffers
[not found] ` <1439382297-5647-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2015-08-13 13:40 ` poma
0 siblings, 0 replies; 2+ messages in thread
From: poma @ 2015-08-13 13:40 UTC (permalink / raw)
To: Hans de Goede, mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
On 12.08.2015 14:24, Hans de Goede wrote:
> Scanout buffers on nv30 must always be non-swizzled and have special
> width alignment constraints.
>
> These constrains have been taken from the xf86-video-nouveau
> src/nv_accel_common.c: nouveau_allocate_surface() function.
>
> nouveau_allocate_surface() applies these width constraints only when a
> tiled attribute is set, which it sets for all surfaces allocated via
> dri, and this "tiling" is not the same as swizzling, scanout surfaces
> must be linear / have a uniform_pitch or only complete garbage is shown.
>
> This commit fixes dri3 on nv30 showing a garbled display, with dri3 the
> scanout buffers are allocated by mesa, rather then by the ddx, and the
> wrong stride of these buffers was causing the garbled display.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> src/gallium/drivers/nouveau/nv30/nv30_miptree.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
> index c75b4b9..2276347 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
> @@ -28,6 +28,7 @@
> #include "util/u_surface.h"
>
> #include "nv_m2mf.xml.h"
> +#include "nv_object.xml.h"
> #include "nv30/nv30_screen.h"
> #include "nv30/nv30_context.h"
> #include "nv30/nv30_resource.h"
> @@ -362,6 +363,7 @@ nv30_miptree_create(struct pipe_screen *pscreen,
> blocksz = util_format_get_blocksize(pt->format);
>
> if ((pt->target == PIPE_TEXTURE_RECT) ||
> + (pt->bind & PIPE_BIND_SCANOUT) ||
> !util_is_power_of_two(pt->width0) ||
> !util_is_power_of_two(pt->height0) ||
> !util_is_power_of_two(pt->depth0) ||
> @@ -369,6 +371,14 @@ nv30_miptree_create(struct pipe_screen *pscreen,
> util_format_is_float(pt->format) || mt->ms_mode) {
> mt->uniform_pitch = util_format_get_nblocksx(pt->format, w) * blocksz;
> mt->uniform_pitch = align(mt->uniform_pitch, 64);
> + if (pt->bind & PIPE_BIND_SCANOUT) {
> + struct nv30_screen *screen = nv30_screen(pscreen);
> + int pitch_align = MAX2(
> + screen->eng3d->oclass >= NV40_3D_CLASS ? 1024 : 256,
> + /* round_down_pow2(mt->uniform_pitch / 4) */
> + 1 << (util_last_bit(mt->uniform_pitch / 4) - 1));
> + mt->uniform_pitch = align(mt->uniform_pitch, pitch_align);
> + }
> }
>
> if (!mt->uniform_pitch)
>
I patched mesa 10.6.4 with it, did not help to solve
https://bugs.freedesktop.org/show_bug.cgi?id=90871
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-08-13 13:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-12 12:24 [PATCH mesa] nv30: Fix creation of scanout buffers Hans de Goede
[not found] ` <1439382297-5647-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-08-13 13:40 ` poma
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.