Shader

    [Shader / HLSL] HLSL Semantic

    HLSL Semantic - Semantic은 매개 변수의 의도된 사용에 대한 정보를 전달하는 Shader Input, Output에 연결된 문자열이다. - Semantic은 Shader 단계 간에 전달되는 모든 변수에 필요하다. 정리하게된 이유 - Shader에서 Output으로 보낸 Struct의 Semantic과 해당 Struct를 Input으로 받아 사용하는 Shader의 Semantic을 일치시켜줘야 하는 부분을 동작 원리를 모르고 사용하고 있다는 느낌을 받아서 다시 한번 개념을 잡는 목적으로 정리를 하기로 생각하였다. - 찾다보니 생각보다 많은 Semantic들이 있다는 것을 알고 해당 Semantic에 대한 정리를 해보려 한다. HLSL Semantic 종류 Vertex Shader Inpu..

    [Shader / HLSL] Shader Reflection & Define Macro Resource Hash Table 을 이용한 Resource 동기화

    [Shader / HLSL] Shader Reflection & Define Macro Resource Hash Table 을 이용한 Resource 동기화

    Shader Reflection & Resource Hash Table 동기화 과정 일단 위 방식의 Resource 관리는 해당 Resource의 이름을 통해 관리를 하기 때문에 Shader Resource의 HLSL 내부의 이름과 프로젝트 내에서 선언한 Class의 이름이 동일해야한다. 해당 Resource의 Data 형식은 프로젝트 내부에서 설정하여 해당 Resource Hash Code를 이용하여 Register Slot에 올린다. 프로젝트 내부에서 선언한 Class들의 Header가 Include 되는 동시에 Hash Table에 해당 Resource Hash Table이 생성되는데, 현재 매번 올라가는 것을 방지하기 위해 Define Macro(https://kyuhwang.tistory.com..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (3)

    Shader Resource 등록 방식 및 사용 - 이어서 실질적으로 Resource가 등록되고 사용하는 방식에 대해 정리해보려 한다. 이전에 설명해둔 방식을 토대로 HashCode를 Key값으로 두고 구현을 하였다. /// ConstantBuffer Reflection // Shader ConstantBuffer.. for (unsigned int cbindex = 0; cbindex GetConstantBufferByIndex(cbindex); D3D11_SHADER_BUFFER_DESC bufferDesc; if (S..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (2)

    Shader Resource Struct / Hash Table 이전 글에서 해당 Resource 등록 과정에 대해 써놓았는데 내부적으로 사용하는 방식을 정리하려한다. 굳이 왜 해당 Resource에 대응하는 Class를 선언하여 Key값을 검색하는데에 사용하는가? 에 대한 의문이 들 수도 있는데 일단 이전에 사용하던 string Key값을 이용한 검색은 잘못된 Key를 입력했을 경우 RunTime에 반환이 잘못되거나 에러가 뜨는 상황이 자주 발생하여 실수를 최소화 하고싶어 이와 같은 방식으로 모든 Resource 관리를 변경하였다. 이제 내부 코드를 순차적으로 정리해보자. /* # HashClass Create Define * ClassName-> Struct Name * ResourceType-> S..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (1)

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (1)

    Shader Resource 관리 방식 현재 사용하고 있는 Shader Reflection을 이용하여 Constant Buffer와 1:1 대응하는 Struct의 Hash_Code를 이용하여 List를 생성한다. Shader Resource Update 동작 과정 - Shader에 선언되어 있는 Constant Buffer와 같은 이름을 갖는 Struct 생성. - Define Marcro를 이용하여 해당 Class의 Hash_Code를 Hash List에 등록. - Shader Load 후 Shader Reflection을 통해 해당 Constant Buffer의 이름을 Hash Table에서 검색 후 Buffer List의 Key 값으로 사용 - 해당 Constant Buffer Update시 1:1..

    [Shader / HLSL] RunTime Compile Shader / Shader Macro

    RunTime Compile Shader Binary File Load - 해당 Shader File을 Compile 해둔 파일을 Binary로 읽어들여 사용하는 방식. - 이미 Compile 된 Shader를 사용하기 때문에 원본 Shader는 필요가 없으며, Compile 된 파일만 필요하다. - RunTime Compile시에 사용할 수 있는 Macro, EntryPoint, Shader Model Version 설정은 불가능. - Shader File Compile 시 Shader Model Version, EntryPoint 설정 후 Compile 해야하는 불편함이 있다. RunTime Compile - 해당 Shader File을 RunTime에 Compile 하는 방식, Shader File..

    [Shader / HLSL] Shader Reflection

    Shader Reflection DirectX 11 Shader Reflection - ID3D11ShaderReflection -> 해당 struct를 통해 Shader Reflection 실행. - ID3D11ShaderReflectionConstantBuffer -> 해당 struct를 통해 ConstantBuffer Index를 기준으로 정보를 가져온다. - D3D11_SHADER_DESC -> 해당 struct를 통해 ID3D11ShaderReflection에서 Shader 정보를 가져온다. - D3D11_SHADER_BUFFER_DESC -> 해당 struct를 통해 ID3D11ShaderReflectionConstantBuffer에서 Constant Buffer 정보를 가져온다. - D3D1..