i965/nir/vec4: Implement various rounding functions
[mesa.git] / src / mesa / drivers / dri / nouveau / nouveau_surface.c
index e6a712095c6d2973e00384628db9949830fbd0cb..ffac309b9ef93a67e9ea934682879b4408c16de8 100644 (file)
 #include "nouveau_context.h"
 #include "nouveau_util.h"
 
+#include "main/formats.h"
+
 void
 nouveau_surface_alloc(struct gl_context *ctx, struct nouveau_surface *s,
                      enum nouveau_surface_layout layout,
                      unsigned flags, unsigned format,
                      unsigned width, unsigned height)
 {
-       unsigned tile_mode = 0, tile_flags = 0;
+       union nouveau_bo_config config = {};
        int ret, cpp = _mesa_get_format_bytes(format);
 
        nouveau_bo_ref(NULL, &s->bo);
@@ -45,27 +47,28 @@ nouveau_surface_alloc(struct gl_context *ctx, struct nouveau_surface *s,
                .width = width,
                .height = height,
                .cpp = cpp,
-               .pitch = width * cpp,
+               .pitch = _mesa_format_row_stride(format, width),
        };
 
        if (layout == TILED) {
                s->pitch = align(s->pitch, 256);
-               tile_mode = s->pitch;
+               config.nv04.surf_pitch = s->pitch;
 
                if (cpp == 4)
-                       tile_flags = NOUVEAU_BO_TILE_32BPP;
+                       config.nv04.surf_flags = NV04_BO_32BPP;
                else if (cpp == 2)
-                       tile_flags = NOUVEAU_BO_TILE_16BPP;
+                       config.nv04.surf_flags = NV04_BO_16BPP;
 
                if (_mesa_get_format_bits(format, GL_DEPTH_BITS))
-                       tile_flags |= NOUVEAU_BO_TILE_ZETA;
+                       config.nv04.surf_flags |= NV04_BO_ZETA;
 
        } else {
                s->pitch = align(s->pitch, 64);
        }
 
-       ret = nouveau_bo_new_tile(context_dev(ctx), flags, 0, s->pitch * height,
-                                 tile_mode, tile_flags, &s->bo);
+       ret = nouveau_bo_new(context_dev(ctx), flags, 0,
+                            get_format_blocksy(format, height) * s->pitch,
+                            &config, &s->bo);
        assert(!ret);
 }