cepl.examples
cepl.examples copied to clipboard
moving-triangles fails when run-em-all is run twice
Running (cepl.examples::run-em-all) twice in succession results in moving-triangles failing with
Error Linking Program
ERROR: Could not find transform feedback binding for '_FROM_VERTEX_STAGE_._VERTEX_STAGE_OUT_1.'
To run:
(ql:quickload :cepl.examples)
(cepl:repl 800 600)
(load (asdf:system-relative-pathname :cepl.examples "pre-release-run.lisp"))
(cepl.examples::run-em-all)
(cepl.examples::run-em-all)
Details:
Compiled-stages:
// vertex-stage
#version 410
layout(location = 0) in vec4 POSITION;
uniform float I;
uniform float _42LOOP42;
vec4 CALC_POS(vec4 V_POS, float ID);
vec4 CALC_POS(vec4 V_POS, float ID)
{
vec4 POS = vec4((V_POS.xyz * 0.3f),1.0f);
float I0 = (ID / 2.0f);
return (POS + vec4(sin((I0 + _42LOOP42)),cos((3.0f * (tan(I0) + _42LOOP42))),0.0f,0.0f));
}
void main()
{
gl_Position = CALC_POS(POSITION,I);
return;
}
// fragment-stage
#version 410
layout(location = 0) out vec4 _FRAGMENT_STAGE_OUT_0;
uniform float _42LOOP42;
void main()
{
_FRAGMENT_STAGE_OUT_0 = vec4(cos(_42LOOP42),sin(_42LOOP42),0.4f,1.0f);
return;
}
Backtrace:
0: (CEPL.PIPELINES::LINK-SHADERS (26 27) 8 (#<VARJO.INTERNALS:COMPILED-VERTEX-STAGE {1009B60AC3}> #<VARJO.INTERNALS:COMPILED-FRAGMENT-STAGE {1009B96553}>) NIL NIL)
Locals:
COMPILED-STAGES = (#<VARJO.INTERNALS:COMPILED-VERTEX-STAGE {1009B60AC3}> #<VARJO.INTERNALS:COMPILED-FRAGMENT-STAGE {1009B96553}>)
PROG-ID = 8
SHADERS = (26 27)
TRANSFORM-FEEDBACK-MODE = NIL
TRANSFORM-FEEDBACK-NAMES = NIL
1: (CEPL.PIPELINES::%COMPILE-LINK-AND-UPLOAD CEPL.EXAMPLES::PROG-1 #<VARJO.INTERNALS:TRIANGLES {1007075023}> ((:VERTEX . #<CEPL.PIPELINES::GPU-FUNC-SPEC {100609F403}>) (:FRAGMENT . #<CEPL.PIPELINES::GPU-..
Locals:
COMPILED-STAGES = (#<VARJO.INTERNALS:COMPILED-VERTEX-STAGE {1009B60AC3}> #<VARJO.INTERNALS:COMPILED-FRAGMENT-STAGE {1009B96553}>)
NAME = CEPL.EXAMPLES::PROG-1
PRIMITIVE = #<VARJO.INTERNALS:TRIANGLES {1007075023}>
PROG-ID = 8
PROG-IDS = #(8 4294967295 4294967295 4294967295 4294967295 4294967295 ...)
STAGE-PAIRS = ((:VERTEX . #<CEPL.PIPELINES::GPU-FUNC-SPEC {100609F403}>) (:FRAGMENT . #<CEPL.PIPELINES::GPU-FUNC-SPEC {1006E9FDE3}>))
TFB-GROUP-COUNT = 0
2: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN CEPL.HIDDEN::CEPL.EXAMPLES.PROG-1.INIT))
[No Locals]
3: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
4: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN CEPL.HIDDEN::CEPL.EXAMPLES.PROG-1.INIT) {A2F615B}> #<SB-THREAD:MUTEX "Anonymous lock" owner: #<SB-THREAD:THREAD "main thread..
5: (CEPL.HIDDEN::CEPL.EXAMPLES.PROG-1.INIT #S(CEPL.PIPELINES::PIPELINE-STATE :DIFF-TAG 1288 :PROG-IDS #(8 4294967295 4294967295 4294967295 4294967295 4294967295 ...) :IMPLICIT-UNIFORM-UPLOAD-FUNC #<FUNCT..
Locals:
CEPL.PIPELINES::STATE = #S(CEPL.PIPELINES::PIPELINE-STATE ..)
6: (CEPL.EXAMPLES::PROG-1 #<CEPL-CONTEXT #<THREAD "main thread" RUNNING {1000B880E3}>> #<CEPL:BUFFER-STREAM (33) :LENGTH 3> NIL :I 0.0)
Locals:
#:.DEFAULTING-TEMP. = 0.0
CEPL.PIPELINES::DRAW-ARRAY = NIL
CEPL.PIPELINES::MAPG-CONTEXT = #<CEPL-CONTEXT #<THREAD "main thread" RUNNING {1000B880E3}>>
STREAM = #<CEPL:BUFFER-STREAM (33) :LENGTH 3>
7: (CEPL.EXAMPLES::STEP-DEMO)
8: (CEPL.EXAMPLES::RUN-LOOP)
The transform-feedback and moving-triangles examples both name the pipeline prog-1, and if transform-feedback is run first, the issue appears afterwards in moving-triangles.
It seems that once a transform-feedback is used in a pipeline, it is not possible to get rid of it.
Could it be that with-transform-feedback or %unbind-tfs-arrays isn't behaving right?
How to trigger the issue:
(ql:quickload :cepl.examples)
(in-package :cepl.examples)
(repl 800 600)
(load (asdf:system-relative-pathname :cepl.examples "examples/transform-feedback.lisp"))
(run-loop)
(stop-loop)
(load (asdf:system-relative-pathname :cepl.examples "examples/moving-triangles.lisp"))
(run-loop)
A trivial solution is to rename the pipeline in one of the examples, but that would only remove the symptom of the underlying issue.