diff options
| author | degasus <wickmarkus@web.de> | 2015-01-11 15:03:41 +0100 |
|---|---|---|
| committer | degasus <wickmarkus@web.de> | 2015-01-11 22:23:35 +0100 |
| commit | d95e5e2b6fdbdcc7af201a4fc1fa1389bbdf0ad5 (patch) | |
| tree | 8c801a440f3a0673cb77e5c9aa9babfcf00c2b3b /Source/Core/VideoBackends | |
| parent | d640453274099f2cead75df3f137f4b06522d92c (diff) | |
TexCache: create a const Config struct
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/TextureCache.cpp | 21 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/D3D/TextureCache.h | 4 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/TextureCache.cpp | 28 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/TextureCache.h | 4 |
4 files changed, 40 insertions, 17 deletions
diff --git a/Source/Core/VideoBackends/D3D/TextureCache.cpp b/Source/Core/VideoBackends/D3D/TextureCache.cpp index 0b0eea50b1..23da4a1352 100644 --- a/Source/Core/VideoBackends/D3D/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/TextureCache.cpp @@ -100,7 +100,12 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, u const HRESULT hr = D3D::device->CreateTexture2D(&texdesc, nullptr, &pTexture); CHECK(SUCCEEDED(hr), "Create texture of the TextureCache"); - TCacheEntry* const entry = new TCacheEntry(new D3DTexture2D(pTexture, D3D11_BIND_SHADER_RESOURCE)); + TCacheEntryConfig config; + config.width = width; + config.height = height; + config.levels = tex_levels; + + TCacheEntry* const entry = new TCacheEntry(config, new D3DTexture2D(pTexture, D3D11_BIND_SHADER_RESOURCE)); entry->usage = usage; // TODO: better debug names @@ -122,7 +127,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo g_renderer->ResetAPIState(); // stretch picture with increased internal resolution - const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)virtual_width, (float)virtual_height); + const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)config.width, (float)config.height); D3D::context->RSSetViewports(1, &vp); // set transformation @@ -188,11 +193,17 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo } TextureCache::TCacheEntryBase* TextureCache::CreateRenderTargetTexture( - unsigned int scaled_tex_w, unsigned int scaled_tex_h) + unsigned int scaled_tex_w, unsigned int scaled_tex_h, unsigned int layers) { - return new TCacheEntry(D3DTexture2D::Create(scaled_tex_w, scaled_tex_h, + TCacheEntryConfig config; + config.width = scaled_tex_w; + config.height = scaled_tex_h; + config.layers = layers; + config.rendertarget = true; + + return new TCacheEntry(config, D3DTexture2D::Create(scaled_tex_w, scaled_tex_h, (D3D11_BIND_FLAG)((int)D3D11_BIND_RENDER_TARGET | (int)D3D11_BIND_SHADER_RESOURCE), - D3D11_USAGE_DEFAULT, DXGI_FORMAT_R8G8B8A8_UNORM, 1, FramebufferManager::GetEFBLayers())); + D3D11_USAGE_DEFAULT, DXGI_FORMAT_R8G8B8A8_UNORM, 1, layers)); } TextureCache::TextureCache() diff --git a/Source/Core/VideoBackends/D3D/TextureCache.h b/Source/Core/VideoBackends/D3D/TextureCache.h index 3845165ad5..08ce4008f9 100644 --- a/Source/Core/VideoBackends/D3D/TextureCache.h +++ b/Source/Core/VideoBackends/D3D/TextureCache.h @@ -23,7 +23,7 @@ private: D3D11_USAGE usage; - TCacheEntry(D3DTexture2D *_tex) : texture(_tex) {} + TCacheEntry(const TCacheEntryConfig& config, D3DTexture2D *_tex) : TCacheEntryBase(config), texture(_tex) {} ~TCacheEntry(); void Load(unsigned int width, unsigned int height, @@ -41,7 +41,7 @@ private: TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height, unsigned int tex_levels, PC_TexFormat pcfmt) override; - TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h) override; + TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h, unsigned int layers) override; u64 EncodeToRamFromTexture(u32 address, void* source_texture, u32 SourceW, u32 SourceH, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyfmt, int bScaleByHalf, const EFBRectangle& source) {return 0;}; void CompileShaders() override { } diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp index bb80b863e8..4bf70271d1 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp @@ -81,7 +81,8 @@ TextureCache::TCacheEntry::~TCacheEntry() } } -TextureCache::TCacheEntry::TCacheEntry() +TextureCache::TCacheEntry::TCacheEntry(const TCacheEntryConfig& _config) +: TCacheEntryBase(_config) { glGenTextures(1, &texture); @@ -105,7 +106,7 @@ void TextureCache::TCacheEntry::Bind(unsigned int stage) bool TextureCache::TCacheEntry::Save(const std::string& filename, unsigned int level) { - return SaveTexture(filename, GL_TEXTURE_2D_ARRAY, texture, virtual_width, virtual_height, level); + return SaveTexture(filename, GL_TEXTURE_2D_ARRAY, texture, config.width, config.height, level); } TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, unsigned int height, @@ -164,7 +165,12 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, u } } - TCacheEntry &entry = *new TCacheEntry; + TCacheEntryConfig config; + config.width = width; + config.height = height; + config.levels = tex_levels; + + TCacheEntry &entry = *new TCacheEntry(config); entry.gl_format = gl_format; entry.gl_iformat = gl_iformat; entry.gl_type = gl_type; @@ -205,9 +211,15 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, } TextureCache::TCacheEntryBase* TextureCache::CreateRenderTargetTexture( - unsigned int scaled_tex_w, unsigned int scaled_tex_h) + unsigned int scaled_tex_w, unsigned int scaled_tex_h, unsigned int layers) { - TCacheEntry *const entry = new TCacheEntry; + TCacheEntryConfig config; + config.width = scaled_tex_w; + config.height = scaled_tex_h; + config.layers = layers; + config.rendertarget = true; + TCacheEntry *const entry = new TCacheEntry(config); + glActiveTexture(GL_TEXTURE0+9); glBindTexture(GL_TEXTURE_2D_ARRAY, entry->texture); @@ -217,7 +229,7 @@ TextureCache::TCacheEntryBase* TextureCache::CreateRenderTargetTexture( gl_type = GL_UNSIGNED_BYTE; glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 0); - glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, gl_iformat, scaled_tex_w, scaled_tex_h, FramebufferManager::GetEFBLayers(), 0, gl_format, gl_type, nullptr); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, gl_iformat, scaled_tex_w, scaled_tex_h, layers, 0, gl_format, gl_type, nullptr); glBindTexture(GL_TEXTURE_2D_ARRAY, 0); glGenFramebuffers(1, &entry->framebuffer); @@ -250,7 +262,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glActiveTexture(GL_TEXTURE0+9); glBindTexture(GL_TEXTURE_2D_ARRAY, read_texture); - glViewport(0, 0, virtual_width, virtual_height); + glViewport(0, 0, config.width, config.height); GLuint uniform_location; if (srcFormat == PEControl::Z24) @@ -308,7 +320,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo { static int count = 0; SaveTexture(StringFromFormat("%sefb_frame_%i.png", File::GetUserPath(D_DUMPTEXTURES_IDX).c_str(), - count++), GL_TEXTURE_2D_ARRAY, texture, virtual_width, virtual_height, 0); + count++), GL_TEXTURE_2D_ARRAY, texture, config.width, config.height, 0); } g_renderer->RestoreAPIState(); diff --git a/Source/Core/VideoBackends/OGL/TextureCache.h b/Source/Core/VideoBackends/OGL/TextureCache.h index c2001d4bca..270e0d6f1a 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.h +++ b/Source/Core/VideoBackends/OGL/TextureCache.h @@ -36,7 +36,7 @@ private: //TexMode0 mode; // current filter and clamp modes that texture is set to //TexMode1 mode1; // current filter and clamp modes that texture is set to - TCacheEntry(); + TCacheEntry(const TCacheEntryConfig& config); ~TCacheEntry(); void Load(unsigned int width, unsigned int height, @@ -56,7 +56,7 @@ private: TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height, unsigned int tex_levels, PC_TexFormat pcfmt) override; - TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h) override; + TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h, unsigned int layers) override; void CompileShaders() override; void DeleteShaders() override; |
