OpenGL: "Fragment shader not supported by HW" on the old ATI card

In our OpenGL game, we have a shader link failure on the ATI Radeon x800 card. glGetProgramInfoLog reports:

 Fragment shader(s) failed to link, vertex shader(s) linked. Fragment Shader not supported by HW 

Some searches suggest that we can exceed the ALU instruction limit due to a very long fragmented shader. Any way to check this out?

I could not find the detailed specifications for x800 and did not in any way request a restriction on commands at runtime. And even if I could request it, how to determine the number of instructions for my shader?

+4
source share
2 answers

There are a few restrictions you can strike at:

  • maximum shader length
  • maximum number of texture constraints (this is the most easily crossed limit)
  • using unsupported features

Technically, the X800 is a shader model 2 GPU, which is exactly what GLSL 1.20 provides. When I started programming shaders using the Radeon 9800, and the X800 was just the technically advanced 9800, I quickly abandoned the idea of ​​doing this with GLSL. It was too limited. And so often, when the computer has only limited resources and capabilities, the output was using the assembly. In this case, I mean the assembly provided by the ARB_fragment_program extension.

+3
source

GLview is a great tool for easily viewing all the limitations and supported GL extensions of the GPU / driver combination. If I remember correctly, I previously used the AMD GPU ShaderAnalyzer , which allows you to see a compiled version of GLSL shaders. NVidia offers the same functionality with the nvemulate tool.

x800 is very limited in shader power compared to current GPUs. In any case, you probably have to reduce your shader complexity so that this lower-level GPU achieves the right performance. If you have a GLSL version, just choosing the different fragment shaders for the X800 is probably the most sensible.

+3
source

Source: https://habr.com/ru/post/1382039/


All Articles