mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-26 15:51:51 +01:00
Fix Depth RT layer stride
The layer stride provided by the depth register in Maxwell3D needs to be shifted by 2, this caused the stride to be 1/4th of what it needed to be resulting in OOB access.
This commit is contained in:
parent
df3b961d5d
commit
3407f5a6d1
@ -87,7 +87,7 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
||||
|
||||
/* Depth Render Target */
|
||||
void DepthRenderTargetState::EngineRegisters::DirtyBind(DirtyManager &manager, dirty::Handle handle) const {
|
||||
manager.Bind(handle, ztSize, ztOffset, ztFormat, ztBlockSize, ztArrayPitch, ztSelect, ztLayer, surfaceClip);
|
||||
manager.Bind(handle, ztSize, ztOffset, ztFormat, ztBlockSize, ztArrayPitchLsr2, ztSelect, ztLayer, surfaceClip);
|
||||
}
|
||||
|
||||
DepthRenderTargetState::DepthRenderTargetState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine) : engine{manager, dirtyHandle, engine} {}
|
||||
@ -121,7 +121,7 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
||||
.blockDepth = engine->ztBlockSize.BlockDepth(),
|
||||
};
|
||||
|
||||
guest.layerStride = (guest.baseArrayLayer > 1 || guest.layerCount > 1) ? engine->ztArrayPitch : 0;
|
||||
guest.layerStride = (guest.baseArrayLayer > 1 || guest.layerCount > 1) ? engine->ZtArrayPitch() : 0;
|
||||
|
||||
auto mappings{ctx.channelCtx.asCtx->gmmu.TranslateRange(engine->ztOffset, guest.GetSize())};
|
||||
guest.mappings.assign(mappings.begin(), mappings.end());
|
||||
|
@ -40,12 +40,16 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
||||
const soc::gm20b::engine::Address &ztOffset;
|
||||
const engine::ZtFormat &ztFormat;
|
||||
const engine::ZtBlockSize &ztBlockSize;
|
||||
const u32 &ztArrayPitch;
|
||||
const u32 &ztArrayPitchLsr2;
|
||||
const engine::ZtSelect &ztSelect;
|
||||
const engine::ZtLayer &ztLayer;
|
||||
const engine::SurfaceClip &surfaceClip;
|
||||
|
||||
void DirtyBind(DirtyManager &manager, dirty::Handle handle) const;
|
||||
|
||||
u32 ZtArrayPitch() const {
|
||||
return ztArrayPitchLsr2 << 2;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user