mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-17 17:05:02 +00:00
Specialize vertex attributes on dst_sel (#2580)
* Specialize vertex attributes on dst_sel * compare vs attrib specs by default, ignore NumberFmt when vertex input dynamic state is supported * specialize data_format when attribute uses step rates * use num_components in data fmt instead of fmt itself
This commit is contained in:
parent
951128389d
commit
c59d5eef45
1 changed files with 11 additions and 4 deletions
|
@ -13,7 +13,9 @@
|
||||||
namespace Shader {
|
namespace Shader {
|
||||||
|
|
||||||
struct VsAttribSpecialization {
|
struct VsAttribSpecialization {
|
||||||
|
s32 num_components{};
|
||||||
AmdGpu::NumberClass num_class{};
|
AmdGpu::NumberClass num_class{};
|
||||||
|
AmdGpu::CompMapping dst_select{};
|
||||||
|
|
||||||
auto operator<=>(const VsAttribSpecialization&) const = default;
|
auto operator<=>(const VsAttribSpecialization&) const = default;
|
||||||
};
|
};
|
||||||
|
@ -89,12 +91,17 @@ struct StageSpecialization {
|
||||||
Backend::Bindings start_)
|
Backend::Bindings start_)
|
||||||
: info{&info_}, runtime_info{runtime_info_}, start{start_} {
|
: info{&info_}, runtime_info{runtime_info_}, start{start_} {
|
||||||
fetch_shader_data = Gcn::ParseFetchShader(info_);
|
fetch_shader_data = Gcn::ParseFetchShader(info_);
|
||||||
if (info_.stage == Stage::Vertex && fetch_shader_data &&
|
if (info_.stage == Stage::Vertex && fetch_shader_data) {
|
||||||
!profile_.support_legacy_vertex_attributes) {
|
|
||||||
// Specialize shader on VS input number types to follow spec.
|
// Specialize shader on VS input number types to follow spec.
|
||||||
ForEachSharp(vs_attribs, fetch_shader_data->attributes,
|
ForEachSharp(vs_attribs, fetch_shader_data->attributes,
|
||||||
[](auto& spec, const auto& desc, AmdGpu::Buffer sharp) {
|
[&profile_](auto& spec, const auto& desc, AmdGpu::Buffer sharp) {
|
||||||
spec.num_class = AmdGpu::GetNumberClass(sharp.GetNumberFmt());
|
spec.num_components = desc.UsesStepRates()
|
||||||
|
? AmdGpu::NumComponents(sharp.GetDataFmt())
|
||||||
|
: 0;
|
||||||
|
spec.num_class = profile_.support_legacy_vertex_attributes
|
||||||
|
? AmdGpu::NumberClass{}
|
||||||
|
: AmdGpu::GetNumberClass(sharp.GetNumberFmt());
|
||||||
|
spec.dst_select = sharp.DstSelect();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
u32 binding{};
|
u32 binding{};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue