Samuel Pitoiset
2016-Oct-17 09:46 UTC
[Nouveau] [PATCH 4/5] nvc0: refactor TIC uploads to allow different specifies per generation
Few comments below. On 10/16/2016 09:14 PM, Ilia Mirkin wrote:> This flips GM10x to using the updated format, which is what I tested > with. However GM20x and GP10x also use this TIC format. > > Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu> > --- > src/nvc0_accel.c | 11 ++++++++++ > src/nvc0_accel.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++ > src/nvc0_exa.c | 22 ++++--------------- > src/nvc0_xv.c | 67 +++++++++++++++++++------------------------------------- > 4 files changed, 93 insertions(+), 63 deletions(-) > > diff --git a/src/nvc0_accel.c b/src/nvc0_accel.c > index 0682806..8da5051 100644 > --- a/src/nvc0_accel.c > +++ b/src/nvc0_accel.c > @@ -322,6 +322,17 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) > PUSH_DATA (push, (bo->offset + MISC_OFFSET) >> 32); > PUSH_DATA (push, (bo->offset + MISC_OFFSET)); > PUSH_DATA (push, 1); > + } else { > + /* Use new TIC format. Not strictly necessary for GM20x+ */Yes, but it's also enabled by default in mesa, looks fine.> + IMMED_NVC0(push, SUBC_3D(0x0f10), 1); > + if (pNv->dev->chipset >= 0x120) { > + /* Use center sample locations. */ > + BEGIN_NVC0(push, SUBC_3D(0x11e0), 4); > + PUSH_DATA (push, 0x88888888); > + PUSH_DATA (push, 0x88888888); > + PUSH_DATA (push, 0x88888888); > + PUSH_DATA (push, 0x88888888); > + } > } > > BEGIN_NVC0(push, NVC0_3D(CODE_ADDRESS_HIGH), 2); > diff --git a/src/nvc0_accel.h b/src/nvc0_accel.h > index 607e97b..9378236 100644 > --- a/src/nvc0_accel.h > +++ b/src/nvc0_accel.h > @@ -7,6 +7,7 @@ > #include "hwdefs/nvc0_m2mf.xml.h" > #include "hwdefs/nv50_defs.xml.h" > #include "hwdefs/nv50_texture.h" > +#include "hwdefs/gm107_texture.xml.h" > #include "hwdefs/nv_3ddefs.xml.h" > > /* subchannel assignments, compatible with kepler's fixed layout */ > @@ -108,4 +109,59 @@ PUSH_DATAu(struct nouveau_pushbuf *push, struct nouveau_bo *bo, > } > } > > +static __inline__ void > +PUSH_TIC(struct nouveau_pushbuf *push, struct nouveau_bo *bo, unsigned offset, > + unsigned width, unsigned height, unsigned pitch, unsigned format) > +{ > + if (push->client->device->chipset < 0x110) { > + unsigned tic2 = 0xd0001000; > + if (pitch == 0) > + tic2 |= 0x00004000; > + else > + tic2 |= 0x0005c000; > + PUSH_DATA(push, format); > + PUSH_DATA(push, bo->offset + offset); > + PUSH_DATA(push, ((bo->offset + offset) >> 32) | > + (bo->config.nvc0.tile_mode << 18) | > + tic2); > + PUSH_DATA(push, 0x00300000); > + PUSH_DATA(push, 0x80000000 | width); > + PUSH_DATA(push, 0x00010000 | height); > + PUSH_DATA (push, 0x03000000); > + PUSH_DATA (push, 0x00000000);Cosmetic.> + } else { > + unsigned tile_mode = bo->config.nvc0.tile_mode; > + PUSH_DATA(push, (format & 0x3f) | ((format & ~0x3f) << 1)); > + PUSH_DATA(push, bo->offset + offset); > + if (pitch == 0) { > + PUSH_DATA(push, ((bo->offset + offset) >> 32) | > + GM107_TIC2_2_HEADER_VERSION_BLOCKLINEAR); > + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | > + (tile_mode & 0x007) | > + (tile_mode & 0x070 >> (4 - 3)) | > + (tile_mode & 0x700 >> (8 - 6))); > + PUSH_DATA(push, GM107_TIC2_4_SECTOR_PROMOTION_PROMOTE_TO_2_V | > + GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | > + GM107_TIC2_4_TEXTURE_TYPE_TWO_D | > + (width - 1)); > + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | > + ((height - 1) & 0xffff)); > + PUSH_DATA(push, GM107_TIC2_6_ANISO_FINE_SPREAD_FUNC_TWO | > + GM107_TIC2_6_ANISO_COARSE_SPREAD_FUNC_ONE); > + PUSH_DATA(push, 0x00000000); > + } else { > + PUSH_DATA(push, ((bo->offset + offset) >> 32) | > + GM107_TIC2_2_HEADER_VERSION_PITCH); > + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | > + (pitch >> 5)); > + PUSH_DATA(push, GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | > + GM107_TIC2_4_TEXTURE_TYPE_TWO_D_NO_MIPMAP | > + (width - 1)); > + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | (height - 1)); > + PUSH_DATA(push, 0x000000000); > + PUSH_DATA(push, 0x000000000); > + } > + } > +} > + > #endif > diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c > index a53dfe6..c8ace97 100644 > --- a/src/nvc0_exa.c > +++ b/src/nvc0_exa.c > @@ -538,14 +538,8 @@ NVC0EXAPictSolid(NVPtr pNv, PicturePtr ppict, unsigned unit) > PUSH_DATAu(push, pNv->scratch, SOLID(unit), 1); > PUSH_DATA (push, ppict->pSourcePict->solidFill.color); > PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); > - PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); > - PUSH_DATA (push, offset); > - PUSH_DATA (push, (offset >> 32) | 0xd005d000); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, 0x00000001); > - PUSH_DATA (push, 0x00010001); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > + PUSH_TIC (push, pNv->scratch, SOLID(unit), 1, 1, 4, > + _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); > PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); > PUSH_DATA (push, NV50TSC_1_0_WRAPS_REPEAT | > NV50TSC_1_0_WRAPT_REPEAT | > @@ -651,16 +645,8 @@ NVC0EXAPictTexture(NVPtr pNv, PixmapPtr ppix, PicturePtr ppict, unsigned unit) > > PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); > PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); > - PUSH_DATA (push, format); > - PUSH_DATA (push, bo->offset); > - PUSH_DATA (push, (bo->offset >> 32) | > - (bo->config.nvc0.tile_mode << 18) | > - 0xd0005000); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, (1 << 31) | ppix->drawable.width); > - PUSH_DATA (push, (1 << 16) | ppix->drawable.height); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > + PUSH_TIC (push, bo, 0, ppix->drawable.width, ppix->drawable.height, 0, > + format); > > PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); > if (ppict->repeat) { > diff --git a/src/nvc0_xv.c b/src/nvc0_xv.c > index 129c505..c3e58da 100644 > --- a/src/nvc0_xv.c > +++ b/src/nvc0_xv.c > @@ -74,7 +74,6 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, > { dst, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR }, > }; > struct nouveau_pushbuf *push = pNv->pushbuf; > - uint32_t mode = 0xd0005000 | (src->config.nvc0.tile_mode << 18); > float X1, X2, Y1, Y2; > BoxPtr pbox; > int nbox; > @@ -105,71 +104,49 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, > > PUSH_DATAu(push, pNv->scratch, TIC_OFFSET, 16); > if (id == FOURCC_YV12 || id == FOURCC_I420) { > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | > + PUSH_TIC(push, src, packed_y, width, height, 0, > + NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > NV50TIC_0_0_FMT_8); > - PUSH_DATA (push, ((src->offset + packed_y))); > - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, width); > - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | > + PUSH_TIC(push, src, uv, width >> 1, height >> 1, 0,At first look, this seems wrong. Why do you shift width/height here?> + NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > NV50TIC_0_0_FMT_8_8); > - PUSH_DATA (push, ((src->offset + uv))); > - PUSH_DATA (push, ((src->offset + uv) >> 32) | mode); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, width >> 1); > - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | (height >> 1)); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > } else { > - if (id == FOURCC_UYVY) { > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | > + unsigned format; > + if (id == FOURCC_UYVY) { > + format = NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > - NV50TIC_0_0_FMT_8_8); > - } else { > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | > + NV50TIC_0_0_FMT_8_8; > + } else { > + format = NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > - NV50TIC_0_0_FMT_8_8); > - } > - PUSH_DATA (push, ((src->offset + packed_y))); > - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, width); > - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > - if (id == FOURCC_UYVY) { > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | > + NV50TIC_0_0_FMT_8_8; > + } > + PUSH_TIC(push, src, packed_y, width, height, 0, format); > + > + if (id == FOURCC_UYVY) { > + format = NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > - NV50TIC_0_0_FMT_8_8_8_8); > - } else { > - PUSH_DATA (push, NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | > + NV50TIC_0_0_FMT_8_8_8_8; > + } else { > + format = NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | > NV50TIC_0_0_MAPB_C1 | NV50TIC_0_0_TYPEB_UNORM | > NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | > NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | > - NV50TIC_0_0_FMT_8_8_8_8); > - } > - PUSH_DATA (push, ((src->offset + packed_y))); > - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); > - PUSH_DATA (push, 0x00300000); > - PUSH_DATA (push, (width >> 1)); > - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); > - PUSH_DATA (push, 0x03000000); > - PUSH_DATA (push, 0x00000000); > + NV50TIC_0_0_FMT_8_8_8_8; > + } > + PUSH_TIC(push, src, packed_y, width >> 1, height, 0, format); > } > > PUSH_DATAu(push, pNv->scratch, TSC_OFFSET, 16); >-- -Samuel
Ilia Mirkin
2016-Oct-17 12:24 UTC
[Nouveau] [PATCH 4/5] nvc0: refactor TIC uploads to allow different specifies per generation
On Mon, Oct 17, 2016 at 5:46 AM, Samuel Pitoiset <samuel.pitoiset at gmail.com> wrote:> Few comments below. > > On 10/16/2016 09:14 PM, Ilia Mirkin wrote: >> >> This flips GM10x to using the updated format, which is what I tested >> with. However GM20x and GP10x also use this TIC format. >> >> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu> >> --- >> src/nvc0_accel.c | 11 ++++++++++ >> src/nvc0_accel.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++ >> src/nvc0_exa.c | 22 ++++--------------- >> src/nvc0_xv.c | 67 >> +++++++++++++++++++------------------------------------- >> 4 files changed, 93 insertions(+), 63 deletions(-) >> >> diff --git a/src/nvc0_accel.c b/src/nvc0_accel.c >> index 0682806..8da5051 100644 >> --- a/src/nvc0_accel.c >> +++ b/src/nvc0_accel.c >> @@ -322,6 +322,17 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) >> PUSH_DATA (push, (bo->offset + MISC_OFFSET) >> 32); >> PUSH_DATA (push, (bo->offset + MISC_OFFSET)); >> PUSH_DATA (push, 1); >> + } else { >> + /* Use new TIC format. Not strictly necessary for GM20x+ >> */ > > > Yes, but it's also enabled by default in mesa, looks fine. > > >> + IMMED_NVC0(push, SUBC_3D(0x0f10), 1); >> + if (pNv->dev->chipset >= 0x120) { >> + /* Use center sample locations. */ >> + BEGIN_NVC0(push, SUBC_3D(0x11e0), 4); >> + PUSH_DATA (push, 0x88888888); >> + PUSH_DATA (push, 0x88888888); >> + PUSH_DATA (push, 0x88888888); >> + PUSH_DATA (push, 0x88888888); >> + } >> } >> >> BEGIN_NVC0(push, NVC0_3D(CODE_ADDRESS_HIGH), 2); >> diff --git a/src/nvc0_accel.h b/src/nvc0_accel.h >> index 607e97b..9378236 100644 >> --- a/src/nvc0_accel.h >> +++ b/src/nvc0_accel.h >> @@ -7,6 +7,7 @@ >> #include "hwdefs/nvc0_m2mf.xml.h" >> #include "hwdefs/nv50_defs.xml.h" >> #include "hwdefs/nv50_texture.h" >> +#include "hwdefs/gm107_texture.xml.h" >> #include "hwdefs/nv_3ddefs.xml.h" >> >> /* subchannel assignments, compatible with kepler's fixed layout */ >> @@ -108,4 +109,59 @@ PUSH_DATAu(struct nouveau_pushbuf *push, struct >> nouveau_bo *bo, >> } >> } >> >> +static __inline__ void >> +PUSH_TIC(struct nouveau_pushbuf *push, struct nouveau_bo *bo, unsigned >> offset, >> + unsigned width, unsigned height, unsigned pitch, unsigned format) >> +{ >> + if (push->client->device->chipset < 0x110) { >> + unsigned tic2 = 0xd0001000; >> + if (pitch == 0) >> + tic2 |= 0x00004000; >> + else >> + tic2 |= 0x0005c000; >> + PUSH_DATA(push, format); >> + PUSH_DATA(push, bo->offset + offset); >> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >> + (bo->config.nvc0.tile_mode << 18) | >> + tic2); >> + PUSH_DATA(push, 0x00300000); >> + PUSH_DATA(push, 0x80000000 | width); >> + PUSH_DATA(push, 0x00010000 | height); >> + PUSH_DATA (push, 0x03000000); >> + PUSH_DATA (push, 0x00000000); > > > Cosmetic.Oops, will fix.> > >> + } else { >> + unsigned tile_mode = bo->config.nvc0.tile_mode; >> + PUSH_DATA(push, (format & 0x3f) | ((format & ~0x3f) << >> 1)); >> + PUSH_DATA(push, bo->offset + offset); >> + if (pitch == 0) { >> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >> + >> GM107_TIC2_2_HEADER_VERSION_BLOCKLINEAR); >> + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | >> + (tile_mode & 0x007) | >> + (tile_mode & 0x070 >> (4 - 3)) | >> + (tile_mode & 0x700 >> (8 - 6))); >> + PUSH_DATA(push, >> GM107_TIC2_4_SECTOR_PROMOTION_PROMOTE_TO_2_V | >> + GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | >> + GM107_TIC2_4_TEXTURE_TYPE_TWO_D | >> + (width - 1)); >> + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | >> + ((height - 1) & 0xffff)); >> + PUSH_DATA(push, >> GM107_TIC2_6_ANISO_FINE_SPREAD_FUNC_TWO | >> + >> GM107_TIC2_6_ANISO_COARSE_SPREAD_FUNC_ONE); >> + PUSH_DATA(push, 0x00000000); >> + } else { >> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >> + >> GM107_TIC2_2_HEADER_VERSION_PITCH); >> + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | >> + (pitch >> 5)); >> + PUSH_DATA(push, >> GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | >> + >> GM107_TIC2_4_TEXTURE_TYPE_TWO_D_NO_MIPMAP | >> + (width - 1)); >> + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | >> (height - 1)); >> + PUSH_DATA(push, 0x000000000); >> + PUSH_DATA(push, 0x000000000); >> + } >> + } >> +} >> + >> #endif >> diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c >> index a53dfe6..c8ace97 100644 >> --- a/src/nvc0_exa.c >> +++ b/src/nvc0_exa.c >> @@ -538,14 +538,8 @@ NVC0EXAPictSolid(NVPtr pNv, PicturePtr ppict, >> unsigned unit) >> PUSH_DATAu(push, pNv->scratch, SOLID(unit), 1); >> PUSH_DATA (push, ppict->pSourcePict->solidFill.color); >> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); >> - PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); >> - PUSH_DATA (push, offset); >> - PUSH_DATA (push, (offset >> 32) | 0xd005d000); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, 0x00000001); >> - PUSH_DATA (push, 0x00010001); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> + PUSH_TIC (push, pNv->scratch, SOLID(unit), 1, 1, 4, >> + _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); >> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); >> PUSH_DATA (push, NV50TSC_1_0_WRAPS_REPEAT | >> NV50TSC_1_0_WRAPT_REPEAT | >> @@ -651,16 +645,8 @@ NVC0EXAPictTexture(NVPtr pNv, PixmapPtr ppix, >> PicturePtr ppict, unsigned unit) >> >> PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); >> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); >> - PUSH_DATA (push, format); >> - PUSH_DATA (push, bo->offset); >> - PUSH_DATA (push, (bo->offset >> 32) | >> - (bo->config.nvc0.tile_mode << 18) | >> - 0xd0005000); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, (1 << 31) | ppix->drawable.width); >> - PUSH_DATA (push, (1 << 16) | ppix->drawable.height); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> + PUSH_TIC (push, bo, 0, ppix->drawable.width, >> ppix->drawable.height, 0, >> + format); >> >> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); >> if (ppict->repeat) { >> diff --git a/src/nvc0_xv.c b/src/nvc0_xv.c >> index 129c505..c3e58da 100644 >> --- a/src/nvc0_xv.c >> +++ b/src/nvc0_xv.c >> @@ -74,7 +74,6 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, >> { dst, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR }, >> }; >> struct nouveau_pushbuf *push = pNv->pushbuf; >> - uint32_t mode = 0xd0005000 | (src->config.nvc0.tile_mode << 18); >> float X1, X2, Y1, Y2; >> BoxPtr pbox; >> int nbox; >> @@ -105,71 +104,49 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, >> >> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET, 16); >> if (id == FOURCC_YV12 || id == FOURCC_I420) { >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >> + PUSH_TIC(push, src, packed_y, width, height, 0, >> + NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> NV50TIC_0_0_FMT_8); >> - PUSH_DATA (push, ((src->offset + packed_y))); >> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, width); >> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >> + PUSH_TIC(push, src, uv, width >> 1, height >> 1, 0, > > > At first look, this seems wrong. Why do you shift width/height here?See the PUSH_DATA's I remove below. It's because with YV12/I420 are sub-sampled, so the U/V have 1 pixel's worth of data to every quad of Y data. But ultimately, it's dictated by what the old code had.> > >> + NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> NV50TIC_0_0_FMT_8_8); >> - PUSH_DATA (push, ((src->offset + uv))); >> - PUSH_DATA (push, ((src->offset + uv) >> 32) | mode); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, width >> 1); >> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | (height >> 1)); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> } else { >> - if (id == FOURCC_UYVY) { >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >> + unsigned format; >> + if (id == FOURCC_UYVY) { >> + format = NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> - NV50TIC_0_0_FMT_8_8); >> - } else { >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >> + NV50TIC_0_0_FMT_8_8; >> + } else { >> + format = NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> - NV50TIC_0_0_FMT_8_8); >> - } >> - PUSH_DATA (push, ((src->offset + packed_y))); >> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, width); >> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> - if (id == FOURCC_UYVY) { >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | >> + NV50TIC_0_0_FMT_8_8; >> + } >> + PUSH_TIC(push, src, packed_y, width, height, 0, format); >> + >> + if (id == FOURCC_UYVY) { >> + format = NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> - NV50TIC_0_0_FMT_8_8_8_8); >> - } else { >> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | >> + NV50TIC_0_0_FMT_8_8_8_8; >> + } else { >> + format = NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | >> NV50TIC_0_0_MAPB_C1 | NV50TIC_0_0_TYPEB_UNORM | >> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >> - NV50TIC_0_0_FMT_8_8_8_8); >> - } >> - PUSH_DATA (push, ((src->offset + packed_y))); >> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >> - PUSH_DATA (push, 0x00300000); >> - PUSH_DATA (push, (width >> 1)); >> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >> - PUSH_DATA (push, 0x03000000); >> - PUSH_DATA (push, 0x00000000); >> + NV50TIC_0_0_FMT_8_8_8_8; >> + } >> + PUSH_TIC(push, src, packed_y, width >> 1, height, 0, >> format); >> } >> >> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET, 16); >> > > -- > -Samuel
Samuel Pitoiset
2016-Oct-17 12:37 UTC
[Nouveau] [PATCH 4/5] nvc0: refactor TIC uploads to allow different specifies per generation
On 10/17/2016 02:24 PM, Ilia Mirkin wrote:> On Mon, Oct 17, 2016 at 5:46 AM, Samuel Pitoiset > <samuel.pitoiset at gmail.com> wrote: >> Few comments below. >> >> On 10/16/2016 09:14 PM, Ilia Mirkin wrote: >>> >>> This flips GM10x to using the updated format, which is what I tested >>> with. However GM20x and GP10x also use this TIC format. >>> >>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu> >>> --- >>> src/nvc0_accel.c | 11 ++++++++++ >>> src/nvc0_accel.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++ >>> src/nvc0_exa.c | 22 ++++--------------- >>> src/nvc0_xv.c | 67 >>> +++++++++++++++++++------------------------------------- >>> 4 files changed, 93 insertions(+), 63 deletions(-) >>> >>> diff --git a/src/nvc0_accel.c b/src/nvc0_accel.c >>> index 0682806..8da5051 100644 >>> --- a/src/nvc0_accel.c >>> +++ b/src/nvc0_accel.c >>> @@ -322,6 +322,17 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) >>> PUSH_DATA (push, (bo->offset + MISC_OFFSET) >> 32); >>> PUSH_DATA (push, (bo->offset + MISC_OFFSET)); >>> PUSH_DATA (push, 1); >>> + } else { >>> + /* Use new TIC format. Not strictly necessary for GM20x+ >>> */ >> >> >> Yes, but it's also enabled by default in mesa, looks fine. >> >> >>> + IMMED_NVC0(push, SUBC_3D(0x0f10), 1); >>> + if (pNv->dev->chipset >= 0x120) { >>> + /* Use center sample locations. */ >>> + BEGIN_NVC0(push, SUBC_3D(0x11e0), 4); >>> + PUSH_DATA (push, 0x88888888); >>> + PUSH_DATA (push, 0x88888888); >>> + PUSH_DATA (push, 0x88888888); >>> + PUSH_DATA (push, 0x88888888); >>> + } >>> } >>> >>> BEGIN_NVC0(push, NVC0_3D(CODE_ADDRESS_HIGH), 2); >>> diff --git a/src/nvc0_accel.h b/src/nvc0_accel.h >>> index 607e97b..9378236 100644 >>> --- a/src/nvc0_accel.h >>> +++ b/src/nvc0_accel.h >>> @@ -7,6 +7,7 @@ >>> #include "hwdefs/nvc0_m2mf.xml.h" >>> #include "hwdefs/nv50_defs.xml.h" >>> #include "hwdefs/nv50_texture.h" >>> +#include "hwdefs/gm107_texture.xml.h" >>> #include "hwdefs/nv_3ddefs.xml.h" >>> >>> /* subchannel assignments, compatible with kepler's fixed layout */ >>> @@ -108,4 +109,59 @@ PUSH_DATAu(struct nouveau_pushbuf *push, struct >>> nouveau_bo *bo, >>> } >>> } >>> >>> +static __inline__ void >>> +PUSH_TIC(struct nouveau_pushbuf *push, struct nouveau_bo *bo, unsigned >>> offset, >>> + unsigned width, unsigned height, unsigned pitch, unsigned format) >>> +{ >>> + if (push->client->device->chipset < 0x110) { >>> + unsigned tic2 = 0xd0001000; >>> + if (pitch == 0) >>> + tic2 |= 0x00004000; >>> + else >>> + tic2 |= 0x0005c000; >>> + PUSH_DATA(push, format); >>> + PUSH_DATA(push, bo->offset + offset); >>> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >>> + (bo->config.nvc0.tile_mode << 18) | >>> + tic2); >>> + PUSH_DATA(push, 0x00300000); >>> + PUSH_DATA(push, 0x80000000 | width); >>> + PUSH_DATA(push, 0x00010000 | height); >>> + PUSH_DATA (push, 0x03000000); >>> + PUSH_DATA (push, 0x00000000); >> >> >> Cosmetic. > > Oops, will fix. > >> >> >>> + } else { >>> + unsigned tile_mode = bo->config.nvc0.tile_mode; >>> + PUSH_DATA(push, (format & 0x3f) | ((format & ~0x3f) << >>> 1)); >>> + PUSH_DATA(push, bo->offset + offset); >>> + if (pitch == 0) { >>> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >>> + >>> GM107_TIC2_2_HEADER_VERSION_BLOCKLINEAR); >>> + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | >>> + (tile_mode & 0x007) | >>> + (tile_mode & 0x070 >> (4 - 3)) | >>> + (tile_mode & 0x700 >> (8 - 6))); >>> + PUSH_DATA(push, >>> GM107_TIC2_4_SECTOR_PROMOTION_PROMOTE_TO_2_V | >>> + GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | >>> + GM107_TIC2_4_TEXTURE_TYPE_TWO_D | >>> + (width - 1)); >>> + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | >>> + ((height - 1) & 0xffff)); >>> + PUSH_DATA(push, >>> GM107_TIC2_6_ANISO_FINE_SPREAD_FUNC_TWO | >>> + >>> GM107_TIC2_6_ANISO_COARSE_SPREAD_FUNC_ONE); >>> + PUSH_DATA(push, 0x00000000); >>> + } else { >>> + PUSH_DATA(push, ((bo->offset + offset) >> 32) | >>> + >>> GM107_TIC2_2_HEADER_VERSION_PITCH); >>> + PUSH_DATA(push, GM107_TIC2_3_LOD_ANISO_QUALITY_2 | >>> + (pitch >> 5)); >>> + PUSH_DATA(push, >>> GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR | >>> + >>> GM107_TIC2_4_TEXTURE_TYPE_TWO_D_NO_MIPMAP | >>> + (width - 1)); >>> + PUSH_DATA(push, GM107_TIC2_5_NORMALIZED_COORDS | >>> (height - 1)); >>> + PUSH_DATA(push, 0x000000000); >>> + PUSH_DATA(push, 0x000000000); >>> + } >>> + } >>> +} >>> + >>> #endif >>> diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c >>> index a53dfe6..c8ace97 100644 >>> --- a/src/nvc0_exa.c >>> +++ b/src/nvc0_exa.c >>> @@ -538,14 +538,8 @@ NVC0EXAPictSolid(NVPtr pNv, PicturePtr ppict, >>> unsigned unit) >>> PUSH_DATAu(push, pNv->scratch, SOLID(unit), 1); >>> PUSH_DATA (push, ppict->pSourcePict->solidFill.color); >>> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); >>> - PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); >>> - PUSH_DATA (push, offset); >>> - PUSH_DATA (push, (offset >> 32) | 0xd005d000); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, 0x00000001); >>> - PUSH_DATA (push, 0x00010001); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> + PUSH_TIC (push, pNv->scratch, SOLID(unit), 1, 1, 4, >>> + _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); >>> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); >>> PUSH_DATA (push, NV50TSC_1_0_WRAPS_REPEAT | >>> NV50TSC_1_0_WRAPT_REPEAT | >>> @@ -651,16 +645,8 @@ NVC0EXAPictTexture(NVPtr pNv, PixmapPtr ppix, >>> PicturePtr ppict, unsigned unit) >>> >>> PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); >>> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8); >>> - PUSH_DATA (push, format); >>> - PUSH_DATA (push, bo->offset); >>> - PUSH_DATA (push, (bo->offset >> 32) | >>> - (bo->config.nvc0.tile_mode << 18) | >>> - 0xd0005000); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, (1 << 31) | ppix->drawable.width); >>> - PUSH_DATA (push, (1 << 16) | ppix->drawable.height); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> + PUSH_TIC (push, bo, 0, ppix->drawable.width, >>> ppix->drawable.height, 0, >>> + format); >>> >>> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET + (unit * 32), 8); >>> if (ppict->repeat) { >>> diff --git a/src/nvc0_xv.c b/src/nvc0_xv.c >>> index 129c505..c3e58da 100644 >>> --- a/src/nvc0_xv.c >>> +++ b/src/nvc0_xv.c >>> @@ -74,7 +74,6 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, >>> { dst, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR }, >>> }; >>> struct nouveau_pushbuf *push = pNv->pushbuf; >>> - uint32_t mode = 0xd0005000 | (src->config.nvc0.tile_mode << 18); >>> float X1, X2, Y1, Y2; >>> BoxPtr pbox; >>> int nbox; >>> @@ -105,71 +104,49 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, >>> >>> PUSH_DATAu(push, pNv->scratch, TIC_OFFSET, 16); >>> if (id == FOURCC_YV12 || id == FOURCC_I420) { >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >>> + PUSH_TIC(push, src, packed_y, width, height, 0, >>> + NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> NV50TIC_0_0_FMT_8); >>> - PUSH_DATA (push, ((src->offset + packed_y))); >>> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, width); >>> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >>> + PUSH_TIC(push, src, uv, width >> 1, height >> 1, 0, >> >> >> At first look, this seems wrong. Why do you shift width/height here? > > See the PUSH_DATA's I remove below. It's because with YV12/I420 are > sub-sampled, so the U/V have 1 pixel's worth of data to every quad of > Y data. But ultimately, it's dictated by what the old code had.Okay, I was just a bit surprised. Makes sense.> >> >> >>> + NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> NV50TIC_0_0_FMT_8_8); >>> - PUSH_DATA (push, ((src->offset + uv))); >>> - PUSH_DATA (push, ((src->offset + uv) >> 32) | mode); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, width >> 1); >>> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | (height >> 1)); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> } else { >>> - if (id == FOURCC_UYVY) { >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >>> + unsigned format; >>> + if (id == FOURCC_UYVY) { >>> + format = NV50TIC_0_0_MAPA_C1 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> - NV50TIC_0_0_FMT_8_8); >>> - } else { >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >>> + NV50TIC_0_0_FMT_8_8; >>> + } else { >>> + format = NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> - NV50TIC_0_0_FMT_8_8); >>> - } >>> - PUSH_DATA (push, ((src->offset + packed_y))); >>> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, width); >>> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> - if (id == FOURCC_UYVY) { >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | >>> + NV50TIC_0_0_FMT_8_8; >>> + } >>> + PUSH_TIC(push, src, packed_y, width, height, 0, format); >>> + >>> + if (id == FOURCC_UYVY) { >>> + format = NV50TIC_0_0_MAPA_C2 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_C0 | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> - NV50TIC_0_0_FMT_8_8_8_8); >>> - } else { >>> - PUSH_DATA (push, NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | >>> + NV50TIC_0_0_FMT_8_8_8_8; >>> + } else { >>> + format = NV50TIC_0_0_MAPA_C3 | NV50TIC_0_0_TYPEA_UNORM | >>> NV50TIC_0_0_MAPB_C1 | NV50TIC_0_0_TYPEB_UNORM | >>> NV50TIC_0_0_MAPG_ZERO | NV50TIC_0_0_TYPEG_UNORM | >>> NV50TIC_0_0_MAPR_ZERO | NV50TIC_0_0_TYPER_UNORM | >>> - NV50TIC_0_0_FMT_8_8_8_8); >>> - } >>> - PUSH_DATA (push, ((src->offset + packed_y))); >>> - PUSH_DATA (push, ((src->offset + packed_y) >> 32) | mode); >>> - PUSH_DATA (push, 0x00300000); >>> - PUSH_DATA (push, (width >> 1)); >>> - PUSH_DATA (push, (1 << NV50TIC_0_5_DEPTH_SHIFT) | height); >>> - PUSH_DATA (push, 0x03000000); >>> - PUSH_DATA (push, 0x00000000); >>> + NV50TIC_0_0_FMT_8_8_8_8; >>> + } >>> + PUSH_TIC(push, src, packed_y, width >> 1, height, 0, >>> format); >>> } >>> >>> PUSH_DATAu(push, pNv->scratch, TSC_OFFSET, 16); >>> >> >> -- >> -Samuel-- -Samuel
Reasonably Related Threads
- [PATCH 4/5] nvc0: refactor TIC uploads to allow different specifies per generation
- [PATCH v2 5/7] nvc0: refactor TIC uploads to allow different specifics per generation
- [PATCH 4/5] nvc0: refactor TIC uploads to allow different specifies per generation
- [PATCH v2 5/7] nvc0: refactor TIC uploads to allow different specifics per generation
- [PATCH 1/5] hwdefs: update nvc0_3d, add gm107_texture for new TIC format