[Vulkan] Uniform Buffer보다 빠르고 간단한 PushConstant을 사용하고 싶어요.
PushConstant
Vulkan에는 GPU로 데이터를 고속으로 밀어낼 수 있는 PushConstant이 있다.설치도 쉬워서 좋아요.하지만 사이즈가 작은 제한이 있습니다.
그럼에도 불구하고 모든 설비는 128bytes의 보증이 있기 때문에 그래도 사용할 수 있다.실제 조회 결과 RTX3090 최대 256 bytes 가 발견되었습니다.
auto props = physicalDevice.getProperties();
std::cout << "maxPushConstantsSize: " << props.limits.maxPushConstantsSize;
// maxPushConstantsSize: 256
설정
예를 들어 Compute shader를 사용합니다.
농담
마우스 위치 등을 입력합니다.매우 간단하고 필요없다
binding
.sample.comp
layout(push_constant) uniform PushConstants {
vec2 mousePosition;
vec2 mouseMove;
} pushConstant;
C++ 측면에서 구조체 구성하기
struct PushConstants
{
float mousePosition[2];
float mouseMove[2];
};
PushConstants pushConstants;
Piperline Layout을 제작할 때 PushContantrange에 맡기기
vk::PushConstantRange pushRange;
pushRange.setOffset(0);
pushRange.setSize(sizeof(PushConstants));
pushRange.setStageFlags(vk::ShaderStageFlagBits::eCompute);
vk::PipelineLayoutCreateInfo createInfo;
createInfo.setSetLayouts(*descSetLayout);
createInfo.setPushConstantRanges(pushRange);
vk::PipelineLayout pipelineLayout = device.createPipelineLayout(createInfo);
명령 버퍼 요청
commandBuffer.pushConstants(
*pipelineLayout,
vk::ShaderStageFlagBits::eCompute,
0, sizeof(PushConstants), &pushConstants);
끝.아주 간단합니다.
Reference
이 문제에 관하여([Vulkan] Uniform Buffer보다 빠르고 간단한 PushConstant을 사용하고 싶어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nishiki/articles/83a714eac0c05a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)