stellte sich heraus, dass ich an den falschen Deskriptor-Set verbindlich war. Es sollte immer der Desc-Set 0 gewesen sein, aber da ich einen globalen Szenendatendeskriptor-Satz hatte, dachte ich, ich müsste diesen einen zuerst binden, aber dies ist falsch und hängt von der Shader selbst ab.
Code: Select all
// Final solution, bind to desc set 0 which corresponds to the one on my shader
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, matData->pipeline.layout, 0, 1, &descSet, 0, nullptr);
< /code>
Originale Frage < /h2>
Ich arbeite an einem Vulkan -Renderer und möchte ein Shader -Reflexionssystem dafür erstellen, damit ich die Uniformen meines Shaders leicht einstellen kann. Später über eine benutzerdefinierte SetProperty -Funktion Teile des Puffers aktualisieren. Mein einheitlicher Block in GLSL ist definiert als: < /p>
#version 450
layout(set = 0, binding = 0) uniform ViewUniforms {
mat4 viewproj;
vec3 pos;
} view;
< /code>
Nach den Layoutregeln von STD140 erwarte ich, dass ViewProj 0 (64 Bytes) und POS bei Offset 64 (mit 16 für den VEC3 zugewiesenen Bytes) einnimmt. Mein Reflexionscode bestätigt, dass diese Offsets korrekt sind. Wenn ich jedoch die App in Renderdoc ausführe, stelle ich fest, dass die GPU das erste Element der Matrix (0,8033) als die x -Komponente der POS
Für Referenz ist dies die Vektordaten über die CPU
Und dies sind die Matrixdaten auf den CPU