On Mit, 2013-04-03 at 17:22 -0400, j.glisse@gmail.com wrote:
From: Jerome Glisse jglisse@redhat.com
Signed-off-by: Jerome Glisse jglisse@redhat.com
include/drm/radeon_drm.h | 61 +++++ radeon/radeon_surface.c | 663 +++++++++++++++++++++++++++++++++++++++++++---- radeon/radeon_surface.h | 30 +++ 3 files changed, 709 insertions(+), 45 deletions(-)
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 00d66b3..ff3ce3a 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h @@ -509,6 +509,7 @@ typedef struct { #define DRM_RADEON_GEM_SET_TILING 0x28 #define DRM_RADEON_GEM_GET_TILING 0x29 #define DRM_RADEON_GEM_BUSY 0x2a +#define DRM_RADEON_GEM_VA 0x2b
#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START)
Changes which aren't related to SI tiling should go in separate patches.
diff --git a/radeon/radeon_surface.c b/radeon/radeon_surface.c index 5935c23..dfdcbbc 100644 --- a/radeon/radeon_surface.c +++ b/radeon/radeon_surface.c [...] @@ -1198,6 +1742,33 @@ static int si_surface_init(struct radeon_surface_manager *surf_man, return r; }
+/*
- depending on surface
- */
+static int si_surface_best(struct radeon_surface_manager *surf_man,
struct radeon_surface *surf)
+{
- unsigned mode, tile_mode, stencil_tile_mode;
- /* tiling mode */
- mode = (surf->flags >> RADEON_SURF_MODE_SHIFT) & RADEON_SURF_MODE_MASK;
- if (surf->flags & RADEON_SURF_SBUFFER) {
/* stencil force 2d tiling */
surf->flags = RADEON_SURF_CLR(surf->flags, MODE);
surf->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
- }
- if (surf->flags & (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER)) {
/* depth force 2d tiling */
surf->flags = RADEON_SURF_CLR(surf->flags, MODE);
surf->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
- }
The comments say 2D, but the code says 1D.
@@ -104,6 +132,8 @@ struct radeon_surface { uint64_t stencil_offset; struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL];
- uint32_t tiling_index[RADEON_SURF_MAX_LEVEL];
- uint32_t
stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; };
Either these new fields need to be guarded the same way stencil_level is guarded by RADEON_SURF_SBUFFER, or the libdrm_radeon SONAME needs to be bumped. Otherwise, radeonsi built against libdrm_radeon without this patch will probably crash when running against libdrm_radeon with it.