Skip to content
  • Jason Ekstrand's avatar
    glsl: Hard-code noise to zero in builtin_functions.cpp · 4386c067
    Jason Ekstrand authored
    
    
    Version 4.4 of the GLSL spec changed the definition of noise*() to
    always return zero and earlier versions of the spec allowed zero as a
    valid implementation.
    
    All drivers, as far as I can tell, unconditionally call lower_noise()
    today which turns ir_unop_noise into zero.  We've got a 10-year-old
    comment in there saying "In the future, ir_unop_noise may be replaced by
    a call to a function that implements noise."  Well, it's the future now
    and we've not yet gotten around to that.  In the mean time, the GLSL
    spec has made doing so illegal.
    
    To make things worse, we then pretend to handle the opcode in
    glsl_to_nir, ir_to_mesa, and st_glsl_to_tgsi even though it should never
    get there given the lowering.  The lowering in st_glsl_to_tgsi defines
    noise*() to be 0.5 which is an illegal implementation of the noise
    functions according to pre-4.4 specs.  We also have opcodes for this in
    NIR which are never used because, again, we always call lower_noise().
    
    Let's just kill the whole opcode and make builtin_builder.cpp build a
    bunch of functions that just return zero.
    
    Reviewed-by: default avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
    Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: default avatarEric Anholt <eric@anholt.net>
    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4624>
    4386c067