Browse Source

Merge pull request #88573 from Arthas92t/master

Fix shader cache with transform feedback on some Android devices
Rémi Verschelde 1 year ago
parent
commit
04c71d943f
1 changed files with 13 additions and 0 deletions
  1. 13 0
      drivers/gles3/shader_gles3.cpp

+ 13 - 0
drivers/gles3/shader_gles3.cpp

@@ -585,6 +585,19 @@ bool ShaderGLES3::_load_from_cache(Version *p_version) {
 			Version::Specialization specialization;
 
 			specialization.id = glCreateProgram();
+			if (feedback_count) {
+				Vector<const char *> feedback;
+				for (int feedback_index = 0; feedback_index < feedback_count; feedback_index++) {
+					if (feedbacks[feedback_index].specialization == 0 || (feedbacks[feedback_index].specialization & specialization_key)) {
+						// Specialization for this feedback is enabled.
+						feedback.push_back(feedbacks[feedback_index].name);
+					}
+				}
+
+				if (!feedback.is_empty()) {
+					glTransformFeedbackVaryings(specialization.id, feedback.size(), feedback.ptr(), GL_INTERLEAVED_ATTRIBS);
+				}
+			}
 			glProgramBinary(specialization.id, variant_format, variant_bytes.ptr(), variant_bytes.size());
 
 			GLint link_status = 0;