cepl.examples icon indicating copy to clipboard operation
cepl.examples copied to clipboard

moving-triangles fails when run-em-all is run twice

Open metayan opened this issue 5 years ago • 1 comments

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)

metayan avatar Oct 12 '20 03:10 metayan

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.

metayan avatar Oct 12 '20 11:10 metayan