mirror of
https://github.com/redstrate/Physis.git
synced 2025-05-02 16:57:47 +00:00
Fix loading shader packages for Dawntrail
This commit is contained in:
parent
545888638e
commit
6995392b5b
1 changed files with 29 additions and 11 deletions
40
src/shpk.rs
40
src/shpk.rs
|
@ -18,7 +18,10 @@ pub struct ResourceParameter {
|
||||||
#[br(temp)]
|
#[br(temp)]
|
||||||
local_string_offset: u32,
|
local_string_offset: u32,
|
||||||
#[br(temp)]
|
#[br(temp)]
|
||||||
string_length: u32,
|
string_length: u16,
|
||||||
|
|
||||||
|
unknown: u16,
|
||||||
|
|
||||||
pub slot: u16,
|
pub slot: u16,
|
||||||
size: u16,
|
size: u16,
|
||||||
|
|
||||||
|
@ -42,8 +45,7 @@ pub struct Shader {
|
||||||
scalar_parameter_count: u16,
|
scalar_parameter_count: u16,
|
||||||
resource_parameter_count: u16,
|
resource_parameter_count: u16,
|
||||||
uav_parameter_count: u16,
|
uav_parameter_count: u16,
|
||||||
|
texture_count: u16,
|
||||||
unknown1: u16,
|
|
||||||
|
|
||||||
#[br(args { count: scalar_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
#[br(args { count: scalar_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
pub scalar_parameters: Vec<ResourceParameter>,
|
pub scalar_parameters: Vec<ResourceParameter>,
|
||||||
|
@ -51,6 +53,8 @@ pub struct Shader {
|
||||||
pub resource_parameters: Vec<ResourceParameter>,
|
pub resource_parameters: Vec<ResourceParameter>,
|
||||||
#[br(args { count: uav_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
#[br(args { count: uav_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
pub uav_parameters: Vec<ResourceParameter>,
|
pub uav_parameters: Vec<ResourceParameter>,
|
||||||
|
#[br(args { count: texture_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
|
pub texture_parameters: Vec<ResourceParameter>,
|
||||||
|
|
||||||
/// The HLSL bytecode of this shader. The DX level used varies.
|
/// The HLSL bytecode of this shader. The DX level used varies.
|
||||||
#[br(seek_before = SeekFrom::Start(shader_data_offset as u64 + data_offset as u64))]
|
#[br(seek_before = SeekFrom::Start(shader_data_offset as u64 + data_offset as u64))]
|
||||||
|
@ -116,7 +120,7 @@ pub struct Node {
|
||||||
pub material_keys: Vec<u32>,
|
pub material_keys: Vec<u32>,
|
||||||
#[br(count = subview_key_count)]
|
#[br(count = subview_key_count)]
|
||||||
pub subview_keys: Vec<u32>,
|
pub subview_keys: Vec<u32>,
|
||||||
#[br(count = pass_count, err_context("system_key_count = {}", material_key_count))]
|
#[br(count = pass_count)]
|
||||||
pub passes: Vec<Pass>,
|
pub passes: Vec<Pass>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,25 +131,34 @@ pub struct Node {
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub struct ShaderPackage {
|
pub struct ShaderPackage {
|
||||||
version: u32,
|
version: u32,
|
||||||
|
|
||||||
// "DX9\0" or "DX11"
|
// "DX9\0" or "DX11"
|
||||||
#[br(count = 4)]
|
#[br(count = 4)]
|
||||||
#[bw(pad_size_to = 4)]
|
#[bw(pad_size_to = 4)]
|
||||||
#[bw(map = |x : &String | x.as_bytes())]
|
#[bw(map = |x : &String | x.as_bytes())]
|
||||||
#[br(map = | x: Vec<u8> | String::from_utf8(x).unwrap().trim_matches(char::from(0)).to_string())]
|
#[br(map = | x: Vec<u8> | String::from_utf8(x).unwrap().trim_matches(char::from(0)).to_string())]
|
||||||
format: String,
|
format: String,
|
||||||
file_length: u32,
|
|
||||||
|
|
||||||
|
file_length: u32,
|
||||||
shader_data_offset: u32,
|
shader_data_offset: u32,
|
||||||
strings_offset: u32,
|
strings_offset: u32,
|
||||||
|
|
||||||
vertex_shader_count: u32,
|
vertex_shader_count: u32,
|
||||||
pixel_shader_count: u32,
|
pixel_shader_count: u32,
|
||||||
|
|
||||||
material_parameters_size: u32,
|
material_parameters_size: u32,
|
||||||
material_parameter_count: u32,
|
material_parameter_count: u16,
|
||||||
|
|
||||||
|
has_mat_param_defaults: u16,
|
||||||
|
scalar_parameter_count: u16,
|
||||||
|
#[br(temp)]
|
||||||
|
unknown1: u16,
|
||||||
|
sampler_count: u16,
|
||||||
|
texture_count: u16,
|
||||||
|
uav_count: u16,
|
||||||
|
#[br(temp)]
|
||||||
|
unknown2: u16,
|
||||||
|
|
||||||
scalar_parameter_count: u32,
|
|
||||||
resource_parameter_count: u32,
|
|
||||||
uav_count: u32,
|
|
||||||
system_key_count: u32,
|
system_key_count: u32,
|
||||||
scene_key_count: u32,
|
scene_key_count: u32,
|
||||||
material_key_count: u32,
|
material_key_count: u32,
|
||||||
|
@ -161,10 +174,15 @@ pub struct ShaderPackage {
|
||||||
#[br(count = material_parameter_count)]
|
#[br(count = material_parameter_count)]
|
||||||
material_parameters: Vec<MaterialParameter>,
|
material_parameters: Vec<MaterialParameter>,
|
||||||
|
|
||||||
|
#[br(count = if has_mat_param_defaults == 0x1 { (material_parameters_size as i32) >> 2i32 } else { 0 })]
|
||||||
|
mat_param_defaults: Vec<f32>,
|
||||||
|
|
||||||
#[br(args { count: scalar_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
#[br(args { count: scalar_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
scalar_parameters: Vec<ResourceParameter>,
|
scalar_parameters: Vec<ResourceParameter>,
|
||||||
#[br(args { count: resource_parameter_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
#[br(args { count: sampler_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
resource_parameters: Vec<ResourceParameter>,
|
sampler_parameters: Vec<ResourceParameter>,
|
||||||
|
#[br(args { count: texture_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
|
texture_parameters: Vec<ResourceParameter>,
|
||||||
#[br(args { count: uav_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
#[br(args { count: uav_count as usize, inner: ResourceParameterBinReadArgs { strings_offset }})]
|
||||||
uav_parameters: Vec<ResourceParameter>,
|
uav_parameters: Vec<ResourceParameter>,
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue