From 1417327196c4a0075f1351bbca2353e1a8760fe3 Mon Sep 17 00:00:00 2001 From: molikto Date: Wed, 29 Dec 2021 11:37:04 +0800 Subject: [PATCH] enable shader bypass --- crates/bevy_render/src/options.rs | 2 +- crates/bevy_render/src/renderer/render_device.rs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/bevy_render/src/options.rs b/crates/bevy_render/src/options.rs index 379abbe708c626..c5933365060fb9 100644 --- a/crates/bevy_render/src/options.rs +++ b/crates/bevy_render/src/options.rs @@ -38,7 +38,7 @@ impl Default for WgpuOptions { device_label: Default::default(), backends, power_preference: PowerPreference::HighPerformance, - features: wgpu::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES, + features: wgpu::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES | wgpu::Features::SPIRV_SHADER_PASSTHROUGH, limits, } } diff --git a/crates/bevy_render/src/renderer/render_device.rs b/crates/bevy_render/src/renderer/render_device.rs index 22dd807d7d5ad8..c35aae7ddf8c7c 100644 --- a/crates/bevy_render/src/renderer/render_device.rs +++ b/crates/bevy_render/src/renderer/render_device.rs @@ -4,7 +4,7 @@ use crate::render_resource::{ }; use futures_lite::future; use std::sync::Arc; -use wgpu::util::DeviceExt; +use wgpu::{util::DeviceExt, ShaderModuleDescriptorSpirV}; /// This GPU device is responsible for the creation of most rendering and compute resources. #[derive(Clone)] @@ -38,7 +38,17 @@ impl RenderDevice { /// Creates a [ShaderModule](wgpu::ShaderModule) from either SPIR-V or WGSL source code. #[inline] pub fn create_shader_module(&self, desc: &wgpu::ShaderModuleDescriptor) -> wgpu::ShaderModule { - self.device.create_shader_module(desc) + match &desc.source { + wgpu::ShaderSource::SpirV(source) => unsafe { + println!("shader bypass"); + self.device + .create_shader_module_spirv(&ShaderModuleDescriptorSpirV { + label: desc.label, + source: source.clone(), + }) + }, + _ => self.device.create_shader_module(desc), + } } /// Check for resource cleanups and mapping callbacks.