Vulkan: Fix mismatch in shader and resource types.
This commit is contained in:
@@ -43,6 +43,7 @@ void VKDescriptorPools::add_new_pool()
|
||||
{VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, POOL_SIZE_STORAGE_IMAGE},
|
||||
{VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, POOL_SIZE_COMBINED_IMAGE_SAMPLER},
|
||||
{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, POOL_SIZE_UNIFORM_BUFFER},
|
||||
{VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, POOL_SIZE_UNIFORM_TEXEL_BUFFER},
|
||||
};
|
||||
VkDescriptorPoolCreateInfo pool_info = {};
|
||||
pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
|
||||
@@ -35,6 +35,7 @@ class VKDescriptorPools {
|
||||
static constexpr uint32_t POOL_SIZE_STORAGE_IMAGE = 1000;
|
||||
static constexpr uint32_t POOL_SIZE_COMBINED_IMAGE_SAMPLER = 1000;
|
||||
static constexpr uint32_t POOL_SIZE_UNIFORM_BUFFER = 1000;
|
||||
static constexpr uint32_t POOL_SIZE_UNIFORM_TEXEL_BUFFER = 1000;
|
||||
|
||||
VkDevice vk_device_ = VK_NULL_HANDLE;
|
||||
Vector<VkDescriptorPool> pools_;
|
||||
|
||||
@@ -762,14 +762,94 @@ bool VKShader::finalize_pipeline_layout(VkDevice vk_device,
|
||||
return true;
|
||||
}
|
||||
|
||||
static VkDescriptorType descriptor_type(
|
||||
const shader::ShaderCreateInfo::Resource::BindType bind_type)
|
||||
static VkDescriptorType storage_descriptor_type(const shader::ImageType &image_type)
|
||||
{
|
||||
switch (bind_type) {
|
||||
case shader::ShaderCreateInfo::Resource::BindType::IMAGE:
|
||||
switch (image_type) {
|
||||
case shader::ImageType::FLOAT_1D:
|
||||
case shader::ImageType::FLOAT_1D_ARRAY:
|
||||
case shader::ImageType::FLOAT_2D:
|
||||
case shader::ImageType::FLOAT_2D_ARRAY:
|
||||
case shader::ImageType::FLOAT_3D:
|
||||
case shader::ImageType::FLOAT_CUBE:
|
||||
case shader::ImageType::FLOAT_CUBE_ARRAY:
|
||||
case shader::ImageType::INT_1D:
|
||||
case shader::ImageType::INT_1D_ARRAY:
|
||||
case shader::ImageType::INT_2D:
|
||||
case shader::ImageType::INT_2D_ARRAY:
|
||||
case shader::ImageType::INT_3D:
|
||||
case shader::ImageType::INT_CUBE:
|
||||
case shader::ImageType::INT_CUBE_ARRAY:
|
||||
case shader::ImageType::UINT_1D:
|
||||
case shader::ImageType::UINT_1D_ARRAY:
|
||||
case shader::ImageType::UINT_2D:
|
||||
case shader::ImageType::UINT_2D_ARRAY:
|
||||
case shader::ImageType::UINT_3D:
|
||||
case shader::ImageType::UINT_CUBE:
|
||||
case shader::ImageType::UINT_CUBE_ARRAY:
|
||||
return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
|
||||
case shader::ShaderCreateInfo::Resource::BindType::SAMPLER:
|
||||
|
||||
case shader::ImageType::FLOAT_BUFFER:
|
||||
case shader::ImageType::INT_BUFFER:
|
||||
case shader::ImageType::UINT_BUFFER:
|
||||
return VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
|
||||
|
||||
default:
|
||||
BLI_assert_msg(false, "ImageType not supported.");
|
||||
}
|
||||
|
||||
return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
|
||||
}
|
||||
|
||||
static VkDescriptorType sampler_descriptor_type(const shader::ImageType &image_type)
|
||||
{
|
||||
switch (image_type) {
|
||||
case shader::ImageType::FLOAT_1D:
|
||||
case shader::ImageType::FLOAT_1D_ARRAY:
|
||||
case shader::ImageType::FLOAT_2D:
|
||||
case shader::ImageType::FLOAT_2D_ARRAY:
|
||||
case shader::ImageType::FLOAT_3D:
|
||||
case shader::ImageType::FLOAT_CUBE:
|
||||
case shader::ImageType::FLOAT_CUBE_ARRAY:
|
||||
case shader::ImageType::INT_1D:
|
||||
case shader::ImageType::INT_1D_ARRAY:
|
||||
case shader::ImageType::INT_2D:
|
||||
case shader::ImageType::INT_2D_ARRAY:
|
||||
case shader::ImageType::INT_3D:
|
||||
case shader::ImageType::INT_CUBE:
|
||||
case shader::ImageType::INT_CUBE_ARRAY:
|
||||
case shader::ImageType::UINT_1D:
|
||||
case shader::ImageType::UINT_1D_ARRAY:
|
||||
case shader::ImageType::UINT_2D:
|
||||
case shader::ImageType::UINT_2D_ARRAY:
|
||||
case shader::ImageType::UINT_3D:
|
||||
case shader::ImageType::UINT_CUBE:
|
||||
case shader::ImageType::UINT_CUBE_ARRAY:
|
||||
case shader::ImageType::SHADOW_2D:
|
||||
case shader::ImageType::SHADOW_2D_ARRAY:
|
||||
case shader::ImageType::SHADOW_CUBE:
|
||||
case shader::ImageType::SHADOW_CUBE_ARRAY:
|
||||
case shader::ImageType::DEPTH_2D:
|
||||
case shader::ImageType::DEPTH_2D_ARRAY:
|
||||
case shader::ImageType::DEPTH_CUBE:
|
||||
case shader::ImageType::DEPTH_CUBE_ARRAY:
|
||||
return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||
|
||||
case shader::ImageType::FLOAT_BUFFER:
|
||||
case shader::ImageType::INT_BUFFER:
|
||||
case shader::ImageType::UINT_BUFFER:
|
||||
return VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
|
||||
}
|
||||
|
||||
return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||
}
|
||||
|
||||
static VkDescriptorType descriptor_type(const shader::ShaderCreateInfo::Resource &resource)
|
||||
{
|
||||
switch (resource.bind_type) {
|
||||
case shader::ShaderCreateInfo::Resource::BindType::IMAGE:
|
||||
return storage_descriptor_type(resource.image.type);
|
||||
case shader::ShaderCreateInfo::Resource::BindType::SAMPLER:
|
||||
return sampler_descriptor_type(resource.sampler.type);
|
||||
case shader::ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER:
|
||||
return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
|
||||
case shader::ShaderCreateInfo::Resource::BindType::UNIFORM_BUFFER:
|
||||
@@ -784,7 +864,7 @@ static VkDescriptorSetLayoutBinding create_descriptor_set_layout_binding(
|
||||
{
|
||||
VkDescriptorSetLayoutBinding binding = {};
|
||||
binding.binding = shader_input.location;
|
||||
binding.descriptorType = descriptor_type(resource.bind_type);
|
||||
binding.descriptorType = descriptor_type(resource);
|
||||
binding.descriptorCount = 1;
|
||||
binding.stageFlags = VK_SHADER_STAGE_ALL;
|
||||
binding.pImmutableSamplers = nullptr;
|
||||
@@ -1132,6 +1212,9 @@ VKPipeline &VKShader::pipeline_get()
|
||||
|
||||
const VKShaderInterface &VKShader::interface_get() const
|
||||
{
|
||||
BLI_assert_msg(interface != nullptr,
|
||||
"Unable to access the shader interface when finalizing the shader, use the "
|
||||
"instance created in the finalize method.");
|
||||
return *static_cast<const VKShaderInterface *>(interface);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user