From 0fc301d654f8c04ff54c78070a7f78374b64709c Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Tue, 4 Aug 2020 13:19:42 +1000 Subject: [PATCH] GPU/HW: Use wrap texture address modes --- src/core/gpu_hw_d3d11.cpp | 9 +++++++-- src/core/gpu_hw_opengl.cpp | 6 ++++-- src/core/gpu_hw_vulkan.cpp | 4 ++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/gpu_hw_d3d11.cpp b/src/core/gpu_hw_d3d11.cpp index dbc2cef07..bacb5fd96 100644 --- a/src/core/gpu_hw_d3d11.cpp +++ b/src/core/gpu_hw_d3d11.cpp @@ -331,6 +331,8 @@ bool GPU_HW_D3D11::CreateStateObjects() CD3D11_SAMPLER_DESC sampler_desc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT()); sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + sampler_desc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; + sampler_desc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; hr = m_device->CreateSamplerState(&sampler_desc, m_point_sampler_state.ReleaseAndGetAddressOf()); if (FAILED(hr)) return false; @@ -553,7 +555,7 @@ void GPU_HW_D3D11::ClearDisplay() { GPU_HW::ClearDisplay(); - static constexpr std::array clear_color = { 0.0f, 0.0f, 0.0f, 1.0f }; + static constexpr std::array clear_color = {0.0f, 0.0f, 0.0f, 1.0f}; m_context->ClearRenderTargetView(m_display_texture.GetD3DRTV(), clear_color.data()); } @@ -778,4 +780,7 @@ void GPU_HW_D3D11::UpdateDepthBufferFromMaskBit() RestoreGraphicsAPIState(); } -std::unique_ptr GPU::CreateHardwareD3D11Renderer() { return std::make_unique(); } +std::unique_ptr GPU::CreateHardwareD3D11Renderer() +{ + return std::make_unique(); +} diff --git a/src/core/gpu_hw_opengl.cpp b/src/core/gpu_hw_opengl.cpp index b40324546..dd1e943a6 100644 --- a/src/core/gpu_hw_opengl.cpp +++ b/src/core/gpu_hw_opengl.cpp @@ -228,10 +228,12 @@ bool GPU_HW_OpenGL::CreateFramebuffer() const u32 texture_width = VRAM_WIDTH * m_resolution_scale; const u32 texture_height = VRAM_HEIGHT * m_resolution_scale; - if (!m_vram_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) || + if (!m_vram_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false, + true) || !m_vram_depth_texture.Create(texture_width, texture_height, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, nullptr, false) || - !m_vram_read_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) || + !m_vram_read_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false, + true) || !m_vram_read_texture.CreateFramebuffer() || !m_vram_encoding_texture.Create(VRAM_WIDTH, VRAM_HEIGHT, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) || !m_vram_encoding_texture.CreateFramebuffer() || diff --git a/src/core/gpu_hw_vulkan.cpp b/src/core/gpu_hw_vulkan.cpp index 208c423a9..c7c8f9149 100644 --- a/src/core/gpu_hw_vulkan.cpp +++ b/src/core/gpu_hw_vulkan.cpp @@ -332,11 +332,15 @@ bool GPU_HW_Vulkan::CreateSamplers() Vulkan::SamplerBuilder sbuilder; sbuilder.SetPointSampler(VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); + sbuilder.SetAddressMode(VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, + VK_SAMPLER_ADDRESS_MODE_REPEAT); m_point_sampler = sbuilder.Create(device); if (m_point_sampler == VK_NULL_HANDLE) return false; sbuilder.SetLinearSampler(false, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); + sbuilder.SetAddressMode(VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, + VK_SAMPLER_ADDRESS_MODE_REPEAT); m_linear_sampler = sbuilder.Create(device); if (m_linear_sampler == VK_NULL_HANDLE) return false;