Bug 17098

Summary: 3D textures don't work on R300/R400/R500 DRI
Product: Mesa Reporter: Aditya Kadambi <rakadambi>
Component: Drivers/DRI/r300Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: MostAwesomedude, nhaehnle
Version: 7.2   
Hardware: All   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: Simple 3D texture code that I found on the web URL I mentioned in the report
The screenshot of the sample 3D texture code. Shows just red blob.
Screenshot of output from OpenRM sample application

Description Aditya Kadambi 2008-08-12 13:47:07 UTC
Created attachment 18243 [details]
Simple 3D texture code that I found on the web URL I mentioned in the report

I have been trying to get 3D textures to work on these cards for a while.

3D textures do work on R200 DRI. They don't work on R300-R400-R500 DRI.

The test programs I used worked on R200 cards. They also work with ATI proprietary drivers on all cards.

Test programs:

1. A sample 3D texture program I found on the web. I am attaching the code and output screenshot

http://gpwiki.org/index.php/OpenGL:Tutorials:3D_Textures

The output should look like this:

http://gpwiki.org/index.php/Files:3dtex-example2.jpg

However, my output on the R300/R400/R500 cards is just a red pyramid.

This program works well on R200 drivers.

2. Another test program was from OpenRM scenegraph: 

http://www.openrm.org/docs/demoprogs.shtml#vrend

This program again works well with R200 drivers.


