shader: Add physical attributes commentaries
This commit is contained in:
parent
c6f9e651b2
commit
fe700e1856
|
@ -895,6 +895,8 @@ private:
|
||||||
target = GetRegister(gpr->GetIndex());
|
target = GetRegister(gpr->GetIndex());
|
||||||
|
|
||||||
} else if (const auto abuf = std::get_if<AbufNode>(dest)) {
|
} else if (const auto abuf = std::get_if<AbufNode>(dest)) {
|
||||||
|
UNIMPLEMENTED_IF(abuf->IsPhysicalBuffer());
|
||||||
|
|
||||||
target = [&]() -> std::string {
|
target = [&]() -> std::string {
|
||||||
switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) {
|
switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) {
|
||||||
case Attribute::Index::Position:
|
case Attribute::Index::Position:
|
||||||
|
|
|
@ -253,7 +253,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
|
||||||
SetRegister(bb, instr.gpr0, fake_address);
|
SetRegister(bb, instr.gpr0, fake_address);
|
||||||
|
|
||||||
// Signal the shader IR to declare all possible attributes and varyings
|
// Signal the shader IR to declare all possible attributes and varyings
|
||||||
use_physical_attributes = true;
|
uses_physical_attributes = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -95,7 +95,7 @@ Node ShaderIR::GetInputAttribute(Attribute::Index index, u64 element, Node buffe
|
||||||
}
|
}
|
||||||
|
|
||||||
Node ShaderIR::GetPhysicalInputAttribute(Tegra::Shader::Register physical_address, Node buffer) {
|
Node ShaderIR::GetPhysicalInputAttribute(Tegra::Shader::Register physical_address, Node buffer) {
|
||||||
use_physical_attributes = true;
|
uses_physical_attributes = true;
|
||||||
return StoreNode(AbufNode(GetRegister(physical_address), buffer));
|
return StoreNode(AbufNode(GetRegister(physical_address), buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -465,10 +465,12 @@ private:
|
||||||
/// Attribute buffer memory (known as attributes or varyings in GLSL terms)
|
/// Attribute buffer memory (known as attributes or varyings in GLSL terms)
|
||||||
class AbufNode final {
|
class AbufNode final {
|
||||||
public:
|
public:
|
||||||
|
// Initialize for standard attributes (index is explicit).
|
||||||
explicit constexpr AbufNode(Tegra::Shader::Attribute::Index index, u32 element,
|
explicit constexpr AbufNode(Tegra::Shader::Attribute::Index index, u32 element,
|
||||||
Node buffer = {})
|
Node buffer = {})
|
||||||
: buffer{buffer}, index{index}, element{element} {}
|
: buffer{buffer}, index{index}, element{element} {}
|
||||||
|
|
||||||
|
// Initialize for physical attributes (index is a variable value).
|
||||||
explicit constexpr AbufNode(Node physical_address, Node buffer = {})
|
explicit constexpr AbufNode(Node physical_address, Node buffer = {})
|
||||||
: physical_address{physical_address}, buffer{buffer} {}
|
: physical_address{physical_address}, buffer{buffer} {}
|
||||||
|
|
||||||
|
@ -618,7 +620,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HasPhysicalAttributes() const {
|
bool HasPhysicalAttributes() const {
|
||||||
return use_physical_attributes;
|
return uses_physical_attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Tegra::Shader::Header& GetHeader() const {
|
const Tegra::Shader::Header& GetHeader() const {
|
||||||
|
@ -885,7 +887,7 @@ private:
|
||||||
std::set<Sampler> used_samplers;
|
std::set<Sampler> used_samplers;
|
||||||
std::array<bool, Tegra::Engines::Maxwell3D::Regs::NumClipDistances> used_clip_distances{};
|
std::array<bool, Tegra::Engines::Maxwell3D::Regs::NumClipDistances> used_clip_distances{};
|
||||||
std::map<GlobalMemoryBase, GlobalMemoryUsage> used_global_memory;
|
std::map<GlobalMemoryBase, GlobalMemoryUsage> used_global_memory;
|
||||||
bool use_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
|
bool uses_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
|
||||||
|
|
||||||
Tegra::Shader::Header header;
|
Tegra::Shader::Header header;
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue