* [PATCH] drm/radeon/kms: r600 CS parser fixes
@ 2010-08-06 6:54 Alex Deucher
2010-08-10 15:14 ` Andy Furniss
0 siblings, 1 reply; 11+ messages in thread
From: Alex Deucher @ 2010-08-06 6:54 UTC (permalink / raw)
To: airlied, dri-devel
- buffer offsets in the base regs are 256b aligned so
shift properly when comparing, fixed by Andre Maasikas
- mipmap size was calculated wrong when nlevel=0
- texture bo offsets were used after the bo base address was added
- vertex resource size register is size - 1, not size
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: Andre Maasikas <amaasikas@gmail.com>
---
drivers/gpu/drm/radeon/r600_cs.c | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index c3ea212..52b5252 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -174,7 +174,7 @@ static inline int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i)
dev_warn(p->dev, "FMASK or CMASK buffer are not supported by this kernel\n");
return -EINVAL;
}
- size = radeon_bo_size(track->cb_color_bo[i]);
+ size = radeon_bo_size(track->cb_color_bo[i]) - track->cb_color_bo_offset[i];
if (r600_bpe_from_format(&bpe, G_0280A0_FORMAT(track->cb_color_info[i]))) {
dev_warn(p->dev, "%s:%d cb invalid format %d for %d (0x%08X)\n",
__func__, __LINE__, G_0280A0_FORMAT(track->cb_color_info[i]),
@@ -938,7 +938,7 @@ static inline int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx
return -EINVAL;
}
tmp = (reg - CB_COLOR0_BASE) / 4;
- track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx);
+ track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8;
ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
track->cb_color_base_last[tmp] = ib[idx];
track->cb_color_bo[tmp] = reloc->robj;
@@ -950,7 +950,7 @@ static inline int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx
"0x%04X\n", reg);
return -EINVAL;
}
- track->db_offset = radeon_get_ib_value(p, idx);
+ track->db_offset = radeon_get_ib_value(p, idx) << 8;
ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
track->db_bo = reloc->robj;
break;
@@ -1055,10 +1055,10 @@ static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned nlevels
}
*l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
*mipmap_size = offset;
- if (!blevel)
- *mipmap_size -= *l0_size;
if (!nlevels)
*mipmap_size = *l0_size;
+ if (!blevel)
+ *mipmap_size -= *l0_size;
}
/**
@@ -1165,14 +1165,14 @@ static inline int r600_check_texture_resource(struct radeon_cs_parser *p, u32 i
(pitch_align * bpe),
&l0_size, &mipmap_size);
/* using get ib will give us the offset into the texture bo */
- word0 = radeon_get_ib_value(p, idx + 2);
+ word0 = radeon_get_ib_value(p, idx + 2) << 8;
if ((l0_size + word0) > radeon_bo_size(texture)) {
dev_warn(p->dev, "texture bo too small (%d %d %d %d -> %d have %ld)\n",
w0, h0, bpe, word0, l0_size, radeon_bo_size(texture));
return -EINVAL;
}
/* using get ib will give us the offset into the mipmap bo */
- word0 = radeon_get_ib_value(p, idx + 3);
+ word0 = radeon_get_ib_value(p, idx + 3) << 8;
if ((mipmap_size + word0) > radeon_bo_size(mipmap)) {
dev_warn(p->dev, "mipmap bo too small (%d %d %d %d %d %d -> %d have %ld)\n",
w0, h0, bpe, blevel, nlevels, word0, mipmap_size, radeon_bo_size(texture));
@@ -1366,7 +1366,7 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
}
for (i = 0; i < (pkt->count / 7); i++) {
struct radeon_bo *texture, *mipmap;
- u32 size, offset;
+ u32 size, offset, base_offset, mip_offset;
switch (G__SQ_VTX_CONSTANT_TYPE(radeon_get_ib_value(p, idx+(i*7)+6+1))) {
case SQ_TEX_VTX_VALID_TEXTURE:
@@ -1376,7 +1376,7 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
DRM_ERROR("bad SET_RESOURCE\n");
return -EINVAL;
}
- ib[idx+1+(i*7)+2] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
+ base_offset = (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
ib[idx+1+(i*7)+0] |= S_038000_TILE_MODE(V_038000_ARRAY_2D_TILED_THIN1);
else if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
@@ -1388,12 +1388,14 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
DRM_ERROR("bad SET_RESOURCE\n");
return -EINVAL;
}
- ib[idx+1+(i*7)+3] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
+ mip_offset = (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
mipmap = reloc->robj;
r = r600_check_texture_resource(p, idx+(i*7)+1,
texture, mipmap, reloc->lobj.tiling_flags);
if (r)
return r;
+ ib[idx+1+(i*7)+2] += base_offset;
+ ib[idx+1+(i*7)+3] += mip_offset;
break;
case SQ_TEX_VTX_VALID_BUFFER:
/* vtx base */
@@ -1403,10 +1405,11 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
return -EINVAL;
}
offset = radeon_get_ib_value(p, idx+1+(i*7)+0);
- size = radeon_get_ib_value(p, idx+1+(i*7)+1);
+ size = radeon_get_ib_value(p, idx+1+(i*7)+1) + 1;
if (p->rdev && (size + offset) > radeon_bo_size(reloc->robj)) {
/* force size to size of the buffer */
- dev_warn(p->dev, "vbo resource seems too big for the bo\n");
+ dev_warn(p->dev, "vbo resource seems too big (%d) for the bo (%ld)\n",
+ size + offset, radeon_bo_size(reloc->robj));
ib[idx+1+(i*7)+1] = radeon_bo_size(reloc->robj);
}
ib[idx+1+(i*7)+0] += (u32)((reloc->lobj.gpu_offset) & 0xffffffff);
--
1.7.1.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-06 6:54 [PATCH] drm/radeon/kms: r600 CS parser fixes Alex Deucher
@ 2010-08-10 15:14 ` Andy Furniss
2010-08-13 2:56 ` Jon Sturm
0 siblings, 1 reply; 11+ messages in thread
From: Andy Furniss @ 2010-08-10 15:14 UTC (permalink / raw)
To: Alex Deucher; +Cc: dri-devel
Alex Deucher wrote:
> - buffer offsets in the base regs are 256b aligned so
> shift properly when comparing, fixed by Andre Maasikas
> - mipmap size was calculated wrong when nlevel=0
> - texture bo offsets were used after the bo base address was added
> - vertex resource size register is size - 1, not size
I tried this patch on a d-r-t from 100805 (todays d-r-t seems to have
reverted to a month ago and doesn't work well with tiling)
The patch, while fixing mesa demos lodbias and cubemap, seems to regress
ut2004 and doom3 demos -
radeon 0000:01:00.0: mipmap bo too small (128 128 4 0 7 393216 -> 458816
have 655360)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-10 15:14 ` Andy Furniss
@ 2010-08-13 2:56 ` Jon Sturm
2010-08-13 10:38 ` Andy Furniss
0 siblings, 1 reply; 11+ messages in thread
From: Jon Sturm @ 2010-08-13 2:56 UTC (permalink / raw)
To: Andy Furniss; +Cc: dri-devel
On Tue, Aug 10, 2010 at 10:14 AM, Andy Furniss <andyqos@ukfsn.org> wrote:
> Alex Deucher wrote:
>>
>> - buffer offsets in the base regs are 256b aligned so
>> shift properly when comparing, fixed by Andre Maasikas
>> - mipmap size was calculated wrong when nlevel=0
>> - texture bo offsets were used after the bo base address was added
>> - vertex resource size register is size - 1, not size
>
> I tried this patch on a d-r-t from 100805 (todays d-r-t seems to have
> reverted to a month ago and doesn't work well with tiling)
>
> The patch, while fixing mesa demos lodbias and cubemap, seems to regress
> ut2004 and doom3 demos -
ut2004 has been having issues for a while so I wouldn't blame this
patch 100%, Then again my issues seem to be similar to
https://bugs.freedesktop.org/show_bug.cgi?id=27443 which may or may
not be related.
>
> radeon 0000:01:00.0: mipmap bo too small (128 128 4 0 7 393216 -> 458816
> have 655360)
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-13 2:56 ` Jon Sturm
@ 2010-08-13 10:38 ` Andy Furniss
2010-08-17 21:24 ` Alex Deucher
2010-09-08 22:37 ` Alex Deucher
0 siblings, 2 replies; 11+ messages in thread
From: Andy Furniss @ 2010-08-13 10:38 UTC (permalink / raw)
To: Jon Sturm; +Cc: dri-devel
Jon Sturm wrote:
> ut2004 has been having issues for a while so I wouldn't blame this
> patch 100%, Then again my issues seem to be similar to
> https://bugs.freedesktop.org/show_bug.cgi?id=27443 which may or may
> not be related.
Only having the demo and not seriously playing all levels (or much at
all) I haven't hit that one.
This one does seem to be down to the patch. If you have the full game it
could be things are different, as it's actually the nvidia ad that the
demo starts with the provokes this. Doom3 demo I can get into a saved
game, but it dies with the same error after about 10 secs.
Both work with the same d-r-t without the patch.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-13 10:38 ` Andy Furniss
@ 2010-08-17 21:24 ` Alex Deucher
2010-08-18 11:39 ` Andy Furniss
2010-09-08 22:37 ` Alex Deucher
1 sibling, 1 reply; 11+ messages in thread
From: Alex Deucher @ 2010-08-17 21:24 UTC (permalink / raw)
To: Andy Furniss; +Cc: dri-devel
On Fri, Aug 13, 2010 at 6:38 AM, Andy Furniss <andyqos@ukfsn.org> wrote:
> Jon Sturm wrote:
>
>> ut2004 has been having issues for a while so I wouldn't blame this
>> patch 100%, Then again my issues seem to be similar to
>> https://bugs.freedesktop.org/show_bug.cgi?id=27443 which may or may
>> not be related.
>
> Only having the demo and not seriously playing all levels (or much at all) I
> haven't hit that one.
>
> This one does seem to be down to the patch. If you have the full game it
> could be things are different, as it's actually the nvidia ad that the demo
> starts with the provokes this. Doom3 demo I can get into a saved game, but
> it dies with the same error after about 10 secs.
>
> Both work with the same d-r-t without the patch.
Does reverting this part of the patch fix it?
@@ -1055,10 +1055,10 @@ static void r600_texture_size(unsigned nfaces,
unsigned blevel, unsigned nlevels
}
*l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
*mipmap_size = offset;
- if (!blevel)
- *mipmap_size -= *l0_size;
if (!nlevels)
*mipmap_size = *l0_size;
+ if (!blevel)
+ *mipmap_size -= *l0_size;
}
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-17 21:24 ` Alex Deucher
@ 2010-08-18 11:39 ` Andy Furniss
2010-08-18 11:45 ` Andy Furniss
0 siblings, 1 reply; 11+ messages in thread
From: Andy Furniss @ 2010-08-18 11:39 UTC (permalink / raw)
To: Alex Deucher; +Cc: dri-devel
Alex Deucher wrote:
> Does reverting this part of the patch fix it?
>
> @@ -1055,10 +1055,10 @@ static void r600_texture_size(unsigned nfaces,
> unsigned blevel, unsigned nlevels
> }
> *l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
> *mipmap_size = offset;
> - if (!blevel)
> - *mipmap_size -= *l0_size;
> if (!nlevels)
> *mipmap_size = *l0_size;
> + if (!blevel)
> + *mipmap_size -= *l0_size;
> }
No, it does make the nunbers bigger, though -
radeon 0000:01:00.0: mipmap bo too small (512 512 4 0 0 1048576 ->
1048576 have 1409024)
Just as a double check this is my diff against current d-r-t for this test.
diff --git a/drivers/gpu/drm/radeon/r600_cs.c
b/drivers/gpu/drm/radeon/r600_cs.c
index d886494..f6580ca 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -1051,10 +1051,10 @@ static void r600_texture_size(unsigned nfaces,
unsigned blevel, unsigned nlevels
}
*l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
*mipmap_size = offset;
- if (!nlevels)
- *mipmap_size = *l0_size;
if (!blevel)
*mipmap_size -= *l0_size;
+ if (!nlevels)
+ *mipmap_size = *l0_size;
}
/**
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-18 11:39 ` Andy Furniss
@ 2010-08-18 11:45 ` Andy Furniss
2010-08-18 14:07 ` Alex Deucher
0 siblings, 1 reply; 11+ messages in thread
From: Andy Furniss @ 2010-08-18 11:45 UTC (permalink / raw)
To: Alex Deucher; +Cc: dri-devel
Andy Furniss wrote:
> No, it does make the nunbers bigger, though -
>
> radeon 0000:01:00.0: mipmap bo too small (512 512 4 0 0 1048576 ->
> 1048576 have 1409024)
Further (non exhaustive) testing shows it regresses some mesa demos as
well - lodbias,reflect & shadowtex -
mipmap bo too small (256 256 4 0 0 262144 -> 262144 have 360448)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-18 11:45 ` Andy Furniss
@ 2010-08-18 14:07 ` Alex Deucher
2010-08-18 16:05 ` Andy Furniss
0 siblings, 1 reply; 11+ messages in thread
From: Alex Deucher @ 2010-08-18 14:07 UTC (permalink / raw)
To: Andy Furniss; +Cc: dri-devel
On Wed, Aug 18, 2010 at 7:45 AM, Andy Furniss <andyqos@ukfsn.org> wrote:
> Andy Furniss wrote:
>
>> No, it does make the nunbers bigger, though -
>>
>> radeon 0000:01:00.0: mipmap bo too small (512 512 4 0 0 1048576 ->
>> 1048576 have 1409024)
>
> Further (non exhaustive) testing shows it regresses some mesa demos as well
> - lodbias,reflect & shadowtex -
>
> mipmap bo too small (256 256 4 0 0 262144 -> 262144 have 360448)
>
The initial patch or the partial revert I just had you try?
Alex
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-18 14:07 ` Alex Deucher
@ 2010-08-18 16:05 ` Andy Furniss
0 siblings, 0 replies; 11+ messages in thread
From: Andy Furniss @ 2010-08-18 16:05 UTC (permalink / raw)
To: Alex Deucher; +Cc: dri-devel
Alex Deucher wrote:
> On Wed, Aug 18, 2010 at 7:45 AM, Andy Furniss<andyqos@ukfsn.org> wrote:
>> Andy Furniss wrote:
>>
>>> No, it does make the nunbers bigger, though -
>>>
>>> radeon 0000:01:00.0: mipmap bo too small (512 512 4 0 0 1048576 ->
>>> 1048576 have 1409024)
>>
>> Further (non exhaustive) testing shows it regresses some mesa demos as well
>> - lodbias,reflect& shadowtex -
>>
>> mipmap bo too small (256 256 4 0 0 262144 -> 262144 have 360448)
>>
>
> The initial patch or the partial revert I just had you try?
>
> Alex
>
The partial revert.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-08-13 10:38 ` Andy Furniss
2010-08-17 21:24 ` Alex Deucher
@ 2010-09-08 22:37 ` Alex Deucher
2010-09-09 10:27 ` Andy Furniss
1 sibling, 1 reply; 11+ messages in thread
From: Alex Deucher @ 2010-09-08 22:37 UTC (permalink / raw)
To: Andy Furniss; +Cc: dri-devel
On Fri, Aug 13, 2010 at 6:38 AM, Andy Furniss <andyqos@ukfsn.org> wrote:
> Jon Sturm wrote:
>
>> ut2004 has been having issues for a while so I wouldn't blame this
>> patch 100%, Then again my issues seem to be similar to
>> https://bugs.freedesktop.org/show_bug.cgi?id=27443 which may or may
>> not be related.
>
> Only having the demo and not seriously playing all levels (or much at all) I
> haven't hit that one.
>
> This one does seem to be down to the patch. If you have the full game it
> could be things are different, as it's actually the nvidia ad that the demo
> starts with the provokes this. Doom3 demo I can get into a saved game, but
> it dies with the same error after about 10 secs.
>
> Both work with the same d-r-t without the patch.
Does this patch help?
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index d886494..e83fc88 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -1046,7 +1046,6 @@ static void r600_texture_size(unsigned nfaces,
unsigned blevel, unsigned nlevels
rowstride = ALIGN((width * bpe), pitch_align);
size = height * rowstride * depth;
offset += size;
- offset = (offset + 0x1f) & ~0x1f;
}
}
*l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
Alex
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] drm/radeon/kms: r600 CS parser fixes
2010-09-08 22:37 ` Alex Deucher
@ 2010-09-09 10:27 ` Andy Furniss
0 siblings, 0 replies; 11+ messages in thread
From: Andy Furniss @ 2010-09-09 10:27 UTC (permalink / raw)
To: Alex Deucher; +Cc: dri-devel
Alex Deucher wrote:
> Does this patch help?
>
> diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
> index d886494..e83fc88 100644
> --- a/drivers/gpu/drm/radeon/r600_cs.c
> +++ b/drivers/gpu/drm/radeon/r600_cs.c
> @@ -1046,7 +1046,6 @@ static void r600_texture_size(unsigned nfaces,
> unsigned blevel, unsigned nlevels
> rowstride = ALIGN((width * bpe), pitch_align);
> size = height * rowstride * depth;
> offset += size;
> - offset = (offset + 0x1f)& ~0x1f;
> }
> }
> *l0_size = ALIGN((w0 * bpe), pitch_align) * h0 * d0;
No. it's still the same with this.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-09-09 10:27 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-06 6:54 [PATCH] drm/radeon/kms: r600 CS parser fixes Alex Deucher
2010-08-10 15:14 ` Andy Furniss
2010-08-13 2:56 ` Jon Sturm
2010-08-13 10:38 ` Andy Furniss
2010-08-17 21:24 ` Alex Deucher
2010-08-18 11:39 ` Andy Furniss
2010-08-18 11:45 ` Andy Furniss
2010-08-18 14:07 ` Alex Deucher
2010-08-18 16:05 ` Andy Furniss
2010-09-08 22:37 ` Alex Deucher
2010-09-09 10:27 ` Andy Furniss
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.