강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

오시영님의 프로필 이미지
오시영

작성한 질문수

DirectX Raytracing Programming

Ray Generation Shader

ConstnatBufferPool관련 질문

해결된 질문

작성

·

12

0

안녕하세요. 강의 잘 듣고 있습니다.

CConstantBufferManager.cpp -> CONSTANT_BUFFER_PROPERTY에서 enum값의 사이즈인 sizeof(CONSTANT_BUFFER_TYPE_RAY_TRACING)가 아니라 버퍼 구조체의 사이즈인 sizeof(CONSTANT_BUFFER_RAY_TRACING)를 저장해야 하는거 아닌가요?

이후에 다른 타입들을 추가할땐 구조체 사이즈를 넣는데, 레이트레이싱은 다른지 궁금해서 여쭤봅니다.

답변 2

1

megayuchi님의 프로필 이미지
megayuchi
지식공유자

말씀하신대로 sizeof(CONSTANT_BUFFER_TYPE_RAY_TRACING)가 아니라 sizeof(CONSTANT_BUFFER_RAY_TRACING)가 맞습니다.

이것이 문제없이 돌아갔던 이유는 constant buffer의 기본 align 사이즈가 256바이트이고, 버퍼를 만들때 256바이트 align하도록 했기 때문입니다. sizeof(CONSTANT_BUFFER_TYPE_RAY_TRACING)는 4지만 256바이트 align 하면 256이 되므로 sizeof(CONSTANT_BUFFER_RAY_TRACING)보다 충분히 큰 사이즈라 돌아가는데는 문제가 없었습니다. 어쨌든 코드는 잘못되었으므로 수정해서 다시 업로드했습니다. 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 오시영님.

CConstantBufferManager.cpp에서 CONSTANT_BUFFER_PROPERTY와 관련하여 enum 값의 크기와 버퍼 구조체의 크기 사용에 대한 질문을 주셨습니다. 일반적으로 Constant Buffer를 관리할 때는 실제 데이터를 저장하기 위한 공간을 정확히 확보해야 하므로, 데이터 구조체의 크기를 사용하는 것이 맞습니다.

관련 설명:

  • sizeof(CONSTANT_BUFFER_TYPE_RAY_TRACING): 이는 enum 값의 크기를 반환하며, 보통 4바이트로 일반 데이터를 저장하는 데는 사용되지 않습니다.
  • sizeof(CONSTANT_BUFFER_RAY_TRACING): 이는 실제로 데이터를 저장하는 구조체의 크기를 반환하며, Constant Buffer에 필요한 메모리의 크기를 정확히 정의하는 데 사용됩니다.

DirectX에서 Constant Buffer는 특정 크기(보통 16바이트의 배수)로 정렬되어야 합니다. 데이터의 패딩을 포함한 정확한 크기를 지정하는 것이 중요하며, 잘못된 크기를 사용할 경우 메모리 초과나 의도치 않은 데이터를 읽어오는 문제가 발생할 수 있습니다.

유사한 질문 & 답변 링크:

  1. DirectX에서 Constant Buffer 초기화 관련 질문
  2. Descriptor 설정 시 주의할 점은?

위 답변들도 함께 살펴보시면 구조적인 이해에 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오시영님의 프로필 이미지
오시영

작성한 질문수

질문하기