diff --git a/cli/src/main.rs b/cli/src/main.rs index edf8f3e982..afc1d6f04a 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -103,10 +103,16 @@ fn main() { }; } "shader-model" => { - use naga::back::hlsl::{ShaderModel, DEFAULT_SHADER_MODEL}; + use naga::back::hlsl::ShaderModel; let string = args.next().unwrap(); - params.hlsl.shader_model = - ShaderModel::new(string.parse().unwrap_or(DEFAULT_SHADER_MODEL)); + let sm_numb = string.parse::().unwrap(); + let sm = match string.parse().unwrap() { + 50 => ShaderModel::V5_0, + 51 => ShaderModel::V5_1, + 60 => ShaderModel::V6_0, + _ => panic!("Unsupported shader model: {}", sm_numb), + }; + params.hlsl.shader_model = sm; } other => log::warn!("Unknown parameter: {}", other), } diff --git a/src/back/hlsl/mod.rs b/src/back/hlsl/mod.rs index 5825f59905..f42f5e01d8 100644 --- a/src/back/hlsl/mod.rs +++ b/src/back/hlsl/mod.rs @@ -6,20 +6,13 @@ use thiserror::Error; pub use writer::Writer; -pub const DEFAULT_SHADER_MODEL: u16 = 50; -#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)] -pub struct ShaderModel(u16); - -impl ShaderModel { - pub fn new(shader_model: u16) -> Self { - Self(shader_model) - } -} - -impl Default for ShaderModel { - fn default() -> Self { - Self(DEFAULT_SHADER_MODEL) - } +/// A HLSL shader model version. +#[allow(non_snake_case, non_camel_case_types)] +#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] +pub enum ShaderModel { + V5_0, + V5_1, + V6_0, } /// Structure that contains the configuration used in the [`Writer`](Writer) @@ -38,7 +31,7 @@ pub struct Options { impl Default for Options { fn default() -> Self { Options { - shader_model: ShaderModel(50), + shader_model: ShaderModel::V5_0, vertex_entry_point_name: String::from("vert_main"), fragment_entry_point_name: String::from("frag_main"), compute_entry_point_name: String::from("comp_main"), @@ -50,8 +43,6 @@ impl Default for Options { pub enum Error { #[error(transparent)] IoError(#[from] FmtError), - #[error("Shader model {0:?} is not supported")] - UnsupportedShaderModel(ShaderModel), #[error("A scalar with an unsupported width was requested: {0:?} {1:?}")] UnsupportedScalar(crate::ScalarKind, crate::Bytes), #[error("{0}")] diff --git a/src/back/hlsl/writer.rs b/src/back/hlsl/writer.rs index c452542e42..e46ae1bc23 100644 --- a/src/back/hlsl/writer.rs +++ b/src/back/hlsl/writer.rs @@ -1,6 +1,6 @@ //TODO: temp #![allow(dead_code)] -use super::{Error, Options, ShaderModel}; +use super::{Error, Options}; use crate::{ back, proc::{self, NameKey}, @@ -55,10 +55,6 @@ impl<'a, W: Write> Writer<'a, W> { } pub fn write(&mut self, module: &Module, info: &valid::ModuleInfo) -> BackendResult { - if self.options.shader_model < ShaderModel::default() { - return Err(Error::UnsupportedShaderModel(self.options.shader_model)); - } - self.reset(module); // Write all constants