summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2f56002)
raw | patch | inline | side by side (parent: 2f56002)
author | Jerome Glisse <jglisse@redhat.com> | |
Tue, 12 Jun 2012 22:09:55 +0000 (18:09 -0400) | ||
committer | Jerome Glisse <jglisse@redhat.com> | |
Tue, 12 Jun 2012 22:09:55 +0000 (18:09 -0400) |
On r6xx or evergreen z/stencil surface don't support linear or
linear aligned surface, force 1D tiled mode for those.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
linear aligned surface, force 1D tiled mode for those.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
radeon/radeon_surface.c | patch | blob | history |
index 64a8dd415f6c75da2bfdba90417ef5af5badc8b7..0afd59651e2fe167441965f13ff0efb66717b268 100644 (file)
--- a/radeon/radeon_surface.c
+++ b/radeon/radeon_surface.c
/* tiling mode */
mode = (surf->flags >> RADEON_SURF_MODE_SHIFT) & RADEON_SURF_MODE_MASK;
/* tiling mode */
mode = (surf->flags >> RADEON_SURF_MODE_SHIFT) & RADEON_SURF_MODE_MASK;
+ /* always enable z & stencil together */
+ if (surf->flags & RADEON_SURF_ZBUFFER) {
+ surf->flags |= RADEON_SURF_SBUFFER;
+ }
+ if (surf->flags & RADEON_SURF_SBUFFER) {
+ surf->flags |= RADEON_SURF_ZBUFFER;
+ }
+ if (surf->flags & RADEON_SURF_ZBUFFER) {
+ /* zbuffer only support 1D or 2D tiled surface */
+ switch (mode) {
+ case RADEON_SURF_MODE_1D:
+ case RADEON_SURF_MODE_2D:
+ break;
+ default:
+ mode = RADEON_SURF_MODE_1D;
+ surf->flags = RADEON_SURF_CLR(surf->flags, MODE);
+ surf->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
+ break;
+ }
+ }
+
/* force 1d on kernel that can't do 2d */
if (!surf_man->hw_info.allow_2d && mode > RADEON_SURF_MODE_1D) {
mode = RADEON_SURF_MODE_1D;
/* force 1d on kernel that can't do 2d */
if (!surf_man->hw_info.allow_2d && mode > RADEON_SURF_MODE_1D) {
mode = RADEON_SURF_MODE_1D;
if (surf->flags & RADEON_SURF_ZBUFFER) {
surf->flags |= RADEON_SURF_SBUFFER;
}
if (surf->flags & RADEON_SURF_ZBUFFER) {
surf->flags |= RADEON_SURF_SBUFFER;
}
+ if (surf->flags & RADEON_SURF_SBUFFER) {
+ surf->flags |= RADEON_SURF_ZBUFFER;
+ }
+ if (surf->flags & RADEON_SURF_ZBUFFER) {
+ /* zbuffer only support 1D or 2D tiled surface */
+ switch (mode) {
+ case RADEON_SURF_MODE_1D:
+ case RADEON_SURF_MODE_2D:
+ break;
+ default:
+ mode = RADEON_SURF_MODE_1D;
+ surf->flags = RADEON_SURF_CLR(surf->flags, MODE);
+ surf->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
+ break;
+ }
+ }
r = eg_surface_sanity(surf_man, surf, mode);
if (r) {
r = eg_surface_sanity(surf_man, surf, mode);
if (r) {