My test systems (on which 3D textures don't work):
-----------------

1. Fedora 9 X86_64

R300- R400 based card (ATI Technologies Inc R480 [Radeon X800 GTO (PCIE)])

uname -a output:

Linux localhost.localdomain 2.6.25.11-97.fc9.x86_64 #1 SMP Mon Jul 21 01:09:10 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

glxinfo output:

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, 
    GLX_OML_swap_method, GLX_SGI_swap_control, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_visual_select_group
client glx vendor string: SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_allocate_memory, 
    GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap
GLX version: 1.2
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_SGI_swap_control, 
    GLX_SGI_video_sync, GLX_SGIS_multisample, GLX_SGIX_fbconfig, 
    GLX_SGIX_visual_select_group
OpenGL vendor string: DRI R300 Project
OpenGL renderer string: Mesa DRI R300 20060815 TCL
OpenGL version string: 1.3 Mesa 7.1 rc1
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_fragment_program, GL_ARB_imaging, 
    GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_shadow, 
    GL_ARB_texture_border_clamp, GL_ARB_texture_compression, 
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_MESAX_texture_float, 
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_rectangle, 
    GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object, 
    GL_ARB_vertex_program, GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra, 
    GL_EXT_blend_color, GL_EXT_blend_equation_separate, 
    GL_EXT_blend_func_separate, GL_EXT_blend_logic_op, GL_EXT_blend_minmax, 
    GL_EXT_blend_subtract, GL_EXT_clip_volume_hint, 
    GL_EXT_compiled_vertex_array, GL_EXT_convolution, GL_EXT_copy_texture, 
    GL_EXT_draw_range_elements, GL_EXT_gpu_program_parameters, 
    GL_EXT_histogram, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, 
    GL_EXT_polygon_offset, GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, 
    GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture, 
    GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod_bias, 
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, 
    GL_EXT_texture_rectangle, GL_EXT_vertex_array, GL_APPLE_packed_pixels, 
    GL_ATI_blend_equation_separate, GL_ATI_texture_env_combine3, 
    GL_ATI_texture_mirror_once, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_MESA_pack_invert, GL_MESA_ycbcr_texture, GL_MESA_window_pos, 
    GL_NV_blend_square, GL_NV_light_max_exponent, GL_NV_texture_rectangle, 
    GL_NV_texgen_reflection, GL_NV_vertex_program, GL_OES_read_format, 
    GL_SGI_color_matrix, GL_SGI_color_table, GL_SGIS_generate_mipmap, 
    GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, 
    GL_SGIS_texture_lod, GL_SGIX_depth_texture, GL_SUN_multi_draw_arrays

3 GLX Visuals
   visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav
 id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------
0x21 24 tc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x22 24 dc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x6f 32 tc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None

16 GLXFBConfigs:
   visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav
 id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------
0x70  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x71  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x72  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x73  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x74  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x75  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x76  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x77  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x78  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x79  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x7a  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x7b  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x7c  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x7d  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x7e  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x7f  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow

2. Fedora 10 Alpha

R500 based card (ATI Technologies - X1650 AGP)

uname -a output

Linux localhost.localdomain 2.6.27-0.244.rc2.git1.fc10.x86_64 #1 SMP Fri Aug 8 13:14:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

glxinfo output

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
   GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
   GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
   GLX_OML_swap_method, GLX_SGI_swap_control, GLX_SGIS_multisample,
   GLX_SGIX_fbconfig, GLX_SGIX_visual_select_group
client glx vendor string: SGI
client glx version string: 1.4
client glx extensions:
   GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
   GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_allocate_memory,
   GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control,
   GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_OML_sync_control,
   GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync,
   GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
   GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap
GLX version: 1.2
GLX extensions:
   GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
   GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_swap_control,
   GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_SGI_swap_control,
   GLX_SGI_video_sync, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
   GLX_SGIX_visual_select_group
OpenGL vendor string: DRI R300 Project
OpenGL renderer string: Mesa DRI R300 20060815 AGP 4x TCL
OpenGL version string: 1.3 Mesa 7.1 rc1
OpenGL extensions:
   GL_ARB_depth_texture, GL_ARB_fragment_program, GL_ARB_imaging,
   GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_shadow,
   GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
   GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
   GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
   GL_ARB_texture_env_dot3, GL_MESAX_texture_float,
   GL_ARB_texture_mirrored_repeat, GL_ARB_texture_rectangle,
   GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object,
   GL_ARB_vertex_program, GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra,
   GL_EXT_blend_color, GL_EXT_blend_equation_separate,
   GL_EXT_blend_func_separate, GL_EXT_blend_logic_op, GL_EXT_blend_minmax,
   GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
   GL_EXT_compiled_vertex_array, GL_EXT_convolution, GL_EXT_copy_texture,
   GL_EXT_draw_range_elements, GL_EXT_gpu_program_parameters,
   GL_EXT_histogram, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels,
   GL_EXT_polygon_offset, GL_EXT_rescale_normal, GL_EXT_secondary_color,
   GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
   GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture,
   GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_edge_clamp,
   GL_EXT_texture_env_add, GL_EXT_texture_env_combine,
   GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
   GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp,
   GL_EXT_texture_object, GL_EXT_texture_rectangle, GL_EXT_vertex_array,
   GL_APPLE_packed_pixels, GL_ATI_blend_equation_separate,
   GL_ATI_texture_env_combine3, GL_ATI_texture_mirror_once,
   GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat,
   GL_INGR_blend_func_separate, GL_MESA_pack_invert, GL_MESA_ycbcr_texture,
   GL_MESA_window_pos, GL_NV_blend_square, GL_NV_light_max_exponent,
   GL_NV_texture_rectangle, GL_NV_texgen_reflection, GL_NV_vertex_program,
   GL_OES_read_format, GL_SGI_color_matrix, GL_SGI_color_table,
   GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
   GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SGIX_depth_texture,
   GL_SUN_multi_draw_arrays

3 GLX Visuals
  visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav
 id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------
0x21 24 tc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x22 24 dc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x67 32 tc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None

16 GLXFBConfigs:
  visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav
 id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------
0x68  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x69  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x6a  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x6b  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x6c  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x6d  0 tc  0 32  0 r  .  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x6e  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x6f  0 tc  0 32  0 r  y  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x70  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x71  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x72  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  0  0  0  0  0  0 0 None
0x73  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  0 16 16 16 16  0 0 Slow
0x74  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x75  0 dc  0 32  0 r  .  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
0x76  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  8  0  0  0  0  0 0 None
0x77  0 dc  0 32  0 r  y  .  8  8  8  8  0 24  8 16 16 16 16  0 0 Slow
Comment 1 Aditya Kadambi 2008-08-12 13:48:18 UTC
Created attachment 18244 [details]
The screenshot of the sample 3D texture code. Shows just red blob.
Comment 2 Aditya Kadambi 2008-08-12 13:51:24 UTC
Created attachment 18245 [details]
Screenshot of output from OpenRM sample application
Comment 3 Nicolai Hähnle 2008-08-13 01:43:19 UTC
Thanks for the report. I'm not really surprised that 3D textures don't work, we should add an automatic test to Piglit for this.
Comment 4 Aditya Kadambi 2008-08-13 06:31:48 UTC
Can I help with any testing? debugging?
Comment 5 Alex Deucher 2008-08-14 06:26:24 UTC
this should be fixed in mesa git:
57acb0fad9e6299eb2e1e2c06d043b2a418e3732
Comment 6 Michel Dänzer 2008-08-14 07:39:39 UTC
(In reply to comment #5)
> this should be fixed in mesa git:
> 57acb0fad9e6299eb2e1e2c06d043b2a418e3732

Right, that fixed mesa/progs/demos/stex3d on my RV350. R5xx may need more work.
Comment 7 Corbin Simpson 2008-08-14 08:29:15 UTC
(In reply to comment #6)
>
> Right, that fixed mesa/progs/demos/stex3d on my RV350. R5xx may need more work.
>

Yeah, doesn't fix it on my X1700. One sec, lemme try some stuff.
Comment 8 Aditya Kadambi 2008-08-14 10:08:30 UTC
Just tested my code on R300 (X800 PCIE) card. The example programs work great.

I will test this on R500 (X1650 AGP) and report back.

Thanks for the fixes.
Comment 9 Aditya Kadambi 2008-08-15 14:30:45 UTC
The demo programs work fine on X1650 too. 
I don't think they are very different from 1700, are they?
Comment 10 Alex Deucher 2008-08-15 14:48:13 UTC
(In reply to comment #9)
> The demo programs work fine on X1650 too. 
> I don't think they are very different from 1700, are they?
> 

Should be the same.  Looking at the docs the 3d texture stuff is the same across r3xx-r5xx, so I think we are all set.
Comment 11 Nicolai Hähnle 2008-08-16 02:38:35 UTC
They're quite similar. I've added a testcase for Piglit in which I've found that there are still problems that must be due to texture memory alignment. The most common cases should work for the time being. I'll take a look at it in the r300-bufmgr branch since I'm reworking texture handling anyway.
Comment 12 Aditya Kadambi 2008-08-16 06:13:08 UTC
Great! do you suggest I resolve this bug? or leave it open for your fixes?
Comment 13 Aditya Kadambi 2008-08-18 15:55:58 UTC
I get a SW fallback message sometimes:

*********************************WARN_ONCE*********************************
File r300_render.c function r300Fallback line 451
Software fallback:ctx->RenderMode != GL_RENDER
***************************************************************************

This happens when I have multiple viewports in a single window. I suspect this is probably an artifact. It doesn't seem to fallback to SW rendering after this message. Because SW rendering of these volumes would be unusable. The transformations after this message just seem fine.
Comment 14 Nicolai Hähnle 2008-08-19 00:24:16 UTC
That warning is not a bug (maybe we should just remove it or move it to a _mesa_debug to stop getting those reports). It indicates that the application sets RenderMode to SELECT or FEEDBACK, which we can't do in hardware. It is therefore going to be slower than other things, but it should work. In any case, that message itself is not an indication of a problem other than a potential performance problem.
Comment 15 Aditya Kadambi 2008-12-05 13:47:30 UTC
Well, I just tested this on my new ATI X1950Pro (RV580) card and it doesn't work. 

So

ATI x800 PCIE (R480) -> Works
ATI x1650Pro AGP -> Works

ATI x1950Pro (RV580) -> Does _not_ work.

I tried with the same programs as before.
Comment 16 Aditya Kadambi 2008-12-08 11:26:34 UTC
Just tested with 7.2.0.14.fc10 on Fedora 10 X86_84 system. Still doesn't work on X1950Pro card.
Comment 17 Aditya Kadambi 2008-12-10 05:48:20 UTC
I ran Piglit: The tex3d test failed:

@test: texturing/tex3d
info: @@@Returncode: 1

Errors:
Render 3D texture: Mismatch at 0x0x1
Expected: 87,205,222,213
Readback: 120,152,34,125
Failure with texture size 1x1x2, format = GL_RGBA


Output:
errors!
Render 3D texture: Mismatch at 0x0x1
Expected: 87,205,222,213
Readback: 120,152,34,125
Failure with texture size 1x1x2, format = GL_RGBA

note: Returncode was 1
returncode: 1
result: fail
time: 0.088436126709
Comment 18 Maciej Cencora 2009-05-08 08:06:35 UTC
I confirm it.
Looks like only 3d textures with rowstride < 64 bytes are affected (found with mesa/progs/demos/stex3d).
Comment 19 Aditya Kadambi 2009-06-11 14:03:49 UTC
Fixed in F11 Mesa 7.5-Devel
Comment 20 Maciej Cencora 2009-06-14 16:20:58 UTC
The small 3D textures are fixed now (commit e0eafde746fee546b16205e4a605e28f78e120f9).
Comment 21 Aditya Kadambi 2009-06-14 16:34:24 UTC
Wow! thanks!

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.