From 4cca5137aed20c93bfcb57324d094f585984c0c9 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 26 Jun 2020 18:54:56 +1000 Subject: [PATCH] glsl: define gl_LightSource members in ARB_vertex_program order MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit GLSL shares functionality with ARB_vertex_program but the GLSL spec defines the gl_LightSource builtin with a member order that is different from the packing expected in ARB_vertex_program. This difference introduces a need for specialist lowering code when handling builtin structs that is not required for normal uniform structs due to member location mismatches. Since gl_LightSource can't be redefined it shouldn't matter if we add the members in the order listed in the spec, just so long as we add them all. So here we rearrange the definition of the glsl builtin to reflex our internal layout and that of ARB_vertex_program. This required for the following patch. CC: Reviewed-by: Marek Olšák Reviewed-by: Eric Anholt Part-of: --- src/compiler/glsl/builtin_types.cpp | 4 ++-- src/compiler/glsl/builtin_variables.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/builtin_types.cpp b/src/compiler/glsl/builtin_types.cpp index d3a28acf27b..f9588e6d43f 100644 --- a/src/compiler/glsl/builtin_types.cpp +++ b/src/compiler/glsl/builtin_types.cpp @@ -83,12 +83,12 @@ static const struct glsl_struct_field gl_LightSourceParameters_fields[] = { glsl_struct_field(glsl_type::vec4_type, "position"), glsl_struct_field(glsl_type::vec4_type, "halfVector"), glsl_struct_field(glsl_type::vec3_type, "spotDirection"), - glsl_struct_field(glsl_type::float_type, "spotExponent"), - glsl_struct_field(glsl_type::float_type, "spotCutoff"), glsl_struct_field(glsl_type::float_type, "spotCosCutoff"), glsl_struct_field(glsl_type::float_type, "constantAttenuation"), glsl_struct_field(glsl_type::float_type, "linearAttenuation"), glsl_struct_field(glsl_type::float_type, "quadraticAttenuation"), + glsl_struct_field(glsl_type::float_type, "spotExponent"), + glsl_struct_field(glsl_type::float_type, "spotCutoff"), }; static const struct glsl_struct_field gl_LightModelParameters_fields[] = { diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp index c9fdac84666..a5f88d9b069 100644 --- a/src/compiler/glsl/builtin_variables.cpp +++ b/src/compiler/glsl/builtin_variables.cpp @@ -100,12 +100,12 @@ static const struct gl_builtin_uniform_element gl_LightSource_elements[] = { SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z)}, - {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW}, - {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX}, {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW}, {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX}, {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY}, {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ}, + {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW}, + {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX}, }; static const struct gl_builtin_uniform_element gl_LightModel_elements[] = { -- 2.30.2