2016-06-15 1 views
2

메모리 요구 사항을 쿼리하여 텍스처를 만들고 있는데, 예상 한 것이 아닙니다. 여기 ImageCreateInfo 구조이다 :MemoryRequirements의 크기가 내가 기대하는 바가 아닙니다.

ImageCreateInfo() 
    .X2D(1024, 1024) 
    .Format(Format::R8G8B8_UNORM) 
    .InitialLayout(ImageLayout::PREINITIALIZED) 
    .Tiling(ImageTiling::LINEAR) 
    .Usage(ImageUsageFlagBits::TRANSFER_SRC); 

를 지금, 3 * 1024 * 1024 = 3,145,728의 메모리 요구를 수득 폭 1024의 높이, R, G, B의 각각에 대한 하나의 바이트를 기다리고 있었다. 그러나 대신 1,048,576을 반환합니다. 이는 1024 * 1024입니다. RGB의 각 채널에 대해 1 바이트는 신경 쓰지 않습니다. 내가 여기서 무엇을 놓치고 있니?

+3

은 R8G8B8_UNORM 형식입니까? 3 바이트 형식은 지원 될 필요가 없습니다. 당신은 vkGetPhysicalDeviceFormatProperties로 확인 할 수 있습니다. –

+0

아, 사실입니다. 체크하지 않았습니다 ... –

답변

3

당신은 이것이 3,145,728 바이트를 반환해야한다는 것이 맞지만 구현시 실제로 사용할 수있는 R8G8B8_UNORM 형식입니까? 그렇지 않은 경우 실제로 이미지를 사용할 수 없으므로 올바른 할당 크기를 얻지 못합니다.

유효성 검사 레이어를 사용하면 이미지 유효성 검사 레이어 btw에서 오류가 발생합니다.

적어도 GPU에서 지금은 타일링 모드 나 버퍼 형식으로 지원되지 않습니다. 예 : R8G8B8A8 또는 R8G8을 사용할 수 있으며 올바른 할당 크기를 반환합니다.

GPU에서 실제로 R8G8B8을 사용할 수 있다면 밉과 레이어의 수를 포함하여 전체 VkImageCreateInfo 구조를 게시 할 수 있습니까?

그래서 요청한 이미지 형식이 실제로 사용 사례 (선형, 최적, 버퍼)에 대해 지원되는지 확인하는 것이 좋습니다.

+0

예, 실제로 포맷의 가용성을 확인하지 않았습니다. VulkanInfo에 대한 빠른 확인은 말하지만 버퍼의 타일링 모드 _or_에서는 사용할 수 없습니다. –

+0

부수적으로, 나는 항상 모든 유효성 검사 레이어가 활성화 된 상태로 개발하고 있으며,이 작업은 던지지 않습니다 (SDK 1.0.8). –

+0

그래서 항상 현재 소스의 유효성 검사 레이어를 컴파일합니다. 실제로 SDK가 필요하지 않습니다.). 귀하의 경우에는 이미지 유효성 검사 레이어가 요청한 이미지 형식이 지원되지 않는 오류를 throw합니다. –

관련 문제