summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTapani Pälli <[email protected]>2018-06-14 11:10:20 +0300
committerDylan Baker <[email protected]>2018-06-26 08:39:04 -0700
commit915d9166bf4cfdc239cf28b92c988ae1b00caa5c (patch)
tree5025d2a5e5b35c49361a7278b5ce6c279c5dc581
parentf0f66ee4ba8bf6f123932c9ef6a88b7d517b17e4 (diff)
glsl: serialize data from glTransformFeedbackVaryings
While XFB has been enabled for cache, we did not serialize enough data for the whole API to work (such as glGetProgramiv). Fixes: 6d830940f7 "Allow shader cache usage with transform feedback" Signed-off-by: Tapani Pälli <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106907 Reviewed-by: Jordan Justen <[email protected]> (cherry picked from commit ab2643e4b06f63c93a57624003679903442634a8)
-rw-r--r--src/compiler/glsl/serialize.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/compiler/glsl/serialize.cpp b/src/compiler/glsl/serialize.cpp
index 727822633df..9c21453f91e 100644
--- a/src/compiler/glsl/serialize.cpp
+++ b/src/compiler/glsl/serialize.cpp
@@ -323,6 +323,14 @@ write_xfb(struct blob *metadata, struct gl_shader_program *shProg)
blob_write_uint32(metadata, prog->info.stage);
+ /* Data set by glTransformFeedbackVaryings. */
+ blob_write_uint32(metadata, shProg->TransformFeedback.BufferMode);
+ blob_write_bytes(metadata, shProg->TransformFeedback.BufferStride,
+ sizeof(shProg->TransformFeedback.BufferStride));
+ blob_write_uint32(metadata, shProg->TransformFeedback.NumVarying);
+ for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; i++)
+ blob_write_string(metadata, shProg->TransformFeedback.VaryingNames[i]);
+
blob_write_uint32(metadata, ltf->NumOutputs);
blob_write_uint32(metadata, ltf->ActiveBuffers);
blob_write_uint32(metadata, ltf->NumVarying);
@@ -352,6 +360,18 @@ read_xfb(struct blob_reader *metadata, struct gl_shader_program *shProg)
if (xfb_stage == ~0u)
return;
+ /* Data set by glTransformFeedbackVaryings. */
+ shProg->TransformFeedback.BufferMode = blob_read_uint32(metadata);
+ blob_copy_bytes(metadata, &shProg->TransformFeedback.BufferStride,
+ sizeof(shProg->TransformFeedback.BufferStride));
+ shProg->TransformFeedback.NumVarying = blob_read_uint32(metadata);
+ shProg->TransformFeedback.VaryingNames = (char **)
+ malloc(shProg->TransformFeedback.NumVarying * sizeof(GLchar *));
+ /* Note, malloc used with VaryingNames. */
+ for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; i++)
+ shProg->TransformFeedback.VaryingNames[i] =
+ strdup(blob_read_string(metadata));
+
struct gl_program *prog = shProg->_LinkedShaders[xfb_stage]->Program;
struct gl_transform_feedback_info *ltf =
rzalloc(prog, struct gl_transform_feedback_info);