reflect: expose HLSL SM version
This commit is contained in:
parent
e66c2a628f
commit
5d260e77d5
|
@ -8,6 +8,9 @@ use crate::reflect::ReflectShader;
|
||||||
/// The GLSL version to use.
|
/// The GLSL version to use.
|
||||||
pub type GlslVersion = spirv_cross::glsl::Version;
|
pub type GlslVersion = spirv_cross::glsl::Version;
|
||||||
|
|
||||||
|
/// The HLSL shader model version to use
|
||||||
|
pub type HlslVersion = spirv_cross::hlsl::ShaderModel;
|
||||||
|
|
||||||
/// The context for a GLSL compilation via spirv-cross.
|
/// The context for a GLSL compilation via spirv-cross.
|
||||||
pub struct CrossGlslContext {
|
pub struct CrossGlslContext {
|
||||||
/// A map of bindings of sampler names to binding locations.
|
/// A map of bindings of sampler names to binding locations.
|
||||||
|
@ -40,7 +43,7 @@ pub struct CrossHlslContext {
|
||||||
|
|
||||||
impl FromCompilation<GlslangCompilation> for HLSL {
|
impl FromCompilation<GlslangCompilation> for HLSL {
|
||||||
type Target = HLSL;
|
type Target = HLSL;
|
||||||
type Options = Option<()>;
|
type Options = Option<HlslVersion>;
|
||||||
type Context = CrossHlslContext;
|
type Context = CrossHlslContext;
|
||||||
type Output = impl CompileShader<Self::Target, Options = Self::Options, Context = Self::Context>
|
type Output = impl CompileShader<Self::Target, Options = Self::Options, Context = Self::Context>
|
||||||
+ ReflectShader;
|
+ ReflectShader;
|
||||||
|
|
|
@ -13,7 +13,7 @@ use spirv_cross::hlsl::ShaderModel;
|
||||||
use spirv_cross::spirv::{Ast, Decoration, Module, Resource, ShaderResources, Type};
|
use spirv_cross::spirv::{Ast, Decoration, Module, Resource, ShaderResources, Type};
|
||||||
use spirv_cross::{glsl, hlsl, ErrorCode};
|
use spirv_cross::{glsl, hlsl, ErrorCode};
|
||||||
|
|
||||||
use crate::back::cross::{CrossGlslContext, CrossHlslContext};
|
use crate::back::cross::{CrossGlslContext, CrossHlslContext, HlslVersion};
|
||||||
use crate::back::targets::{GLSL, HLSL};
|
use crate::back::targets::{GLSL, HLSL};
|
||||||
use crate::back::{CompileShader, ShaderCompilerOutput};
|
use crate::back::{CompileShader, ShaderCompilerOutput};
|
||||||
use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData};
|
use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData};
|
||||||
|
@ -823,15 +823,16 @@ impl CompileShader<GLSL> for CrossReflect<glsl::Target> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CompileShader<HLSL> for CrossReflect<hlsl::Target> {
|
impl CompileShader<HLSL> for CrossReflect<hlsl::Target> {
|
||||||
type Options = Option<()>;
|
type Options = Option<HlslVersion>;
|
||||||
type Context = CrossHlslContext;
|
type Context = CrossHlslContext;
|
||||||
|
|
||||||
fn compile(
|
fn compile(
|
||||||
mut self,
|
mut self,
|
||||||
_options: Self::Options,
|
options: Self::Options,
|
||||||
) -> Result<ShaderCompilerOutput<String, CrossHlslContext>, ShaderCompileError> {
|
) -> Result<ShaderCompilerOutput<String, CrossHlslContext>, ShaderCompileError> {
|
||||||
|
let sm = options.unwrap_or(ShaderModel::V5_0);
|
||||||
let mut options = hlsl::CompilerOptions::default();
|
let mut options = hlsl::CompilerOptions::default();
|
||||||
options.shader_model = ShaderModel::V5_0;
|
options.shader_model = sm;
|
||||||
|
|
||||||
self.vertex.set_compiler_options(&options)?;
|
self.vertex.set_compiler_options(&options)?;
|
||||||
self.fragment.set_compiler_options(&options)?;
|
self.fragment.set_compiler_options(&options)?;
|
||||||
|
|
Loading…
Reference in a new issue