diff options
Diffstat (limited to 'src/pipeline/graphics_pipeline/creation_error.rs')
-rw-r--r-- | src/pipeline/graphics_pipeline/creation_error.rs | 380 |
1 files changed, 0 insertions, 380 deletions
diff --git a/src/pipeline/graphics_pipeline/creation_error.rs b/src/pipeline/graphics_pipeline/creation_error.rs deleted file mode 100644 index 434426e..0000000 --- a/src/pipeline/graphics_pipeline/creation_error.rs +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright (c) 2017 The vulkano developers -// Licensed under the Apache License, Version 2.0 -// <LICENSE-APACHE or -// https://www.apache.org/licenses/LICENSE-2.0> or the MIT -// license <LICENSE-MIT or https://opensource.org/licenses/MIT>, -// at your option. All files in the project carrying such -// notice may not be copied, modified, or distributed except -// according to those terms. - -use crate::pipeline::input_assembly::PrimitiveTopology; -use crate::pipeline::layout::PipelineLayoutSupersetError; -use crate::pipeline::shader::ShaderInterfaceMismatchError; -use crate::pipeline::vertex::IncompatibleVertexDefinitionError; -use crate::Error; -use crate::OomError; -use std::error; -use std::fmt; -use std::u32; - -/// Error that can happen when creating a graphics pipeline. -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum GraphicsPipelineCreationError { - /// Not enough memory. - OomError(OomError), - - /// The pipeline layout is not compatible with what the shaders expect. - IncompatiblePipelineLayout(PipelineLayoutSupersetError), - - /// The provided specialization constants are not compatible with what the shader expects. - IncompatibleSpecializationConstants, - - /// The output interface of one shader and the input interface of the next shader does not match. - ShaderStagesMismatch(ShaderInterfaceMismatchError), - - /// The output of the fragment shader is not compatible with what the render pass subpass - /// expects. - FragmentShaderRenderPassIncompatible, - - /// The vertex definition is not compatible with the input of the vertex shader. - IncompatibleVertexDefinition(IncompatibleVertexDefinitionError), - - /// The maximum stride value for vertex input (ie. the distance between two vertex elements) - /// has been exceeded. - MaxVertexInputBindingStrideExceeded { - /// Index of the faulty binding. - binding: u32, - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: u32, - }, - - /// The maximum number of vertex sources has been exceeded. - MaxVertexInputBindingsExceeded { - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: u32, - }, - - /// The maximum offset for a vertex attribute has been exceeded. This means that your vertex - /// struct is too large. - MaxVertexInputAttributeOffsetExceeded { - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: u32, - }, - - /// The maximum number of vertex attributes has been exceeded. - MaxVertexInputAttributesExceeded { - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: usize, - }, - - /// The `vertex_attribute_instance_rate_divisor` feature must be enabled in order to use - /// instance rate divisors. - VertexAttributeInstanceRateDivisorFeatureNotEnabled, - - /// The `vertex_attribute_instance_rate_zero_divisor` feature must be enabled in order to use - /// an instance rate divisor of zero. - VertexAttributeInstanceRateZeroDivisorFeatureNotEnabled, - - /// The maximum value for the instance rate divisor has been exceeded. - MaxVertexAttribDivisorExceeded { - /// Index of the faulty binding. - binding: u32, - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: u32, - }, - - /// The user requested to use primitive restart, but the primitive topology doesn't support it. - PrimitiveDoesntSupportPrimitiveRestart { - /// The topology that doesn't support primitive restart. - primitive: PrimitiveTopology, - }, - - /// The `multi_viewport` feature must be enabled in order to use multiple viewports at once. - MultiViewportFeatureNotEnabled, - - /// The maximum number of viewports has been exceeded. - MaxViewportsExceeded { - /// Maximum allowed value. - max: u32, - /// Value that was passed. - obtained: u32, - }, - - /// The maximum dimensions of viewports has been exceeded. - MaxViewportDimensionsExceeded, - - /// The minimum or maximum bounds of viewports have been exceeded. - ViewportBoundsExceeded, - - /// The `wide_lines` feature must be enabled in order to use a line width greater than 1.0. - WideLinesFeatureNotEnabled, - - /// The `depth_clamp` feature must be enabled in order to use depth clamping. - DepthClampFeatureNotEnabled, - - /// The `depth_bias_clamp` feature must be enabled in order to use a depth bias clamp different - /// from 0.0. - DepthBiasClampFeatureNotEnabled, - - /// The `fill_mode_non_solid` feature must be enabled in order to use a polygon mode different - /// from `Fill`. - FillModeNonSolidFeatureNotEnabled, - - /// The `depth_bounds` feature must be enabled in order to use depth bounds testing. - DepthBoundsFeatureNotEnabled, - - /// The requested stencil test is invalid. - WrongStencilState, - - /// The primitives topology does not match what the geometry shader expects. - TopologyNotMatchingGeometryShader, - - /// The `geometry_shader` feature must be enabled in order to use geometry shaders. - GeometryShaderFeatureNotEnabled, - - /// The `tessellation_shader` feature must be enabled in order to use tessellation shaders. - TessellationShaderFeatureNotEnabled, - - /// The number of attachments specified in the blending does not match the number of - /// attachments in the subpass. - MismatchBlendingAttachmentsCount, - - /// The `independent_blend` feature must be enabled in order to use different blending - /// operations per attachment. - IndependentBlendFeatureNotEnabled, - - /// The `logic_op` feature must be enabled in order to use logic operations. - LogicOpFeatureNotEnabled, - - /// The depth test requires a depth attachment but render pass has no depth attachment, or - /// depth writing is enabled and the depth attachment is read-only. - NoDepthAttachment, - - /// The stencil test requires a stencil attachment but render pass has no stencil attachment, or - /// stencil writing is enabled and the stencil attachment is read-only. - NoStencilAttachment, - - /// Tried to use a patch list without a tessellation shader, or a non-patch-list with a - /// tessellation shader. - InvalidPrimitiveTopology, - - /// The `maxTessellationPatchSize` limit was exceeded. - MaxTessellationPatchSizeExceeded, - - /// The wrong type of shader has been passed. - /// - /// For example you passed a vertex shader as the fragment shader. - WrongShaderType, - - /// The `sample_rate_shading` feature must be enabled in order to use sample shading. - SampleRateShadingFeatureNotEnabled, - - /// The `alpha_to_one` feature must be enabled in order to use alpha-to-one. - AlphaToOneFeatureNotEnabled, - - /// The device doesn't support using the `multiview´ feature with geometry shaders. - MultiviewGeometryShaderNotSupported, - - /// The device doesn't support using the `multiview´ feature with tessellation shaders. - MultiviewTessellationShaderNotSupported, -} - -impl error::Error for GraphicsPipelineCreationError { - #[inline] - fn source(&self) -> Option<&(dyn error::Error + 'static)> { - match *self { - GraphicsPipelineCreationError::OomError(ref err) => Some(err), - GraphicsPipelineCreationError::IncompatiblePipelineLayout(ref err) => Some(err), - GraphicsPipelineCreationError::ShaderStagesMismatch(ref err) => Some(err), - GraphicsPipelineCreationError::IncompatibleVertexDefinition(ref err) => Some(err), - _ => None, - } - } -} - -impl fmt::Display for GraphicsPipelineCreationError { - // TODO: finish - #[inline] - fn fmt(&self, fmt: &mut fmt::Formatter) -> Result<(), fmt::Error> { - write!( - fmt, - "{}", - match *self { - GraphicsPipelineCreationError::OomError(_) => "not enough memory available", - GraphicsPipelineCreationError::ShaderStagesMismatch(_) => { - "the output interface of one shader and the input interface of the next shader does not match" - } - GraphicsPipelineCreationError::IncompatiblePipelineLayout(_) => { - "the pipeline layout is not compatible with what the shaders expect" - } - GraphicsPipelineCreationError::IncompatibleSpecializationConstants => { - "the provided specialization constants are not compatible with what the shader expects" - } - GraphicsPipelineCreationError::FragmentShaderRenderPassIncompatible => { - "the output of the fragment shader is not compatible with what the render pass \ - subpass expects" - } - GraphicsPipelineCreationError::IncompatibleVertexDefinition(_) => { - "the vertex definition is not compatible with the input of the vertex shader" - } - GraphicsPipelineCreationError::MaxVertexInputBindingStrideExceeded { .. } => { - "the maximum stride value for vertex input (ie. the distance between two vertex \ - elements) has been exceeded" - } - GraphicsPipelineCreationError::MaxVertexInputBindingsExceeded { .. } => { - "the maximum number of vertex sources has been exceeded" - } - GraphicsPipelineCreationError::MaxVertexInputAttributeOffsetExceeded { .. } => { - "the maximum offset for a vertex attribute has been exceeded" - } - GraphicsPipelineCreationError::MaxVertexInputAttributesExceeded { .. } => { - "the maximum number of vertex attributes has been exceeded" - } - GraphicsPipelineCreationError::VertexAttributeInstanceRateDivisorFeatureNotEnabled => { - "the `vertex_attribute_instance_rate_divisor` feature must be enabled in order to use instance rate divisors" - } - GraphicsPipelineCreationError::VertexAttributeInstanceRateZeroDivisorFeatureNotEnabled => { - "the `vertex_attribute_instance_rate_zero_divisor` feature must be enabled in order to use an instance rate divisor of zero" - } - GraphicsPipelineCreationError::MaxVertexAttribDivisorExceeded { .. } => { - "the maximum value for the instance rate divisor has been exceeded" - } - GraphicsPipelineCreationError::PrimitiveDoesntSupportPrimitiveRestart { - .. - } => { - "the user requested to use primitive restart, but the primitive topology \ - doesn't support it" - } - GraphicsPipelineCreationError::MultiViewportFeatureNotEnabled => { - "the `multi_viewport` feature must be enabled in order to use multiple viewports \ - at once" - } - GraphicsPipelineCreationError::MaxViewportsExceeded { .. } => { - "the maximum number of viewports has been exceeded" - } - GraphicsPipelineCreationError::MaxViewportDimensionsExceeded => { - "the maximum dimensions of viewports has been exceeded" - } - GraphicsPipelineCreationError::ViewportBoundsExceeded => { - "the minimum or maximum bounds of viewports have been exceeded" - } - GraphicsPipelineCreationError::WideLinesFeatureNotEnabled => { - "the `wide_lines` feature must be enabled in order to use a line width \ - greater than 1.0" - } - GraphicsPipelineCreationError::DepthClampFeatureNotEnabled => { - "the `depth_clamp` feature must be enabled in order to use depth clamping" - } - GraphicsPipelineCreationError::DepthBiasClampFeatureNotEnabled => { - "the `depth_bias_clamp` feature must be enabled in order to use a depth bias \ - clamp different from 0.0." - } - GraphicsPipelineCreationError::FillModeNonSolidFeatureNotEnabled => { - "the `fill_mode_non_solid` feature must be enabled in order to use a polygon mode \ - different from `Fill`" - } - GraphicsPipelineCreationError::DepthBoundsFeatureNotEnabled => { - "the `depth_bounds` feature must be enabled in order to use depth bounds testing" - } - GraphicsPipelineCreationError::WrongStencilState => { - "the requested stencil test is invalid" - } - GraphicsPipelineCreationError::TopologyNotMatchingGeometryShader => { - "the primitives topology does not match what the geometry shader expects" - } - GraphicsPipelineCreationError::GeometryShaderFeatureNotEnabled => { - "the `geometry_shader` feature must be enabled in order to use geometry shaders" - } - GraphicsPipelineCreationError::TessellationShaderFeatureNotEnabled => { - "the `tessellation_shader` feature must be enabled in order to use tessellation \ - shaders" - } - GraphicsPipelineCreationError::MismatchBlendingAttachmentsCount => { - "the number of attachments specified in the blending does not match the number of \ - attachments in the subpass" - } - GraphicsPipelineCreationError::IndependentBlendFeatureNotEnabled => { - "the `independent_blend` feature must be enabled in order to use different \ - blending operations per attachment" - } - GraphicsPipelineCreationError::LogicOpFeatureNotEnabled => { - "the `logic_op` feature must be enabled in order to use logic operations" - } - GraphicsPipelineCreationError::NoDepthAttachment => { - "the depth attachment of the render pass does not match the depth test" - } - GraphicsPipelineCreationError::NoStencilAttachment => { - "the stencil attachment of the render pass does not match the stencil test" - } - GraphicsPipelineCreationError::InvalidPrimitiveTopology => { - "trying to use a patch list without a tessellation shader, or a non-patch-list \ - with a tessellation shader" - } - GraphicsPipelineCreationError::MaxTessellationPatchSizeExceeded => { - "the maximum tessellation patch size was exceeded" - } - GraphicsPipelineCreationError::WrongShaderType => { - "the wrong type of shader has been passed" - } - GraphicsPipelineCreationError::SampleRateShadingFeatureNotEnabled => { - "the `sample_rate_shading` feature must be enabled in order to use sample shading" - } - GraphicsPipelineCreationError::AlphaToOneFeatureNotEnabled => { - "the `alpha_to_one` feature must be enabled in order to use alpha-to-one" - } - GraphicsPipelineCreationError::MultiviewGeometryShaderNotSupported => { - "the device doesn't support using the `multiview´ feature with geometry shaders" - } - GraphicsPipelineCreationError::MultiviewTessellationShaderNotSupported => { - "the device doesn't support using the `multiview´ feature with tessellation shaders" - } - } - ) - } -} - -impl From<OomError> for GraphicsPipelineCreationError { - #[inline] - fn from(err: OomError) -> GraphicsPipelineCreationError { - GraphicsPipelineCreationError::OomError(err) - } -} - -impl From<PipelineLayoutSupersetError> for GraphicsPipelineCreationError { - #[inline] - fn from(err: PipelineLayoutSupersetError) -> GraphicsPipelineCreationError { - GraphicsPipelineCreationError::IncompatiblePipelineLayout(err) - } -} - -impl From<IncompatibleVertexDefinitionError> for GraphicsPipelineCreationError { - #[inline] - fn from(err: IncompatibleVertexDefinitionError) -> GraphicsPipelineCreationError { - GraphicsPipelineCreationError::IncompatibleVertexDefinition(err) - } -} - -impl From<Error> for GraphicsPipelineCreationError { - #[inline] - fn from(err: Error) -> GraphicsPipelineCreationError { - match err { - err @ Error::OutOfHostMemory => { - GraphicsPipelineCreationError::OomError(OomError::from(err)) - } - err @ Error::OutOfDeviceMemory => { - GraphicsPipelineCreationError::OomError(OomError::from(err)) - } - _ => panic!("unexpected error: {:?}", err), - } - } -} |