글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다

 

목차

     

     


     

     


    인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 

    😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기!

     

     

     

    VKSL 주의사항

     


     

     

    GLSL 요구사항

     

    Vulkan은 특정 버전 이상의 GLSL을 요구한다.

    SPIR-V로 컴파일하기 위해, GLSL#version 450권장되며, ESSL의 경우 최소 #version 310 es가 필요합니다.

     

     

    #version 300 es
    void main() {
    }


    Shader 코드에서 버전 지정은 코드 최상단에 작성한다. 

     

    위와 같이 지원 버전 보다 낮은 버전(#version 300 es)으로 지정했을때 아래와 같은 error 문구를 띄운다.

    error: #version: ES shaders for SPIR-V require version 310 or higher

     

     

    STD 140 메모리 레이아웃

     

    VKSLSTD 140 메모리 레이아웃을 사용한다. GLSL의 메모리 레이아웃은 STD 430이다.

     

    메모리 레이아웃은 메모리 정렬과 메모리 오프셋에 중대한 영향을 미치기 때문에 이를 제대로 이해하고 있지 않으면 렌더링 문제가 발생한다.

     

    타입 규칙
     스칼라   4 바이트의 Base Alignment를 사용하여 정렬된다.
     벡터   8 또는 16 바이트의 Base Alignment를 사용하여 정렬된다.
      ※ 참고)  8바이트는 벡터1이나 벡터2가 해당되고, 16바이트는 벡터3, 벡터4가 해당된다.
     스칼라, 벡터의 배열   각 요소들은 16 바이트의 Base Alignment를 사용하여 정렬된다.
     행렬   각 행은 16바이트의 Base Alignment를 사용하여 정렬된다.

     

     

    layout(set = 0, binding = 0) uniform UniformBlock {
         float value;
         vec3 vector;
         mat4 matrix;
         float values[3];
         bool boolean;
         int integer;
    };

     

     

    ※부연설명) float은 4byte지만 배열의 각 원소의 alignment는 16이다. 그러므로 4씩 증가하는게 아니라 16씩 증가한다.

     

    Uniform Block을 설정할 때 이 Offset에 맞춰서 설정하지 않으면 잘못된 값이 설정되고  Shader에서 잘못된 값을 uniform으로부터 읽게 된다. 그러면 렌더링 문제가 발생한다.

     


     

    '⭐ Vulkan & CMake > Vulkan' 카테고리의 다른 글

    [Vulkan] Vulkan Graphics pipeline 벌컨 그래픽스 파이프라인  (0) 2024.09.11
    [Vulkan] Vulkan Shader module  (0) 2024.09.10
    [Vulkan] SPIR-V  (0) 2024.09.10
    [Vulkan] Hello fast clear  (0) 2024.09.10
    [Vulkan] Vulkan Framebuffer  (0) 2024.09.10