Bug 69689

Summary: FBO with GL_RGBA16F texture format silent drawing corruption
Product: Mesa Reporter: Johannes Jordan <freedesktop>
Component: Drivers/Gallium/r600Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED INVALID QA Contact:
Severity: major    
Priority: medium    
Version: 9.2   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: Testcase header file
Testcase source file

Description Johannes Jordan 2013-09-23 02:25:38 UTC
I create an FBO with internal texture format GL_RGBA16F. I also tried GL_RGBA32F. Both work fine with my nVidia GPU.

With my ATI card it fails.

- No error is reported when creating and binding the FBO.
- Blitting the FBO on screen results in random patterns (first run), then black output

System information:
Caicos [Radeon HD 6450/7450/8450]
Running on a Gallium 0.4 on AMD CAICOS from X.Org
OpenGL version 3.0 Mesa 9.2.0 is supported
Linux 3.10.10-1-ARCH kernel

GL feature data (useful? idk):
GL_ARB_texture_float:                                          OK 
GL_ARB_texture_buffer_object:                                  OK [MISSING]
GL_ARB_texture_buffer_object_rgb32:                            MISSING
Comment 1 Alex Deucher 2013-09-23 14:01:54 UTC
Make sure you set --enable-texture-float when configuring mesa.
Comment 2 Johannes Jordan 2013-09-24 06:17:20 UTC
Thank you for your reply. The configure option --enable-texture-float is set.
See: https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/mesa
Comment 3 Ian Romanick 2013-09-24 21:18:27 UTC
(In reply to comment #1)
> Make sure you set --enable-texture-float when configuring mesa.

It should be since the driver is advertising OpenGL 3.0.
Comment 4 Johannes Jordan 2013-10-02 03:48:39 UTC
I still have the problem and I can reproduce it. I am very willing to help in debugging the issue if you give me directions.
Comment 5 Johannes Jordan 2013-11-12 14:52:35 UTC
Is there any chance this bug gets fixed?
Comment 6 Grigori Goronzy 2013-11-12 15:00:43 UTC
This works for me. Can you provide a test case?
Comment 7 Johannes Jordan 2013-11-13 06:11:44 UTC
Created attachment 89120 [details]
Testcase header file
Comment 8 Johannes Jordan 2013-11-13 06:12:08 UTC
Created attachment 89121 [details]
Testcase source file
Comment 9 Johannes Jordan 2013-11-13 06:16:05 UTC
I am sorry my testcase uses Qt, but it would be much more time consuming for me to learn/rewrite everything without Qt.

This is the qmake file:
# cat fbotest.pro 
QT       += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = fbotest
TEMPLATE = app
SOURCES += fbotest.cpp
HEADERS += fbotest.h

Then run qmake, make, ./fbotest

The testcase draws a rectangle and some text into a FBO, then blits it onto another FBO due to multisampling, finally draws the texture on screen. This is common practice.

Thank you for taking your time to try the testcase!
Comment 10 Grigori Goronzy 2013-11-15 01:29:20 UTC
This does not work because glBlitFramebuffer fails, since it is trying to blit between FBOs with different pixel formats. This isn't allowed, check for instance the OpenGL 3.3 core specification, section 4.3.2 or the EXT_framebuffer_multisample specification. They unambiguously state that read and draw framebuffer must have the same pixel format for blits that involve multisample framebuffers.

As far as I can see, this is not a problem with Mesa, but rather with your OpenGL compliance.
Comment 11 Johannes Jordan 2013-11-15 03:29:18 UTC
Thank you for your time, I very much appreciate your detailed comment. I made my code compliant and now it works as expected.

I had made a different mistake when I tried with the same format for the blit target.

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.