0529 ubo 접근권한
260529
벌칸으로 셰이더토이를 돌려보려 했다.
float uTime;
매 프레임마다 변하는 time값이 필요해서
UBO에다 넣고 돌렸는데
이렇게 나온다.

왜 이런가
하고 1시간동안 머리가 아팠는데
처음애는 정렬 문제인가 하고
alignas(16) 덕지덕지 붙였는데
해결이 안 되었다.
답은 벌칸의 디자인에 있었다.
나는 아직도 이해가 안 가지만,
"UBO 버퍼에 대한 접근 권한"을
세이더 스테이지마다 지정을 할 수 있었다.
아니, 해줘야 했다.
명시를 한 스테이지만 접근이 가능하다.
다음은 Desctiptor Set 레이아웃 정하는 부분이다.
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
// Binding 0 : Vertex shader uniform buffer //vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0),
// 아니 이걸 검증을 해줘야지 왜
// fs에서 못 읽게 함ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
vks::initializers::descriptorSetLayoutBinding(
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, // VS + FS
0
),
// Binding 1 : Fragment shader image sampler
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1)
};
VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings);
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayout, nullptr, &descriptorSetLayout));
나는 이해가 안 간다.
아니 저정도로 세부설정을 건드리게 할 거면
저정도는 유효성레이어에서 검증을 해줘야하는 거 아닌가?
이미 컴파일된 바이트코드라도
- "FS 에서 해당 UBO를 사용하고 있다."
- 그런데 런타임에 'FS 접근권한 없이' UBO를 desc set에다가 바인딩했다.
이정도는 감지할 수 있지 않을까?
validationLayer켰는데도
감지를 못한다.