2017-11-22 7 views
0

에 maxComputeWorkGroupCount 장치 제한을 초과 할 :<a href="https://www.khronos.org/registry/vulkan/specs/1.0/man/html/vkCmdDispatch.html" rel="nofollow noreferrer">Vulkan spec document</a>에 따른 디스패치 호

을 디스패치를 ​​기록하기 위해, 호출

공극 vkCmdDispatch ( VkCommandBuffer commandBuffer, groupCountX uint32_t , groupCountY uint32_t , 을 groupCountZ uint32_t);

는 groupCountX는 maxComputeWorkGroupCount [0]

:: VkPhysicalDeviceLimits보다 작거나 같아야합니다하지만 물리적 장치의 한계보다 더 큰 groupCountX와 전화 발신을 가지고 있고 그것을 잘 작동합니다. 그리고 유효성 확인 레이어는 그것에 대해 경고하지 않았습니다. 이 WorkGroupCount 제한이 특정 공급 업체에만 적용되는지 궁금합니다.

답변

3

아니요,
유효한 사용법 Vulkan 사양의 올바른 사용 섹션은 절대적입니다.
는 (확장 텍스트의 현재 버전에서 sometimes treated poorly입니다,하지만이 경우에는 적용되지 않습니다 except) 올바른 사용법 위반

정의되지 않은 동작으로 이어집니다. 즉 "모든 것이 정상적으로 작동하는 것처럼 보입니다"에서 "귀하의 PC는 감각적이고 인류를 노예가됩니다"라는 의미입니다.

유효한 용도를 위반하는 것은 귀하의 코드의 논리적 인 오류이므로 귀하는이를 절대 지켜서는 안됩니다.

유효성 검사 항목에 의해보고되지 않으면 올바르게 설정되어 있고 실제로 한계를 초과하지 않았는지 확인하십시오. 그렇지 않으면 레이어가 불완전하므로 their repo에 신고해야합니다.

+0

이런 문제를 이미 언급 한 문제가 있습니다. [github issue] (https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/2063). 그러나 설명에 감사드립니다! – Clmelissa

2

아니요, 신고 된 한도는 특정 공급 업체에만 적용됩니다. 을 통해 획득 한 물리적 장치 제한 vkGetPhysicalDeviceProperties() 컴퓨터에 설치된 장치에 함수 호출이 적용됩니다. 응용 프로그램을 실행합니다. 그런 물리적 장치에서 논리 장치를 만들면 응용 프로그램에서 사용되는 매개 변수가보고 된 범위로 제한되어야합니다. 하드웨어/벤더/운영 체제/드라이버의 조합에 따라 다르며 이러한 변경 사항이있는 경우 다를 수 있습니다. 그러나 사양에서는 하드웨어가 최소 (또는 최대) 값을 지원해야하며 이러한 필수 제한은 모든 공급 업체에 적용됩니다. 예를 들어, 모든 공급 업체가 최소 65535 인 maxComputeWorkGroupCount를 지원해야합니다.

질문의 첫 번째 부분은 - 왜 제대로 작동하는지 ... 글쎄, 사양에 따르면 한계를 초과하면 정의되지 않은 동작이 발생할 수 있습니다. 제한에 복종하지 않아도 올바르게 작동하는 응용 프로그램은 정의되지 않은 동작으로 인식 될 수 있습니다. 그렇다면 왜 더 많은 수의 그룹을 파견하는 하드웨어가 여전히 가능한지, 그리고 왜 운전자가 그룹 수의 더 작은 값을보고하는지에 대한 질문만큼이나 이상하지 않을 수 있습니다. 나는 그 해답을 모른다. 단지 추측 할 수있다. 어쩌면 일부 상태 매개 변수/값 또는 계산 쉐이더의 크기 또는 쉐이더에서 액세스되는 설명자의 수와 같이보고 된 한계로 작업 그룹 수를 줄이고 방금 맞지 않았을 수 있습니다 (아직).