diff options
| author | Mai <mathew1800@gmail.com> | 2022-09-29 09:05:51 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-29 09:05:51 -0400 |
| commit | 0c19a1d87cbd51d62833d31d3413c61b3bc8ccf4 (patch) | |
| tree | bd5a76acfeec8d7e70345b8720c5e164ef8e4da7 /Source/Core/VideoBackends | |
| parent | 3fab5b2338f1b7bc1b4ddc0e283c2650a6e2e825 (diff) | |
| parent | 3d0cd8b076a4a8ff4f6741769781305cd571b5b7 (diff) | |
Merge pull request #11100 from Pokechu22/software-settings-merge
Use the same settings for the software renderer as other backends
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/Software/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/DebugUtil.cpp | 219 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/DebugUtil.h | 25 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWOGLWindow.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWTexture.cpp | 71 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWTexture.h | 6 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWVertexLoader.cpp | 7 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWmain.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/Tev.cpp | 45 |
9 files changed, 50 insertions, 330 deletions
diff --git a/Source/Core/VideoBackends/Software/CMakeLists.txt b/Source/Core/VideoBackends/Software/CMakeLists.txt index 752fac48cc..f71421cb57 100644 --- a/Source/Core/VideoBackends/Software/CMakeLists.txt +++ b/Source/Core/VideoBackends/Software/CMakeLists.txt @@ -2,8 +2,6 @@ add_library(videosoftware Clipper.cpp Clipper.h CopyRegion.h - DebugUtil.cpp - DebugUtil.h EfbCopy.cpp EfbCopy.h EfbInterface.cpp diff --git a/Source/Core/VideoBackends/Software/DebugUtil.cpp b/Source/Core/VideoBackends/Software/DebugUtil.cpp deleted file mode 100644 index c580461172..0000000000 --- a/Source/Core/VideoBackends/Software/DebugUtil.cpp +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2009 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "VideoBackends/Software/DebugUtil.h" - -#include <cstring> -#include <memory> - -#include "Common/CommonTypes.h" -#include "Common/FileUtil.h" -#include "Common/Image.h" -#include "Common/StringUtil.h" -#include "Common/Swap.h" - -#include "VideoBackends/Software/EfbInterface.h" -#include "VideoBackends/Software/TextureSampler.h" - -#include "VideoCommon/BPMemory.h" -#include "VideoCommon/Statistics.h" -#include "VideoCommon/VideoCommon.h" -#include "VideoCommon/VideoConfig.h" - -namespace DebugUtil -{ -static const int NUM_OBJECT_BUFFERS = 40; - -static u32* ObjectBuffer[NUM_OBJECT_BUFFERS]; -static u32 TempBuffer[NUM_OBJECT_BUFFERS]; - -static bool DrawnToBuffer[NUM_OBJECT_BUFFERS]; -static const char* ObjectBufferName[NUM_OBJECT_BUFFERS]; -static int BufferBase[NUM_OBJECT_BUFFERS]; - -void Init() -{ - for (int i = 0; i < NUM_OBJECT_BUFFERS; i++) - { - ObjectBuffer[i] = new u32[EFB_WIDTH * EFB_HEIGHT](); - DrawnToBuffer[i] = false; - ObjectBufferName[i] = nullptr; - BufferBase[i] = 0; - } -} - -void Shutdown() -{ - for (auto& slot : ObjectBuffer) - { - delete[] slot; - } -} - -static void SaveTexture(const std::string& filename, u32 texmap, s32 mip) -{ - u32 width = bpmem.tex.GetUnit(texmap).texImage0.width + 1; - u32 height = bpmem.tex.GetUnit(texmap).texImage0.height + 1; - - auto data = std::make_unique<u8[]>(width * height * 4); - - GetTextureRGBA(data.get(), texmap, mip, width, height); - Common::SavePNG(filename, data.get(), Common::ImageByteFormat::RGBA, width, height, width * 4); -} - -void GetTextureRGBA(u8* dst, u32 texmap, s32 mip, u32 width, u32 height) -{ - for (u32 y = 0; y < height; y++) - { - for (u32 x = 0; x < width; x++) - { - TextureSampler::SampleMip(x << 7, y << 7, mip, false, texmap, dst); - dst += 4; - } - } -} - -static s32 GetMaxTextureLod(u32 texmap) -{ - u8 maxLod = bpmem.tex.GetUnit(texmap).texMode1.max_lod; - u8 mip = maxLod >> 4; - u8 fract = maxLod & 0xf; - - if (fract) - ++mip; - - return (s32)mip; -} - -void DumpActiveTextures() -{ - for (unsigned int stageNum = 0; stageNum < bpmem.genMode.numindstages; stageNum++) - { - u32 texmap = bpmem.tevindref.getTexMap(stageNum); - - s32 maxLod = GetMaxTextureLod(texmap); - for (s32 mip = 0; mip <= maxLod; ++mip) - { - SaveTexture(StringFromFormat("%star%i_ind%i_map%i_mip%i.png", - File::GetUserPath(D_DUMPTEXTURES_IDX).c_str(), - g_stats.this_frame.num_drawn_objects, stageNum, texmap, mip), - texmap, mip); - } - } - - for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) - { - int stageNum2 = stageNum >> 1; - int stageOdd = stageNum & 1; - TwoTevStageOrders& order = bpmem.tevorders[stageNum2]; - - int texmap = order.getTexMap(stageOdd); - - s32 maxLod = GetMaxTextureLod(texmap); - for (s32 mip = 0; mip <= maxLod; ++mip) - { - SaveTexture(StringFromFormat("%star%i_stage%i_map%i_mip%i.png", - File::GetUserPath(D_DUMPTEXTURES_IDX).c_str(), - g_stats.this_frame.num_drawn_objects, stageNum, texmap, mip), - texmap, mip); - } - } -} - -static void DumpEfb(const std::string& filename) -{ - auto data = std::make_unique<u8[]>(EFB_WIDTH * EFB_HEIGHT * 4); - u8* writePtr = data.get(); - - for (u32 y = 0; y < EFB_HEIGHT; y++) - { - for (u32 x = 0; x < EFB_WIDTH; x++) - { - // ABGR to RGBA - const u32 sample = Common::swap32(EfbInterface::GetColor(x, y)); - - std::memcpy(writePtr, &sample, sizeof(u32)); - writePtr += sizeof(u32); - } - } - - Common::SavePNG(filename, data.get(), Common::ImageByteFormat::RGBA, EFB_WIDTH, EFB_HEIGHT, - EFB_WIDTH * 4); -} - -void DrawObjectBuffer(s16 x, s16 y, const u8* color, int bufferBase, int subBuffer, - const char* name) -{ - int buffer = bufferBase + subBuffer; - - u32 offset = (x + y * EFB_WIDTH) * 4; - u8* dst = (u8*)&ObjectBuffer[buffer][offset]; - *(dst++) = color[2]; - *(dst++) = color[1]; - *(dst++) = color[0]; - *(dst++) = color[3]; - - DrawnToBuffer[buffer] = true; - ObjectBufferName[buffer] = name; - BufferBase[buffer] = bufferBase; -} - -void DrawTempBuffer(const u8* color, int buffer) -{ - u8* dst = (u8*)&TempBuffer[buffer]; - *(dst++) = color[2]; - *(dst++) = color[1]; - *(dst++) = color[0]; - *(dst++) = color[3]; -} - -void CopyTempBuffer(s16 x, s16 y, int bufferBase, int subBuffer, const char* name) -{ - int buffer = bufferBase + subBuffer; - - u32 offset = (x + y * EFB_WIDTH); - ObjectBuffer[buffer][offset] = TempBuffer[buffer]; - - DrawnToBuffer[buffer] = true; - ObjectBufferName[buffer] = name; - BufferBase[buffer] = bufferBase; -} - -void OnObjectBegin() -{ - if (g_ActiveConfig.bDumpTextures && - g_stats.this_frame.num_drawn_objects >= g_ActiveConfig.drawStart && - g_stats.this_frame.num_drawn_objects < g_ActiveConfig.drawEnd) - { - DumpActiveTextures(); - } -} - -void OnObjectEnd() -{ - if (g_ActiveConfig.bDumpObjects && - g_stats.this_frame.num_drawn_objects >= g_ActiveConfig.drawStart && - g_stats.this_frame.num_drawn_objects < g_ActiveConfig.drawEnd) - { - DumpEfb(StringFromFormat("%sobject%i.png", File::GetUserPath(D_DUMPOBJECTS_IDX).c_str(), - g_stats.this_frame.num_drawn_objects)); - } - - for (int i = 0; i < NUM_OBJECT_BUFFERS; i++) - { - if (DrawnToBuffer[i]) - { - DrawnToBuffer[i] = false; - std::string filename = StringFromFormat( - "%sobject%i_%s(%i).png", File::GetUserPath(D_DUMPOBJECTS_IDX).c_str(), - g_stats.this_frame.num_drawn_objects, ObjectBufferName[i], i - BufferBase[i]); - - Common::SavePNG(filename, reinterpret_cast<u8*>(ObjectBuffer[i]), - Common::ImageByteFormat::RGBA, EFB_WIDTH, EFB_HEIGHT, EFB_WIDTH * 4); - memset(ObjectBuffer[i], 0, EFB_WIDTH * EFB_HEIGHT * sizeof(u32)); - } - } - - g_stats.this_frame.num_drawn_objects++; -} -} // namespace DebugUtil diff --git a/Source/Core/VideoBackends/Software/DebugUtil.h b/Source/Core/VideoBackends/Software/DebugUtil.h deleted file mode 100644 index 20209577a9..0000000000 --- a/Source/Core/VideoBackends/Software/DebugUtil.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include "Common/CommonTypes.h" - -namespace DebugUtil -{ -void Init(); -void Shutdown(); - -void GetTextureRGBA(u8* dst, u32 texmap, s32 mip, u32 width, u32 height); - -void DumpActiveTextures(); - -void OnObjectBegin(); -void OnObjectEnd(); - -void DrawObjectBuffer(s16 x, s16 y, const u8* color, int bufferBase, int subBuffer, - const char* name); - -void DrawTempBuffer(const u8* color, int buffer); -void CopyTempBuffer(s16 x, s16 y, int bufferBase, int subBuffer, const char* name); -} // namespace DebugUtil diff --git a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp index 387375cc85..a002e3e519 100644 --- a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp +++ b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp @@ -105,7 +105,7 @@ void SWOGLWindow::ShowImage(const AbstractTexture* image, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(sw_image->GetConfig().width), static_cast<GLsizei>(sw_image->GetConfig().height), 0, GL_RGBA, GL_UNSIGNED_BYTE, - sw_image->GetData()); + sw_image->GetData(0, 0)); glUseProgram(m_image_program); diff --git a/Source/Core/VideoBackends/Software/SWTexture.cpp b/Source/Core/VideoBackends/Software/SWTexture.cpp index 082c26371e..6805ff0eb8 100644 --- a/Source/Core/VideoBackends/Software/SWTexture.cpp +++ b/Source/Core/VideoBackends/Software/SWTexture.cpp @@ -25,17 +25,17 @@ struct Pixel #pragma pack(pop) void CopyTextureData(const TextureConfig& src_config, const u8* src_ptr, u32 src_x, u32 src_y, - u32 width, u32 height, const TextureConfig& dst_config, u8* dst_ptr, u32 dst_x, - u32 dst_y) + u32 width, u32 height, u32 src_level, const TextureConfig& dst_config, + u8* dst_ptr, u32 dst_x, u32 dst_y, u32 dst_level) { - size_t texel_size = AbstractTexture::GetTexelSizeForFormat(src_config.format); - size_t src_stride = src_config.GetStride(); - size_t src_offset = + const size_t texel_size = AbstractTexture::GetTexelSizeForFormat(src_config.format); + const size_t src_stride = src_config.GetMipStride(src_level); + const size_t src_offset = static_cast<size_t>(src_y) * src_stride + static_cast<size_t>(src_x) * texel_size; - size_t dst_stride = dst_config.GetStride(); - size_t dst_offset = + const size_t dst_stride = dst_config.GetMipStride(dst_level); + const size_t dst_offset = static_cast<size_t>(dst_y) * dst_stride + static_cast<size_t>(dst_x) * texel_size; - size_t copy_len = static_cast<size_t>(width) * texel_size; + const size_t copy_len = static_cast<size_t>(width) * texel_size; src_ptr += src_offset; dst_ptr += dst_offset; @@ -56,15 +56,24 @@ void SWRenderer::ScaleTexture(AbstractFramebuffer* dst_framebuffer, const SWTexture* software_source_texture = static_cast<const SWTexture*>(src_texture); SWTexture* software_dest_texture = static_cast<SWTexture*>(dst_framebuffer->GetColorAttachment()); - CopyRegion(reinterpret_cast<const Pixel*>(software_source_texture->GetData()), src_rect, + CopyRegion(reinterpret_cast<const Pixel*>(software_source_texture->GetData(0, 0)), src_rect, src_texture->GetWidth(), src_texture->GetHeight(), - reinterpret_cast<Pixel*>(software_dest_texture->GetData()), dst_rect, + reinterpret_cast<Pixel*>(software_dest_texture->GetData(0, 0)), dst_rect, dst_framebuffer->GetWidth(), dst_framebuffer->GetHeight()); } SWTexture::SWTexture(const TextureConfig& tex_config) : AbstractTexture(tex_config) { - m_data.resize(tex_config.width * tex_config.height * 4); + m_data.resize(tex_config.layers); + for (u32 layer = 0; layer < tex_config.layers; layer++) + { + m_data[layer].resize(tex_config.levels); + for (u32 level = 0; level < tex_config.levels; level++) + { + m_data[layer][level].resize(std::max(tex_config.width >> level, 1u) * + std::max(tex_config.height >> level, 1u) * sizeof(Pixel)); + } + } } void SWTexture::CopyRectangleFromTexture(const AbstractTexture* src, @@ -72,10 +81,10 @@ void SWTexture::CopyRectangleFromTexture(const AbstractTexture* src, u32 src_level, const MathUtil::Rectangle<int>& dst_rect, u32 dst_layer, u32 dst_level) { - ASSERT(src_level == 0 && src_layer == 0 && dst_layer == 0 && dst_level == 0); - CopyTextureData(src->GetConfig(), static_cast<const SWTexture*>(src)->m_data.data(), - src_rect.left, src_rect.top, src_rect.GetWidth(), src_rect.GetHeight(), m_config, - m_data.data(), dst_rect.left, dst_rect.top); + CopyTextureData(src->GetConfig(), + static_cast<const SWTexture*>(src)->GetData(src_layer, src_level), src_rect.left, + src_rect.top, src_rect.GetWidth(), src_rect.GetHeight(), src_level, m_config, + GetData(dst_layer, dst_level), dst_rect.left, dst_rect.top, dst_level); } void SWTexture::ResolveFromTexture(const AbstractTexture* src, const MathUtil::Rectangle<int>& rect, u32 layer, u32 level) @@ -85,17 +94,25 @@ void SWTexture::ResolveFromTexture(const AbstractTexture* src, const MathUtil::R void SWTexture::Load(u32 level, u32 width, u32 height, u32 row_length, const u8* buffer, size_t buffer_size) { - m_data.assign(buffer, buffer + buffer_size); + for (u32 layer = 0; layer < m_config.layers; layer++) + { + u8* data = GetData(layer, level); + for (u32 y = 0; y < height; y++) + { + memcpy(&data[width * y * sizeof(Pixel)], &buffer[y * row_length * sizeof(Pixel)], + width * sizeof(Pixel)); + } + } } -const u8* SWTexture::GetData() const +const u8* SWTexture::GetData(u32 layer, u32 level) const { - return m_data.data(); + return m_data[layer][level].data(); } -u8* SWTexture::GetData() +u8* SWTexture::GetData(u32 layer, u32 level) { - return m_data.data(); + return m_data[layer][level].data(); } SWStagingTexture::SWStagingTexture(StagingTextureType type, const TextureConfig& config) @@ -112,10 +129,10 @@ void SWStagingTexture::CopyFromTexture(const AbstractTexture* src, const MathUtil::Rectangle<int>& src_rect, u32 src_layer, u32 src_level, const MathUtil::Rectangle<int>& dst_rect) { - ASSERT(src_level == 0 && src_layer == 0); - CopyTextureData(src->GetConfig(), static_cast<const SWTexture*>(src)->GetData(), src_rect.left, - src_rect.top, src_rect.GetWidth(), src_rect.GetHeight(), m_config, m_data.data(), - dst_rect.left, dst_rect.top); + CopyTextureData(src->GetConfig(), + static_cast<const SWTexture*>(src)->GetData(src_layer, src_level), src_rect.left, + src_rect.top, src_rect.GetWidth(), src_rect.GetHeight(), src_level, m_config, + m_data.data(), dst_rect.left, dst_rect.top, 0); m_needs_flush = true; } @@ -123,10 +140,10 @@ void SWStagingTexture::CopyToTexture(const MathUtil::Rectangle<int>& src_rect, A const MathUtil::Rectangle<int>& dst_rect, u32 dst_layer, u32 dst_level) { - ASSERT(dst_level == 0 && dst_layer == 0); CopyTextureData(m_config, m_data.data(), src_rect.left, src_rect.top, src_rect.GetWidth(), - src_rect.GetHeight(), dst->GetConfig(), static_cast<SWTexture*>(dst)->GetData(), - dst_rect.left, dst_rect.top); + src_rect.GetHeight(), 0, dst->GetConfig(), + static_cast<SWTexture*>(dst)->GetData(dst_layer, dst_level), dst_rect.left, + dst_rect.top, dst_level); m_needs_flush = true; } diff --git a/Source/Core/VideoBackends/Software/SWTexture.h b/Source/Core/VideoBackends/Software/SWTexture.h index bc3fcfbbf7..e3b90eb978 100644 --- a/Source/Core/VideoBackends/Software/SWTexture.h +++ b/Source/Core/VideoBackends/Software/SWTexture.h @@ -29,11 +29,11 @@ public: void Load(u32 level, u32 width, u32 height, u32 row_length, const u8* buffer, size_t buffer_size) override; - const u8* GetData() const; - u8* GetData(); + const u8* GetData(u32 layer, u32 level) const; + u8* GetData(u32 layer, u32 level); private: - std::vector<u8> m_data; + std::vector<std::vector<std::vector<u8>>> m_data; }; class SWStagingTexture final : public AbstractStagingTexture diff --git a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp index 00357b12d7..a38fd163ec 100644 --- a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp +++ b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp @@ -10,7 +10,6 @@ #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" -#include "VideoBackends/Software/DebugUtil.h" #include "VideoBackends/Software/NativeVertexFormat.h" #include "VideoBackends/Software/Rasterizer.h" #include "VideoBackends/Software/SWRenderer.h" @@ -42,8 +41,6 @@ DataReader SWVertexLoader::PrepareForAdditionalData(OpcodeDecoder::Primitive pri void SWVertexLoader::DrawCurrentBatch(u32 base_index, u32 num_indices, u32 base_vertex) { - DebugUtil::OnObjectBegin(); - using OpcodeDecoder::Primitive; Primitive primitive_type = Primitive::GX_DRAW_QUADS; switch (m_current_primitive_type) @@ -90,10 +87,10 @@ void SWVertexLoader::DrawCurrentBatch(u32 base_index, u32 num_indices, u32 base_ // assemble and rasterize the primitive m_setup_unit.SetupVertex(); - INCSTAT(g_stats.this_frame.num_vertices_loaded) + INCSTAT(g_stats.this_frame.num_vertices_loaded); } - DebugUtil::OnObjectEnd(); + INCSTAT(g_stats.this_frame.num_drawn_objects); } void SWVertexLoader::SetFormat() diff --git a/Source/Core/VideoBackends/Software/SWmain.cpp b/Source/Core/VideoBackends/Software/SWmain.cpp index 5076106089..b6d2005c26 100644 --- a/Source/Core/VideoBackends/Software/SWmain.cpp +++ b/Source/Core/VideoBackends/Software/SWmain.cpp @@ -14,7 +14,6 @@ #include "Common/MsgHandler.h" #include "VideoBackends/Software/Clipper.h" -#include "VideoBackends/Software/DebugUtil.h" #include "VideoBackends/Software/EfbInterface.h" #include "VideoBackends/Software/Rasterizer.h" #include "VideoBackends/Software/SWOGLWindow.h" @@ -105,7 +104,6 @@ bool VideoSoftware::Initialize(const WindowSystemInfo& wsi) Clipper::Init(); Rasterizer::Init(); - DebugUtil::Init(); g_renderer = std::make_unique<SWRenderer>(std::move(window)); g_vertex_manager = std::make_unique<SWVertexLoader>(); @@ -135,7 +133,6 @@ void VideoSoftware::Shutdown() if (g_renderer) g_renderer->Shutdown(); - DebugUtil::Shutdown(); g_texture_cache.reset(); g_perf_query.reset(); g_framebuffer_manager.reset(); diff --git a/Source/Core/VideoBackends/Software/Tev.cpp b/Source/Core/VideoBackends/Software/Tev.cpp index e788d55d92..f2f903ccfc 100644 --- a/Source/Core/VideoBackends/Software/Tev.cpp +++ b/Source/Core/VideoBackends/Software/Tev.cpp @@ -9,7 +9,6 @@ #include "Common/ChunkFile.h" #include "Common/CommonTypes.h" -#include "VideoBackends/Software/DebugUtil.h" #include "VideoBackends/Software/EfbInterface.h" #include "VideoBackends/Software/SWBoundingBox.h" #include "VideoBackends/Software/TextureSampler.h" @@ -428,16 +427,6 @@ void Tev::Draw() TextureSampler::Sample(Uv[texcoordSel].s >> scaleS, Uv[texcoordSel].t >> scaleT, IndirectLod[stageNum], IndirectLinear[stageNum], texmap, IndirectTex[stageNum]); - -#if ALLOW_TEV_DUMPS - if (g_ActiveConfig.bDumpTevStages) - { - u8 stage[4] = {IndirectTex[stageNum][TextureSampler::ALP_SMP], - IndirectTex[stageNum][TextureSampler::BLU_SMP], - IndirectTex[stageNum][TextureSampler::GRN_SMP], 255}; - DebugUtil::DrawTempBuffer(stage, INDIRECT + stageNum); - } -#endif } for (unsigned int stageNum = 0; stageNum <= bpmem.genMode.numtevstages; stageNum++) @@ -478,11 +467,6 @@ void Tev::Draw() std::memset(texel, 0, 4); } -#if ALLOW_TEV_DUMPS - if (g_ActiveConfig.bDumpTevTextureFetches) - DebugUtil::DrawTempBuffer(texel, DIRECT_TFETCH + stageNum); -#endif - const auto& swap = bpmem.tevksel.GetSwapTable(ac.tswap); TexColor.r = texel[u32(swap[ColorChannel::Red])]; TexColor.g = texel[u32(swap[ColorChannel::Green])]; @@ -547,15 +531,6 @@ void Tev::Draw() Reg[ac.dest].a = Clamp255(Reg[ac.dest].a); else Reg[ac.dest].a = Clamp1024(Reg[ac.dest].a); - -#if ALLOW_TEV_DUMPS - if (g_ActiveConfig.bDumpTevStages) - { - u8 stage[4] = {(u8)Reg[cc.dest].r, (u8)Reg[cc.dest].g, (u8)Reg[cc.dest].b, - (u8)Reg[ac.dest].a}; - DebugUtil::DrawTempBuffer(stage, DIRECT + stageNum); - } -#endif } // convert to 8 bits per component @@ -711,26 +686,6 @@ void Tev::Draw() BBoxManager::Update(static_cast<u16>(Position[0] & ~1), static_cast<u16>(Position[0] | 1), static_cast<u16>(Position[1] & ~1), static_cast<u16>(Position[1] | 1)); -#if ALLOW_TEV_DUMPS - if (g_ActiveConfig.bDumpTevStages) - { - for (u32 i = 0; i < bpmem.genMode.numindstages; ++i) - DebugUtil::CopyTempBuffer(Position[0], Position[1], INDIRECT, i, "Indirect"); - for (u32 i = 0; i <= bpmem.genMode.numtevstages; ++i) - DebugUtil::CopyTempBuffer(Position[0], Position[1], DIRECT, i, "Stage"); - } - - if (g_ActiveConfig.bDumpTevTextureFetches) - { - for (u32 i = 0; i <= bpmem.genMode.numtevstages; ++i) - { - TwoTevStageOrders& order = bpmem.tevorders[i >> 1]; - if (order.getEnable(i & 1)) - DebugUtil::CopyTempBuffer(Position[0], Position[1], DIRECT_TFETCH, i, "TFetch"); - } - } -#endif - INCSTAT(g_stats.this_frame.tev_pixels_out); EfbInterface::IncPerfCounterQuadCount(PQ_BLEND_INPUT); |
