mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
gallium: adapt nv drivers to interface cleanups
This commit is contained in:
parent
c78748a527
commit
94b5c28a98
13 changed files with 51 additions and 120 deletions
|
|
@ -10,28 +10,21 @@ static void
|
|||
nv04_miptree_layout(struct nv04_miptree *nv04mt)
|
||||
{
|
||||
struct pipe_texture *pt = &nv04mt->base;
|
||||
uint width = pt->width0, height = pt->height0;
|
||||
uint offset = 0;
|
||||
int nr_faces, l;
|
||||
|
||||
nr_faces = 1;
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
|
||||
nv04mt->level[l].pitch = pt->width0;
|
||||
nv04mt->level[l].pitch = (nv04mt->level[l].pitch + 63) & ~63;
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
}
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
|
||||
nv04mt->level[l].image_offset =
|
||||
CALLOC(nr_faces, sizeof(unsigned));
|
||||
/* XXX guess was obviously missing */
|
||||
nv04mt->level[l].image_offset[0] = offset;
|
||||
offset += nv04mt->level[l].pitch * u_minify(pt->height0, l);
|
||||
}
|
||||
|
||||
|
|
@ -128,7 +121,7 @@ nv04_miptree_surface_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
ns->base.zslice = zslice;
|
||||
ns->pitch = nv04mt->level[level].pitch;
|
||||
|
||||
ns->base.offset = nv04mt->level[level].image_offset;
|
||||
ns->base.offset = nv04mt->level[level].image_offset[0];
|
||||
|
||||
return &ns->base;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,10 +155,10 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
|
|||
sub_w = MIN2(sub_w, w - x);
|
||||
|
||||
/* Must be 64-byte aligned */
|
||||
assert(!((dst->offset + nv04_swizzle_bits(dx+x, dy+y) * dst->texture->block.size) & 63));
|
||||
assert(!((dst->offset + nv04_swizzle_bits(dx+x, dy+y) * pf_get_blocksize(dst->texture->format)) & 63));
|
||||
|
||||
BEGIN_RING(chan, swzsurf, NV04_SWIZZLED_SURFACE_OFFSET, 1);
|
||||
OUT_RELOCl(chan, dst_bo, dst->offset + nv04_swizzle_bits(dx+x, dy+y) * dst->texture->block.size,
|
||||
OUT_RELOCl(chan, dst_bo, dst->offset + nv04_swizzle_bits(dx+x, dy+y) * pf_get_blocksize(dst->texture->format),
|
||||
NOUVEAU_BO_GART | NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
|
||||
|
||||
BEGIN_RING(chan, sifm, NV04_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION, 9);
|
||||
|
|
@ -177,7 +177,7 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
|
|||
OUT_RING (chan, src_pitch |
|
||||
NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_CENTER |
|
||||
NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_POINT_SAMPLE);
|
||||
OUT_RELOCl(chan, src_bo, src->offset + (sy+y) * src_pitch + (sx+x) * src->texture->block.size,
|
||||
OUT_RELOCl(chan, src_bo, src->offset + (sy+y) * src_pitch + (sx+x) * pf_get_blocksize(src->texture->format),
|
||||
NOUVEAU_BO_GART | NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
|
||||
OUT_RING (chan, 0);
|
||||
}
|
||||
|
|
@ -198,9 +198,9 @@ nv04_surface_copy_m2mf(struct nv04_surface_2d *ctx,
|
|||
unsigned src_pitch = ((struct nv04_surface *)src)->pitch;
|
||||
unsigned dst_pitch = ((struct nv04_surface *)dst)->pitch;
|
||||
unsigned dst_offset = dst->offset + dy * dst_pitch +
|
||||
dx * dst->texture->block.size;
|
||||
dx * pf_get_blocksize(dst->texture->format);
|
||||
unsigned src_offset = src->offset + sy * src_pitch +
|
||||
sx * src->texture->block.size;
|
||||
sx * pf_get_blocksize(src->texture->format);
|
||||
|
||||
WAIT_RING (chan, 3 + ((h / 2047) + 1) * 9);
|
||||
BEGIN_RING(chan, m2mf, NV04_MEMORY_TO_MEMORY_FORMAT_DMA_BUFFER_IN, 2);
|
||||
|
|
@ -219,7 +219,7 @@ nv04_surface_copy_m2mf(struct nv04_surface_2d *ctx,
|
|||
NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_WR);
|
||||
OUT_RING (chan, src_pitch);
|
||||
OUT_RING (chan, dst_pitch);
|
||||
OUT_RING (chan, w * src->texture->block.size);
|
||||
OUT_RING (chan, w * pf_get_blocksize(src->texture->format));
|
||||
OUT_RING (chan, count);
|
||||
OUT_RING (chan, 0x0101);
|
||||
OUT_RING (chan, 0);
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nv04_compatible_transfer_tex(struct pipe_texture *pt, unsigned level,
|
|||
template->width0 = u_minify(pt->width0, level);
|
||||
template->height0 = u_minify(pt->height0, level);
|
||||
template->depth0 = 1;
|
||||
template->block = pt->block;
|
||||
template->nblocksx[0] = pt->nblocksx[level];
|
||||
template->nblocksy[0] = pt->nblocksx[level];
|
||||
template->last_level = 0;
|
||||
template->nr_samples = pt->nr_samples;
|
||||
|
||||
|
|
@ -49,14 +46,10 @@ nv04_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->base.x = x;
|
||||
tx->base.y = y;
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
tx->base.stride = mt->level[level].pitch;
|
||||
tx->base.usage = usage;
|
||||
tx->base.face = face;
|
||||
|
|
@ -158,7 +151,7 @@ nv04_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
|
|||
pipe_transfer_buffer_flags(ptx));
|
||||
|
||||
return map + ns->base.offset +
|
||||
ptx->y * ns->pitch + ptx->x * ptx->block.size;
|
||||
ptx->y * ns->pitch + ptx->x * pf_get_blocksize(ptx->texture->format);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ nv10_miptree_layout(struct nv10_miptree *nv10mt)
|
|||
{
|
||||
struct pipe_texture *pt = &nv10mt->base;
|
||||
boolean swizzled = FALSE;
|
||||
uint width = pt->width0, height = pt->height0;
|
||||
uint width = pt->width0;
|
||||
uint offset = 0;
|
||||
int nr_faces, l, f;
|
||||
|
||||
|
|
@ -22,21 +22,16 @@ nv10_miptree_layout(struct nv10_miptree *nv10mt)
|
|||
}
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
|
||||
if (swizzled)
|
||||
nv10mt->level[l].pitch = pt->nblocksx[l] * pt->block.size;
|
||||
nv10mt->level[l].pitch = pf_get_stride(pt->format, width);
|
||||
else
|
||||
nv10mt->level[l].pitch = pt->nblocksx[0] * pt->block.size;
|
||||
nv10mt->level[l].pitch = pf_get_stride(pt->format, pt->width0);
|
||||
nv10mt->level[l].pitch = (nv10mt->level[l].pitch + 63) & ~63;
|
||||
|
||||
nv10mt->level[l].image_offset =
|
||||
CALLOC(nr_faces, sizeof(unsigned));
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nv10_compatible_transfer_tex(struct pipe_texture *pt, unsigned level,
|
|||
template->width0 = u_minify(pt->width0, level);
|
||||
template->height0 = u_minify(pt->height0, level);
|
||||
template->depth0 = 1;
|
||||
template->block = pt->block;
|
||||
template->nblocksx[0] = pt->nblocksx[level];
|
||||
template->nblocksy[0] = pt->nblocksx[level];
|
||||
template->last_level = 0;
|
||||
template->nr_samples = pt->nr_samples;
|
||||
|
||||
|
|
@ -49,14 +46,10 @@ nv10_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->base.x = x;
|
||||
tx->base.y = y;
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
tx->base.stride = mt->level[level].pitch;
|
||||
tx->base.usage = usage;
|
||||
tx->base.face = face;
|
||||
|
|
@ -158,7 +151,7 @@ nv10_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
|
|||
pipe_transfer_buffer_flags(ptx));
|
||||
|
||||
return map + ns->base.offset +
|
||||
ptx->y * ns->pitch + ptx->x * ptx->block.size;
|
||||
ptx->y * ns->pitch + ptx->x * pf_get_blocksize(ptx->texture->format);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ static void
|
|||
nv20_miptree_layout(struct nv20_miptree *nv20mt)
|
||||
{
|
||||
struct pipe_texture *pt = &nv20mt->base;
|
||||
uint width = pt->width0, height = pt->height0;
|
||||
uint width = pt->width0;
|
||||
uint offset = 0;
|
||||
int nr_faces, l, f;
|
||||
uint wide_pitch = pt->tex_usage & (PIPE_TEXTURE_USAGE_SAMPLER |
|
||||
|
|
@ -26,19 +26,15 @@ nv20_miptree_layout(struct nv20_miptree *nv20mt)
|
|||
}
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
|
||||
if (wide_pitch && (pt->tex_usage & NOUVEAU_TEXTURE_USAGE_LINEAR))
|
||||
nv20mt->level[l].pitch = align(pt->width0 * pt->block.size, 64);
|
||||
nv20mt->level[l].pitch = align(pf_get_stride(pt->format, pt->width0), 64);
|
||||
else
|
||||
nv20mt->level[l].pitch = u_minify(pt->width0, l) * pt->block.size;
|
||||
nv20mt->level[l].pitch = pf_get_stride(pt->format, width);
|
||||
|
||||
nv20mt->level[l].image_offset =
|
||||
CALLOC(nr_faces, sizeof(unsigned));
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
}
|
||||
|
||||
for (f = 0; f < nr_faces; f++) {
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nv20_compatible_transfer_tex(struct pipe_texture *pt, unsigned level,
|
|||
template->width0 = u_minify(pt->width0, level);
|
||||
template->height0 = u_minify(pt->height0, level);
|
||||
template->depth0 = 1;
|
||||
template->block = pt->block;
|
||||
template->nblocksx[0] = pt->nblocksx[level];
|
||||
template->nblocksy[0] = pt->nblocksx[level];
|
||||
template->last_level = 0;
|
||||
template->nr_samples = pt->nr_samples;
|
||||
|
||||
|
|
@ -49,14 +46,10 @@ nv20_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->base.x = x;
|
||||
tx->base.y = y;
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
tx->base.stride = mt->level[level].pitch;
|
||||
tx->base.usage = usage;
|
||||
tx->base.face = face;
|
||||
|
|
@ -158,7 +151,7 @@ nv20_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
|
|||
pipe_transfer_buffer_flags(ptx));
|
||||
|
||||
return map + ns->base.offset +
|
||||
ptx->y * ns->pitch + ptx->x * ptx->block.size;
|
||||
ptx->y * ns->pitch + ptx->x * pf_get_blocksize(ptx->texture->format);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ static void
|
|||
nv30_miptree_layout(struct nv30_miptree *nv30mt)
|
||||
{
|
||||
struct pipe_texture *pt = &nv30mt->base;
|
||||
uint width = pt->width0, height = pt->height0, depth = pt->depth0;
|
||||
uint width = pt->width0;
|
||||
uint offset = 0;
|
||||
int nr_faces, l, f;
|
||||
uint wide_pitch = pt->tex_usage & (PIPE_TEXTURE_USAGE_SAMPLER |
|
||||
|
|
@ -28,20 +28,15 @@ nv30_miptree_layout(struct nv30_miptree *nv30mt)
|
|||
}
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
|
||||
if (wide_pitch && (pt->tex_usage & NOUVEAU_TEXTURE_USAGE_LINEAR))
|
||||
nv30mt->level[l].pitch = align(pt->width0 * pt->block.size, 64);
|
||||
nv30mt->level[l].pitch = align(pf_get_stride(pt->format, pt->width0), 64);
|
||||
else
|
||||
nv30mt->level[l].pitch = u_minify(pt->width0, l) * pt->block.size;
|
||||
nv30mt->level[l].pitch = pf_get_stride(pt->format, width);
|
||||
|
||||
nv30mt->level[l].image_offset =
|
||||
CALLOC(nr_faces, sizeof(unsigned));
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
depth = u_minify(depth, 1);
|
||||
}
|
||||
|
||||
for (f = 0; f < nr_faces; f++) {
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nv30_compatible_transfer_tex(struct pipe_texture *pt, unsigned level,
|
|||
template->width0 = u_minify(pt->width0, level);
|
||||
template->height0 = u_minify(pt->height0, level);
|
||||
template->depth0 = 1;
|
||||
template->block = pt->block;
|
||||
template->nblocksx[0] = pt->nblocksx[level];
|
||||
template->nblocksy[0] = pt->nblocksx[level];
|
||||
template->last_level = 0;
|
||||
template->nr_samples = pt->nr_samples;
|
||||
|
||||
|
|
@ -49,14 +46,10 @@ nv30_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->base.x = x;
|
||||
tx->base.y = y;
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
tx->base.stride = mt->level[level].pitch;
|
||||
tx->base.usage = usage;
|
||||
tx->base.face = face;
|
||||
|
|
@ -158,7 +151,7 @@ nv30_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
|
|||
pipe_transfer_buffer_flags(ptx));
|
||||
|
||||
return map + ns->base.offset +
|
||||
ptx->y * ns->pitch + ptx->x * ptx->block.size;
|
||||
ptx->y * ns->pitch + ptx->x * pf_get_blocksize(ptx->texture->format);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ static void
|
|||
nv40_miptree_layout(struct nv40_miptree *mt)
|
||||
{
|
||||
struct pipe_texture *pt = &mt->base;
|
||||
uint width = pt->width0, height = pt->height0, depth = pt->depth0;
|
||||
uint width = pt->width0;
|
||||
uint offset = 0;
|
||||
int nr_faces, l, f;
|
||||
uint wide_pitch = pt->tex_usage & (PIPE_TEXTURE_USAGE_SAMPLER |
|
||||
|
|
@ -28,20 +28,15 @@ nv40_miptree_layout(struct nv40_miptree *mt)
|
|||
}
|
||||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
|
||||
if (wide_pitch && (pt->tex_usage & NOUVEAU_TEXTURE_USAGE_LINEAR))
|
||||
mt->level[l].pitch = align(pt->width0 * pt->block.size, 64);
|
||||
mt->level[l].pitch = align(pf_get_stride(pt->format, pt->width0), 64);
|
||||
else
|
||||
mt->level[l].pitch = u_minify(pt->width0, l) * pt->block.size;
|
||||
mt->level[l].pitch = pf_get_stride(pt->format, width);
|
||||
|
||||
mt->level[l].image_offset =
|
||||
CALLOC(nr_faces, sizeof(unsigned));
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
depth = u_minify(depth, 1);
|
||||
}
|
||||
|
||||
for (f = 0; f < nr_faces; f++) {
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nv40_compatible_transfer_tex(struct pipe_texture *pt, unsigned level,
|
|||
template->width0 = u_minify(pt->width0, level);
|
||||
template->height0 = u_minify(pt->height0, level);
|
||||
template->depth0 = 1;
|
||||
template->block = pt->block;
|
||||
template->nblocksx[0] = pt->nblocksx[level];
|
||||
template->nblocksy[0] = pt->nblocksx[level];
|
||||
template->last_level = 0;
|
||||
template->nr_samples = pt->nr_samples;
|
||||
|
||||
|
|
@ -49,14 +46,10 @@ nv40_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->base.x = x;
|
||||
tx->base.y = y;
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
tx->base.stride = mt->level[level].pitch;
|
||||
tx->base.usage = usage;
|
||||
tx->base.face = face;
|
||||
|
|
@ -158,7 +151,7 @@ nv40_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
|
|||
pipe_transfer_buffer_flags(ptx));
|
||||
|
||||
return map + ns->base.offset +
|
||||
ptx->y * ns->pitch + ptx->x * ptx->block.size;
|
||||
ptx->y * ns->pitch + ptx->x * pf_get_blocksize(ptx->texture->format);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -91,13 +91,11 @@ nv50_miptree_create(struct pipe_screen *pscreen, const struct pipe_texture *tmp)
|
|||
|
||||
for (l = 0; l <= pt->last_level; l++) {
|
||||
struct nv50_miptree_level *lvl = &mt->level[l];
|
||||
|
||||
pt->nblocksx[l] = pf_get_nblocksx(&pt->block, width);
|
||||
pt->nblocksy[l] = pf_get_nblocksy(&pt->block, height);
|
||||
unsigned nblocksy = pf_get_nblocksy(pt->format, height);
|
||||
|
||||
lvl->image_offset = CALLOC(mt->image_nr, sizeof(int));
|
||||
lvl->pitch = align(pt->nblocksx[l] * pt->block.size, 64);
|
||||
lvl->tile_mode = get_tile_mode(pt->nblocksy[l], depth);
|
||||
lvl->pitch = align(pf_get_stride(pt->format, width), 64);
|
||||
lvl->tile_mode = get_tile_mode(nblocksy, depth);
|
||||
|
||||
width = u_minify(width, 1);
|
||||
height = u_minify(height, 1);
|
||||
|
|
@ -118,7 +116,7 @@ nv50_miptree_create(struct pipe_screen *pscreen, const struct pipe_texture *tmp)
|
|||
unsigned tile_d = get_tile_depth(lvl->tile_mode);
|
||||
|
||||
size = lvl->pitch;
|
||||
size *= align(pt->nblocksy[l], tile_h);
|
||||
size *= align(pf_get_nblocksy(pt->format, u_minify(pt->height0, l)), tile_h);
|
||||
size *= align(u_minify(pt->depth0, l), tile_d);
|
||||
|
||||
lvl->image_offset[i] = mt->total_size;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ struct nv50_transfer {
|
|||
int level_depth;
|
||||
int level_x;
|
||||
int level_y;
|
||||
unsigned nblocksx;
|
||||
unsigned nblocksy;
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
@ -151,20 +153,11 @@ nv50_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
return NULL;
|
||||
|
||||
pipe_texture_reference(&tx->base.texture, pt);
|
||||
tx->base.format = pt->format;
|
||||
tx->nblocksx = pf_get_nblocksx(pt->format, u_minify(pt->width0, level));
|
||||
tx->nblocksy = pf_get_nblocksy(pt->format, u_minify(pt->height0, level));
|
||||
tx->base.width = w;
|
||||
tx->base.height = h;
|
||||
tx->base.block = pt->block;
|
||||
if (!pt->nblocksx[level]) {
|
||||
tx->base.nblocksx = pf_get_nblocksx(&pt->block,
|
||||
u_minify(pt->width0, level));
|
||||
tx->base.nblocksy = pf_get_nblocksy(&pt->block,
|
||||
u_minify(pt->height0, level));
|
||||
} else {
|
||||
tx->base.nblocksx = pt->nblocksx[level];
|
||||
tx->base.nblocksy = pt->nblocksy[level];
|
||||
}
|
||||
tx->base.stride = tx->base.nblocksx * pt->block.size;
|
||||
tx->base.stride = tx->nblocksx * pf_get_blocksize(pt->format);
|
||||
tx->base.usage = usage;
|
||||
|
||||
tx->level_pitch = lvl->pitch;
|
||||
|
|
@ -173,10 +166,10 @@ nv50_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
tx->level_depth = u_minify(mt->base.base.depth0, level);
|
||||
tx->level_offset = lvl->image_offset[image];
|
||||
tx->level_tiling = lvl->tile_mode;
|
||||
tx->level_x = pf_get_nblocksx(&tx->base.block, x);
|
||||
tx->level_y = pf_get_nblocksy(&tx->base.block, y);
|
||||
tx->level_x = pf_get_nblocksx(pt->format, x);
|
||||
tx->level_y = pf_get_nblocksy(pt->format, y);
|
||||
ret = nouveau_bo_new(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0,
|
||||
tx->base.nblocksy * tx->base.stride, &tx->bo);
|
||||
tx->nblocksy * tx->base.stride, &tx->bo);
|
||||
if (ret) {
|
||||
FREE(tx);
|
||||
return NULL;
|
||||
|
|
@ -185,22 +178,22 @@ nv50_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
|
|||
if (pt->target == PIPE_TEXTURE_3D)
|
||||
tx->level_offset += get_zslice_offset(lvl->tile_mode, zslice,
|
||||
lvl->pitch,
|
||||
tx->base.nblocksy);
|
||||
tx->nblocksy);
|
||||
|
||||
if (usage & PIPE_TRANSFER_READ) {
|
||||
nx = pf_get_nblocksx(&tx->base.block, tx->base.width);
|
||||
ny = pf_get_nblocksy(&tx->base.block, tx->base.height);
|
||||
nx = pf_get_nblocksx(pt->format, tx->base.width);
|
||||
ny = pf_get_nblocksy(pt->format, tx->base.height);
|
||||
|
||||
nv50_transfer_rect_m2mf(pscreen, mt->base.bo, tx->level_offset,
|
||||
tx->level_pitch, tx->level_tiling,
|
||||
x, y,
|
||||
tx->base.nblocksx, tx->base.nblocksy,
|
||||
tx->nblocksx, tx->nblocksy,
|
||||
tx->level_depth,
|
||||
tx->bo, 0,
|
||||
tx->base.stride, tx->bo->tile_mode,
|
||||
0, 0,
|
||||
tx->base.nblocksx, tx->base.nblocksy, 1,
|
||||
tx->base.block.size, nx, ny,
|
||||
tx->nblocksx, tx->nblocksy, 1,
|
||||
pf_get_blocksize(pt->format), nx, ny,
|
||||
NOUVEAU_BO_VRAM | NOUVEAU_BO_GART,
|
||||
NOUVEAU_BO_GART);
|
||||
}
|
||||
|
|
@ -213,23 +206,24 @@ nv50_transfer_del(struct pipe_transfer *ptx)
|
|||
{
|
||||
struct nv50_transfer *tx = (struct nv50_transfer *)ptx;
|
||||
struct nv50_miptree *mt = nv50_miptree(ptx->texture);
|
||||
struct pipe_texture *pt = ptx->texture;
|
||||
|
||||
unsigned nx = pf_get_nblocksx(&tx->base.block, tx->base.width);
|
||||
unsigned ny = pf_get_nblocksy(&tx->base.block, tx->base.height);
|
||||
unsigned nx = pf_get_nblocksx(pt->format, tx->base.width);
|
||||
unsigned ny = pf_get_nblocksy(pt->format, tx->base.height);
|
||||
|
||||
if (ptx->usage & PIPE_TRANSFER_WRITE) {
|
||||
struct pipe_screen *pscreen = ptx->texture->screen;
|
||||
struct pipe_screen *pscreen = pt->screen;
|
||||
|
||||
nv50_transfer_rect_m2mf(pscreen, tx->bo, 0,
|
||||
tx->base.stride, tx->bo->tile_mode,
|
||||
0, 0,
|
||||
tx->base.nblocksx, tx->base.nblocksy, 1,
|
||||
tx->nblocksx, tx->nblocksy, 1,
|
||||
mt->base.bo, tx->level_offset,
|
||||
tx->level_pitch, tx->level_tiling,
|
||||
tx->level_x, tx->level_y,
|
||||
tx->base.nblocksx, tx->base.nblocksy,
|
||||
tx->nblocksx, tx->nblocksy,
|
||||
tx->level_depth,
|
||||
tx->base.block.size, nx, ny,
|
||||
pf_get_blocksize(pt->format), nx, ny,
|
||||
NOUVEAU_BO_GART, NOUVEAU_BO_VRAM |
|
||||
NOUVEAU_BO_GART);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue