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
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.
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.
(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?
(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.
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.