-
-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Renderer: Add prepareForDraw callback * Add fmt submodule and port shader decompiler instructions to it * Add shader acceleration setting * Hook up vertex shaders to shader cache * Shader decompiler: Fix redundant compilations * Shader Decompiler: Fix vertex attribute upload * Shader compiler: Simplify generated code for reading and faster compilation * Further simplify shader decompiler output * Shader decompiler: More smallen-ing * Shader decompiler: Get PICA uniforms uploaded to the GPU * Shader decompiler: Readd clipping * Shader decompiler: Actually `break` on control flow instructions * Shader decompiler: More control flow handling * Shader decompiler: Fix desitnation mask * Shader Decomp: Remove pair member capture in lambda (unsupported on NDK) * Disgusting changes to handle the fact that hw shader shaders are 2x as big * Shader decompiler: Implement proper output semantic mapping * Moar instructions * Shader decompiler: Add FLR/SLT/SLTI/SGE/SGEI * Shader decompiler: Add register indexing * Shader decompiler: Optimize mova with both x and y masked * Shader decompiler: Add DPH/DPHI * Fix shader caching being broken * PICA decompiler: Cache VS uniforms * Simply vertex cache code * Simplify vertex cache code * Shader decompiler: Add loops * Shader decompiler: Implement safe multiplication * Shader decompiler: Implement LG2/EX2 * Shader decompiler: More control flow * Shader decompiler: Fix JMPU condition * Shader decompiler: Convert main function to void * PICA: Start implementing GPU vertex fetch * More hw VAO work * More hw VAO work * More GPU vertex fetch code * Add GL Stream Buffer from Duckstation * GL: Actually upload data to stream buffers * GPU: Cleanup immediate mode handling * Get first renders working with accelerated draws * Shader decompiler: Fix control flow analysis bugs * HW shaders: Accelerate indexed draws * Shader decompiler: Add support for compilation errors * GLSL decompiler: Fall back for LITP * Add Renderdoc scope classes * Fix control flow analysis bug * HW shaders: Fix attribute fetch * Rewriting hw vertex fetch * Stream buffer: Fix copy-paste mistake * HW shaders: Fix indexed rendering * HW shaders: Add padding attributes * HW shaders: Avoid redundant glVertexAttrib4f calls * HW shaders: Fix loops * HW shaders: Make generated shaders slightly smaller * Fix libretro build * HW shaders: Fix android * Remove redundant ubershader checks * Set accelerate shader default to true * Shader decompiler: Don't declare VS input attributes as an array * Change ubuntu-latest to Ubuntu 24.04 because Microsoft screwed up their CI again * fix merge conflict bug
- Loading branch information
1 parent
afaf18f
commit 49a94a1
Showing
34 changed files
with
1,870 additions
and
246 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#pragma once | ||
|
||
#include <array> | ||
|
||
#include "helpers.hpp" | ||
|
||
namespace PICA { | ||
struct DrawAcceleration { | ||
static constexpr u32 maxAttribCount = 16; | ||
static constexpr u32 maxLoaderCount = 12; | ||
|
||
struct AttributeInfo { | ||
u32 offset; | ||
u32 stride; | ||
|
||
u8 type; | ||
u8 componentCount; | ||
|
||
std::array<float, 4> fixedValue; // For fixed attributes | ||
}; | ||
|
||
struct Loader { | ||
// Data to upload for this loader | ||
u8* data; | ||
usize size; | ||
}; | ||
|
||
u8* indexBuffer; | ||
|
||
// Minimum and maximum index in the index buffer for a draw call | ||
u16 minimumIndex, maximumIndex; | ||
u32 totalAttribCount; | ||
u32 totalLoaderCount; | ||
u32 enabledAttributeMask; | ||
u32 fixedAttributes; | ||
u32 vertexDataSize; | ||
|
||
std::array<AttributeInfo, maxAttribCount> attributeInfo; | ||
std::array<Loader, maxLoaderCount> loaders; | ||
|
||
bool canBeAccelerated; | ||
bool indexed; | ||
bool useShortIndices; | ||
}; | ||
} // namespace PICA |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#pragma once | ||
#include <array> | ||
#include <cassert> | ||
#include <cstring> | ||
#include <type_traits> | ||
#include <unordered_map> | ||
|
||
#include "PICA/pica_hash.hpp" | ||
#include "PICA/regs.hpp" | ||
#include "PICA/shader.hpp" | ||
#include "bitfield.hpp" | ||
#include "helpers.hpp" | ||
|
||
namespace PICA { | ||
// Configuration struct used | ||
struct VertConfig { | ||
PICAHash::HashType shaderHash; | ||
PICAHash::HashType opdescHash; | ||
u32 entrypoint; | ||
|
||
// PICA registers for configuring shader output->fragment semantic mapping | ||
std::array<u32, 7> outmaps{}; | ||
u16 outputMask; | ||
u8 outputCount; | ||
bool usingUbershader; | ||
|
||
// Pad to 56 bytes so that the compiler won't insert unnecessary padding, which in turn will affect our unordered_map lookup | ||
// As the padding will get hashed and memcmp'd... | ||
u32 pad{}; | ||
|
||
bool operator==(const VertConfig& config) const { | ||
// Hash function and equality operator required by std::unordered_map | ||
return std::memcmp(this, &config, sizeof(VertConfig)) == 0; | ||
} | ||
|
||
VertConfig(PICAShader& shader, const std::array<u32, 0x300>& regs, bool usingUbershader) : usingUbershader(usingUbershader) { | ||
shaderHash = shader.getCodeHash(); | ||
opdescHash = shader.getOpdescHash(); | ||
entrypoint = shader.entrypoint; | ||
|
||
outputCount = regs[PICA::InternalRegs::ShaderOutputCount] & 7; | ||
outputMask = regs[PICA::InternalRegs::VertexShaderOutputMask]; | ||
for (int i = 0; i < outputCount; i++) { | ||
// Mask out unused bits | ||
outmaps[i] = regs[PICA::InternalRegs::ShaderOutmap0 + i] & 0x1F1F1F1F; | ||
} | ||
} | ||
}; | ||
} // namespace PICA | ||
|
||
static_assert(sizeof(PICA::VertConfig) == 56); | ||
|
||
// Override std::hash for our vertex config class | ||
template <> | ||
struct std::hash<PICA::VertConfig> { | ||
std::size_t operator()(const PICA::VertConfig& config) const noexcept { return PICAHash::computeHash((const char*)&config, sizeof(config)); } | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.