Bug 29762 - [r300g] Coldest: Buffer too small for color buffer 0 (need 3407872 have 2023424) !
Summary: [r300g] Coldest: Buffer too small for color buffer 0 (need 3407872 have 20234...
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/Gallium/r300 (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: Default DRI bug account
QA Contact:
URL: http://www.coldestgame.com/site/
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-08-23 11:54 UTC by Sven Arvidsson
Modified: 2010-09-11 21:16 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Sven Arvidsson 2010-08-23 11:54:59 UTC
Hi,

The game "Coldest" isn't rendering properly when run with r300g, quite a lot of objects seems to be missing. This error is logged: "The kernel rejected CS, see dmesg for more information." and dmesg reveals:

[   60.158478] [drm:r100_cs_track_check] *ERROR* [drm] Buffer too small for color buffer 0 (need 3407872 have 2023424) !
[   60.158482] [drm:r100_cs_track_check] *ERROR* [drm] color buffer 0 (832 4 0 1024)
[   60.158483] [drm:radeon_cs_ioctl] *ERROR* Invalid command stream !

Coldest is FLOSS, so source is available if that's helpful to figure this out.


System environment:
-- system architecture: 32-bit
-- Linux distribution: Debian unstable
-- GPU: RV570
-- Model: Asus EAX1950Pro 256MB
-- Display connector: DVI
-- xf86-video-ati: fd686668289258ffaf6b81057545e50612aac6a8
-- xserver: 1.8.99.904 (1.9.0 RC 5)
-- mesa: 4b2b5f8e30347ce0a1818524f8825335d47eb5ca
-- drm: b61e81a191d3a5c269c5f7c40199aebc9ebc034c
-- kernel: 2.6.35
Comment 1 Sven Arvidsson 2010-08-25 14:25:03 UTC
Looks like Coldest also needs loop unrolling(?), if that's so it could explain the missing objects.

r300 FP: Compiler Error:
Fragment program does not support relative addressing  of source operands.
Comment 2 Marek Olšák 2010-08-25 18:35:47 UTC
The compiler error is valid. Relative addressing (array indexing) is not implemented for fragment shaders.

The hardware only suppports relative addressing using the loop counter and only on r500. The loop counter register type has been removed in Gallium so it cannot be implemented directly. Some non-trivial work is needed in the compiler.
Comment 3 Andrew Randrianasulu 2010-08-25 19:27:22 UTC
(In reply to comment #2)
> The compiler error is valid. Relative addressing (array indexing) is not
> implemented for fragment shaders.
> 
> The hardware only suppports relative addressing using the loop counter and only
> on r500. The loop counter register type has been removed in Gallium so it
> cannot be implemented directly. Some non-trivial work is needed in the
> compiler.

May be it will be not  too bad idea to restore this register type support in Gallium first? Anyone remember why it was removed?
Comment 4 Marek Olšák 2010-08-25 23:19:49 UTC
(In reply to comment #3)
> May be it will be not  too bad idea to restore this register type support in
> Gallium first? Anyone remember why it was removed?

I guess no one was using it, so I would not call it "support". Either way, we have to start from scratch. Tom Stellard might know how hard it would be to implement relative addressing in fragment shaders.
Comment 5 Marek Olšák 2010-09-11 21:16:39 UTC
The DRM errors are fixed by this kernel patch, which will hopefully end up in 2.6.36:

http://lists.freedesktop.org/archives/dri-devel/2010-September/003830.html

For loop unrolling issues, see other bugs, e.g. bug 30007.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.