1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Avoid using a global variable to store instance index in canvas items shader in RD renderer

This commit is contained in:
clayjohn
2025-04-04 16:32:15 -07:00
parent 4b36c0491e
commit bef26b8861

View File

@@ -25,10 +25,10 @@ layout(location = 11) in vec4 weight_attrib;
#include "canvas_uniforms_inc.glsl" #include "canvas_uniforms_inc.glsl"
#ifndef USE_ATTRIBUTES #ifndef USE_ATTRIBUTES
layout(location = 4) out flat uint instance_index;
layout(location = 4) out flat uint instance_index_interp; #else
#define instance_index params.base_instance_index
#endif // !USE_ATTRIBUTES #endif // USE_ATTRIBUTES
layout(location = 0) out vec2 uv_interp; layout(location = 0) out vec2 uv_interp;
layout(location = 1) out vec4 color_interp; layout(location = 1) out vec4 color_interp;
@@ -48,8 +48,6 @@ layout(set = 1, binding = 0, std140) uniform MaterialUniforms {
/* clang-format on */ /* clang-format on */
#endif #endif
uint instance_index;
#GLOBALS #GLOBALS
#ifdef USE_ATTRIBUTES #ifdef USE_ATTRIBUTES
@@ -67,11 +65,8 @@ void main() {
vec4 custom1 = vec4(0.0); vec4 custom1 = vec4(0.0);
#endif #endif
#ifdef USE_ATTRIBUTES #ifndef USE_ATTRIBUTES
instance_index = params.base_instance_index;
#else
instance_index = gl_InstanceIndex + params.base_instance_index; instance_index = gl_InstanceIndex + params.base_instance_index;
instance_index_interp = instance_index;
#endif // USE_ATTRIBUTES #endif // USE_ATTRIBUTES
const InstanceData draw_data = instances.data[instance_index]; const InstanceData draw_data = instances.data[instance_index];
@@ -242,7 +237,9 @@ void main() {
#include "canvas_uniforms_inc.glsl" #include "canvas_uniforms_inc.glsl"
#ifndef USE_ATTRIBUTES #ifndef USE_ATTRIBUTES
layout(location = 4) in flat uint instance_index_interp; layout(location = 4) in flat uint instance_index;
#else
#define instance_index params.base_instance_index
#endif // USE_ATTRIBUTES #endif // USE_ATTRIBUTES
layout(location = 0) in vec2 uv_interp; layout(location = 0) in vec2 uv_interp;
@@ -289,8 +286,6 @@ vec2 sdf_to_screen_uv(vec2 p_sdf) {
return p_sdf * canvas_data.sdf_to_screen; return p_sdf * canvas_data.sdf_to_screen;
} }
uint instance_index;
#GLOBALS #GLOBALS
#ifdef LIGHT_CODE_USED #ifdef LIGHT_CODE_USED
@@ -465,11 +460,6 @@ void main() {
vec2 uv = uv_interp; vec2 uv = uv_interp;
vec2 vertex = vertex_interp; vec2 vertex = vertex_interp;
#ifdef USE_ATTRIBUTES
instance_index = params.base_instance_index;
#else
instance_index = instance_index_interp;
#endif // USE_ATTRIBUTES
const InstanceData draw_data = instances.data[instance_index]; const InstanceData draw_data = instances.data[instance_index];
#if !defined(USE_ATTRIBUTES) && !defined(USE_PRIMITIVE) #if !defined(USE_ATTRIBUTES) && !defined(USE_PRIMITIVE)