diff options
author | Johannes Obermayr <[email protected]> | 2013-01-12 12:55:08 +0100 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2013-01-12 17:14:04 +0100 |
commit | 6bca283ad5ebdd85e268c6757842b3c808c6b73d (patch) | |
tree | 0f85bb1f819390108eb846063b0bf5058f5cd8cc /src/gallium/drivers/nv50/nv50_miptree.c | |
parent | 09a00a141f8cf1cac1a8907df4f9c1cb1edd939c (diff) |
nv50/nvc0: Build codegen in nv50.
This is required to make libnv50 independent of libnvc0.
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_miptree.c')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_miptree.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/gallium/drivers/nv50/nv50_miptree.c b/src/gallium/drivers/nv50/nv50_miptree.c index fc9d7f360d0..7883edbe75e 100644 --- a/src/gallium/drivers/nv50/nv50_miptree.c +++ b/src/gallium/drivers/nv50/nv50_miptree.c @@ -28,10 +28,38 @@ #include "nv50_context.h" #include "nv50_resource.h" -static INLINE uint32_t +uint32_t +nv50_tex_choose_tile_dims_helper(unsigned nx, unsigned ny, unsigned nz) +{ + uint32_t tile_mode = 0x000; + + if (ny > 64) tile_mode = 0x040; /* height 128 tiles */ + else + if (ny > 32) tile_mode = 0x030; /* height 64 tiles */ + else + if (ny > 16) tile_mode = 0x020; /* height 32 tiles */ + else + if (ny > 8) tile_mode = 0x010; /* height 16 tiles */ + + if (nz == 1) + return tile_mode; + else + if (tile_mode > 0x020) + tile_mode = 0x020; + + if (nz > 16 && tile_mode < 0x020) + return tile_mode | 0x500; /* depth 32 tiles */ + if (nz > 8) return tile_mode | 0x400; /* depth 16 tiles */ + if (nz > 4) return tile_mode | 0x300; /* depth 8 tiles */ + if (nz > 2) return tile_mode | 0x200; /* depth 4 tiles */ + + return tile_mode | 0x100; +} + +static uint32_t nv50_tex_choose_tile_dims(unsigned nx, unsigned ny, unsigned nz) { - return nvc0_tex_choose_tile_dims(nx, ny * 2, nz); + return nv50_tex_choose_tile_dims_helper(nx, ny * 2, nz); } static uint32_t |