Ejemplo n.º 1
0
/** Please see header for specification */
Anvil::SwapchainUniquePtr Anvil::Swapchain::create(Anvil::SwapchainCreateInfoUniquePtr in_create_info_ptr)
{
    SwapchainUniquePtr result_ptr(nullptr,
                                  std::default_delete<Swapchain>() );
    auto               window_ptr(in_create_info_ptr->get_window() );

    result_ptr.reset(
        new Anvil::Swapchain(
            std::move(in_create_info_ptr)
        )
    );

    if (result_ptr)
    {
        if (!result_ptr->init() )
        {
            result_ptr.reset();

            goto end;
        }

        if (window_ptr                 != nullptr                                  &&
            window_ptr->get_platform() == WINDOW_PLATFORM_DUMMY_WITH_PNG_SNAPSHOTS)
        {
            dynamic_cast<Anvil::DummyWindowWithPNGSnapshots*>(window_ptr)->set_swapchain(result_ptr.get() );
        }
    }

end:
    return result_ptr;
}
/** Please see header for specification */
Anvil::DescriptorSetLayoutUniquePtr Anvil::DescriptorSetLayout::create(Anvil::DescriptorSetCreateInfoUniquePtr in_ds_create_info_ptr,
                                                                       const Anvil::BaseDevice*                in_device_ptr,
                                                                       MTSafety                                in_mt_safety)
{
    const bool                   mt_safe = Anvil::Utils::convert_mt_safety_enum_to_boolean(in_mt_safety,
                                                                                           in_device_ptr);
    DescriptorSetLayoutUniquePtr result_ptr(nullptr,
                                            std::default_delete<Anvil::DescriptorSetLayout>() );

    result_ptr.reset(
        new Anvil::DescriptorSetLayout(std::move(in_ds_create_info_ptr),
                                       in_device_ptr,
                                       mt_safe)
    );

    if (result_ptr != nullptr)
    {
        if (!result_ptr->init() )
        {
            result_ptr.reset();
        }
    }

    return result_ptr;
}
Anvil::EventCreateInfoUniquePtr Anvil::EventCreateInfo::create(const Anvil::BaseDevice* in_device_ptr)
{
    Anvil::EventCreateInfoUniquePtr result_ptr(nullptr,
                                               std::default_delete<Anvil::EventCreateInfo>() );

    result_ptr.reset(
        new Anvil::EventCreateInfo(in_device_ptr,
                                   Anvil::MTSafety::INHERIT_FROM_PARENT_DEVICE)
    );

    return result_ptr;
}
shared_ptr<IfcRotationalStiffnessSelect> IfcRotationalStiffnessSelect::createObjectFromStepData( const std::string& arg, const std::map<int,shared_ptr<IfcPPEntity> >& map )
{
	// Read SELECT TYPE
	if( arg.size() == 0 ){ return shared_ptr<IfcRotationalStiffnessSelect>(); }
	if( arg[0] == '#' )
	{
		int id=atoi( arg.substr(1,arg.length()-1).c_str() );
		std::map<int,shared_ptr<IfcPPEntity> >::const_iterator it_entity = map.find( id );
		if( it_entity != map.end() )
		{
			shared_ptr<IfcRotationalStiffnessSelect> type_object = dynamic_pointer_cast<IfcRotationalStiffnessSelect>(it_entity->second);
			return type_object;
		}
		else
		{
			std::stringstream strs;
			strs << "Object width id " << id << " not found";
			throw IfcPPException( strs.str() );
		}
	}
	else if( arg.compare("$")==0 )
	{
		return shared_ptr<IfcRotationalStiffnessSelect>();
	}
	else if( arg.compare("*")==0 )
	{
		return shared_ptr<IfcRotationalStiffnessSelect>();
	}
	else
	{
		// inline arguments
		std::string keyword;
		std::string inline_arg;
		tokenizeInlineArgument( arg, keyword, inline_arg );
		shared_ptr<IfcPPObject> result_object( nullptr );
		readInlineTypeOrEntity( keyword, inline_arg, result_object, map );
		if( result_object )
		{
			shared_ptr<IfcPPObject> result_ptr( result_object );
			shared_ptr<IfcRotationalStiffnessSelect> result_ptr_self = dynamic_pointer_cast<IfcRotationalStiffnessSelect>( result_ptr );
			if( result_ptr_self )
			{
				return result_ptr_self;
			}
		}
		std::stringstream strs;
		strs << "unhandled inline argument: " << arg << " in function IfcRotationalStiffnessSelect::readStepData" << std::endl;
		throw IfcPPException( strs.str() );
	}
	return shared_ptr<IfcRotationalStiffnessSelect>();
}
Ejemplo n.º 5
0
Anvil::FenceCreateInfoUniquePtr Anvil::FenceCreateInfo::create(const Anvil::BaseDevice* in_device_ptr,
                                                               bool                     in_create_signalled)
{
    Anvil::FenceCreateInfoUniquePtr result_ptr(nullptr,
                                               std::default_delete<Anvil::FenceCreateInfo>() );

    result_ptr.reset(
        new Anvil::FenceCreateInfo(in_device_ptr,
                                   in_create_signalled,
                                   Anvil::MT_SAFETY_INHERIT_FROM_PARENT_DEVICE)
    );

    return result_ptr;
}
/* Please see header for specification */
Anvil::PipelineLayoutManagerUniquePtr Anvil::PipelineLayoutManager::create(const Anvil::BaseDevice* in_device_ptr,
                                                                           bool                     in_mt_safe)
{
    PipelineLayoutManagerUniquePtr result_ptr(nullptr,
                                              std::default_delete<PipelineLayoutManager>() );

    result_ptr.reset(
        new Anvil::PipelineLayoutManager(in_device_ptr,
                                         in_mt_safe)
    );

    anvil_assert(result_ptr != nullptr);
    return result_ptr;
}
Ejemplo n.º 7
0
Anvil::ImageCreateInfoUniquePtr Anvil::ImageCreateInfo::create_nonsparse_alloc(const Anvil::BaseDevice*          in_device_ptr,
                                                                               VkImageType                       in_type,
                                                                               VkFormat                          in_format,
                                                                               VkImageTiling                     in_tiling,
                                                                               VkImageUsageFlags                 in_usage,
                                                                               uint32_t                          in_base_mipmap_width,
                                                                               uint32_t                          in_base_mipmap_height,
                                                                               uint32_t                          in_base_mipmap_depth,
                                                                               uint32_t                          in_n_layers,
                                                                               VkSampleCountFlagBits             in_sample_count,
                                                                               Anvil::QueueFamilyBits            in_queue_families,
                                                                               VkSharingMode                     in_sharing_mode,
                                                                               bool                              in_use_full_mipmap_chain,
                                                                               MemoryFeatureFlags                in_memory_features,
                                                                               ImageCreateFlags                  in_create_flags,
                                                                               VkImageLayout                     in_post_alloc_image_layout,
                                                                               const std::vector<MipmapRawData>* in_opt_mipmaps_ptr)
{
    Anvil::ImageCreateInfoUniquePtr result_ptr(nullptr,
                                               std::default_delete<Anvil::ImageCreateInfo>() );

    result_ptr.reset(
        new ImageCreateInfo(Anvil::ImageType::NONSPARSE_ALLOC,
                            in_device_ptr,
                            in_type,
                            in_format,
                            in_tiling,
                            in_sharing_mode,
                            in_usage,
                            in_base_mipmap_width,
                            in_base_mipmap_height,
                            in_base_mipmap_depth,
                            in_n_layers,
                            in_sample_count,
                            in_use_full_mipmap_chain,
                            in_create_flags,
                            in_queue_families,
                            ((in_opt_mipmaps_ptr != nullptr) && (in_opt_mipmaps_ptr->size() > 0)) ? VK_IMAGE_LAYOUT_PREINITIALIZED : VK_IMAGE_LAYOUT_UNDEFINED,
                            in_post_alloc_image_layout,
                            in_opt_mipmaps_ptr,
                            Anvil::MT_SAFETY_INHERIT_FROM_PARENT_DEVICE,
                            0, /* in_external_memory_handle_types */
                            in_memory_features,
                            Anvil::SPARSE_RESIDENCY_SCOPE_UNDEFINED) 
    );

    return result_ptr;
}
/** Please see header for specification */
Anvil::PipelineCacheUniquePtr Anvil::PipelineCache::create(const Anvil::BaseDevice* in_device_ptr,
                                                           bool                     in_mt_safe,
                                                           size_t                   in_initial_data_size,
                                                           const void*              in_initial_data)
{
    PipelineCacheUniquePtr result_ptr(nullptr,
                                      std::default_delete<PipelineCache>() );

    result_ptr.reset(
        new Anvil::PipelineCache(in_device_ptr,
                                 in_mt_safe,
                                 in_initial_data_size,
                                 in_initial_data)
    );

    return result_ptr;
}
Ejemplo n.º 9
0
Anvil::ImageCreateInfoUniquePtr Anvil::ImageCreateInfo::create_sparse_no_alloc(const Anvil::BaseDevice*    in_device_ptr,
                                                                               VkImageType                 in_type,
                                                                               VkFormat                    in_format,
                                                                               VkImageTiling               in_tiling,
                                                                               VkImageUsageFlags           in_usage,
                                                                               uint32_t                    in_base_mipmap_width,
                                                                               uint32_t                    in_base_mipmap_height,
                                                                               uint32_t                    in_base_mipmap_depth,
                                                                               uint32_t                    in_n_layers,
                                                                               VkSampleCountFlagBits       in_sample_count,
                                                                               Anvil::QueueFamilyBits      in_queue_families,
                                                                               VkSharingMode               in_sharing_mode,
                                                                               bool                        in_use_full_mipmap_chain,
                                                                               ImageCreateFlags            in_create_flags,
                                                                               Anvil::SparseResidencyScope in_residency_scope)
{
    Anvil::ImageCreateInfoUniquePtr result_ptr(nullptr,
                                               std::default_delete<Anvil::ImageCreateInfo>() );

    result_ptr.reset(
        new ImageCreateInfo(Anvil::ImageType::SPARSE_NO_ALLOC,
                            in_device_ptr,
                            in_type,
                            in_format,
                            in_tiling,
                            in_sharing_mode,
                            in_usage,
                            in_base_mipmap_width,
                            in_base_mipmap_height,
                            in_base_mipmap_depth,
                            in_n_layers,
                            in_sample_count,
                            in_use_full_mipmap_chain,
                            in_create_flags,
                            in_queue_families,
                            VK_IMAGE_LAYOUT_UNDEFINED,
                            VK_IMAGE_LAYOUT_UNDEFINED,
                            nullptr, /* in_opt_mipmaps_ptr */
                            Anvil::MT_SAFETY_INHERIT_FROM_PARENT_DEVICE,
                            0, /* in_external_memory_handle_types */
                            0, /* in_memory_features              */
                            in_residency_scope)
    );

    return result_ptr;
}
Ejemplo n.º 10
0
/* Please see header for specification */
Anvil::EventUniquePtr Anvil::Event::create(Anvil::EventCreateInfoUniquePtr in_create_info_ptr)
{
    Anvil::EventUniquePtr result_ptr(nullptr,
                                     std::default_delete<Anvil::Event>() );

    result_ptr.reset(
        new Anvil::Event(std::move(in_create_info_ptr) )
    );

    if (result_ptr != nullptr)
    {
        if (!result_ptr->init() )
        {
            result_ptr.reset();
        }
    }

    return result_ptr;
}
Ejemplo n.º 11
0
bool c_ip46_addr::is_ipv4(const string &ipstr) {
	as_zerofill< addrinfo > hint;
	struct addrinfo *result = nullptr;
	hint.ai_family = PF_UNSPEC;
	hint.ai_flags = AI_NUMERICHOST;
	int ret = getaddrinfo(ipstr.c_str(), nullptr, &hint, &result);
	if (ret) {
		_throw_error( std::invalid_argument("unknown address format") );
	}
	auto result_deleter = [&](struct addrinfo *result){freeaddrinfo(result);};
	std::unique_ptr<struct addrinfo, decltype(result_deleter)> result_ptr(result, result_deleter);
	if(result_ptr->ai_family == AF_INET) {
		return true;
	}
	else if (result_ptr->ai_family == AF_INET6) {
		return false;
	}
	_assert(false);
}
Ejemplo n.º 12
0
Anvil::ImageCreateInfoUniquePtr Anvil::ImageCreateInfo::create_swapchain_wrapper(const Anvil::BaseDevice* in_device_ptr,
                                                                                 const Anvil::Swapchain*  in_swapchain_ptr,
                                                                                 const VkImage&           in_image,
                                                                                 const uint32_t&          in_n_swapchain_image)
{
    Anvil::ImageCreateInfoUniquePtr result_ptr               (nullptr,
                                                              std::default_delete<Anvil::ImageCreateInfo>() );
    const auto&                     swapchain_create_info_ptr(in_swapchain_ptr->get_create_info_ptr() );

    result_ptr.reset(
        new Anvil::ImageCreateInfo(Anvil::ImageType::SWAPCHAIN_WRAPPER,
                                   in_device_ptr,
                                   VK_IMAGE_TYPE_2D,
                                   swapchain_create_info_ptr->get_format(),
                                   VK_IMAGE_TILING_OPTIMAL,
                                   VK_SHARING_MODE_EXCLUSIVE,
                                   swapchain_create_info_ptr->get_usage_flags(),
                                   swapchain_create_info_ptr->get_rendering_surface()->get_width (),
                                   swapchain_create_info_ptr->get_rendering_surface()->get_height(),
                                   1, /* base_mipmap_depth */
                                   1, /* in_n_layers       */
                                   VK_SAMPLE_COUNT_1_BIT,
                                   false, /* in_use_full_mipmap_chain */
                                   0,     /* in_create_flags          */
                                   0,     /* in_queue_families        */
                                   VK_IMAGE_LAYOUT_UNDEFINED,
                                   VK_IMAGE_LAYOUT_UNDEFINED,
                                   nullptr, /* in_opt_mipmaps_ptr */
                                   Anvil::MT_SAFETY_INHERIT_FROM_PARENT_DEVICE,
                                   0, /* in_external_memory_handle_types */
                                   0, /* in_memory_features               */
                                   Anvil::SPARSE_RESIDENCY_SCOPE_UNDEFINED)
    );

    if (result_ptr != nullptr)
    {
        result_ptr->m_swapchain_image   = in_image;
        result_ptr->m_n_swapchain_image = in_n_swapchain_image;
        result_ptr->m_swapchain_ptr     = in_swapchain_ptr;
    }

    return result_ptr;
}
Ejemplo n.º 13
0
/** Please see header for specification */
Anvil::SemaphoreUniquePtr Anvil::Semaphore::create(Anvil::SemaphoreCreateInfoUniquePtr in_create_info_ptr)
{
    SemaphoreUniquePtr result_ptr(nullptr,
                                  std::default_delete<Semaphore>() );

    result_ptr.reset(
        new Anvil::Semaphore(std::move(in_create_info_ptr) )
    );

    if (result_ptr != nullptr)
    {
        if (!result_ptr->reset() )
        {
            result_ptr.reset();
        }
    }

    return result_ptr;
}
/* Please see header for specification */
Anvil::RenderingSurfaceUniquePtr Anvil::RenderingSurface::create(Anvil::RenderingSurfaceCreateInfoUniquePtr in_create_info_ptr)
{
    RenderingSurfaceUniquePtr result_ptr(nullptr,
                                         std::default_delete<RenderingSurface>() );

    result_ptr.reset(
        new Anvil::RenderingSurface(
            std::move(in_create_info_ptr)
        )
    );

    if (result_ptr != nullptr)
    {
        if (!result_ptr->init() )
        {
            result_ptr.reset();
        }
    }

    return result_ptr;
}
Ejemplo n.º 15
0
/* Please see header for specification */
Anvil::RenderPassUniquePtr Anvil::RenderPass::create(Anvil::RenderPassCreateInfoUniquePtr in_renderpass_create_info_ptr,
                                                     Anvil::Swapchain*                    in_opt_swapchain_ptr)
{
    std::unique_ptr<RenderPass> result_ptr(nullptr,
                                           std::default_delete<RenderPass>() );

    result_ptr.reset(
        new Anvil::RenderPass(std::move(in_renderpass_create_info_ptr),
                              in_opt_swapchain_ptr)
    );

    if (result_ptr != nullptr)
    {
        if (!result_ptr->init() )
        {
            result_ptr.reset();
        }
    }

    return std::move(result_ptr);
}
/* Please see header for specification */
Anvil::GLSLShaderToSPIRVGeneratorUniquePtr Anvil::GLSLShaderToSPIRVGenerator::create(const Anvil::BaseDevice* in_opt_device_ptr,
                                                                                     const Mode&              in_mode,
                                                                                     std::string              in_data,
                                                                                     ShaderStage              in_shader_stage,
                                                                                     SpvVersion               in_spirv_version)
{
    Anvil::GLSLShaderToSPIRVGeneratorUniquePtr result_ptr(nullptr,
                                                          std::default_delete<Anvil::GLSLShaderToSPIRVGenerator>() );

    result_ptr.reset(
        new Anvil::GLSLShaderToSPIRVGenerator(in_opt_device_ptr,
                                              in_mode,
                                              in_data,
                                              in_shader_stage,
                                              in_spirv_version)
    );

    Anvil::ObjectTracker::get()->register_object(Anvil::ObjectType::ANVIL_GLSL_SHADER_TO_SPIRV_GENERATOR,
                                                 result_ptr.get() );

    return result_ptr;
}