From 03156d0c9a7b3c3f922784845c832ea8299b3c50 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 18 Mar 2018 19:03:20 -0500 Subject: GPU: Implement macro 0xE1A BindTextureInfoBuffer in HLE. This macro simply sets the current CB_ADDRESS to the texture buffer address for the input shader stage. --- src/video_core/engines/maxwell_3d.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/video_core/engines/maxwell_3d.cpp') diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 3a4e88e4e..4fdea0fdc 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -12,6 +12,7 @@ namespace Engines { constexpr u32 MacroRegistersStart = 0xE00; const std::unordered_map Maxwell3D::method_handlers = { + {0xE1A, {"BindTextureInfoBuffer", 1, &Maxwell3D::BindTextureInfoBuffer}}, {0xE24, {"SetShader", 5, &Maxwell3D::SetShader}}, {0xE2A, {"BindStorageBuffer", 1, &Maxwell3D::BindStorageBuffer}}, }; @@ -160,6 +161,23 @@ void Maxwell3D::DrawArrays() { LOG_WARNING(HW_GPU, "Game requested a DrawArrays, ignoring"); } +void Maxwell3D::BindTextureInfoBuffer(const std::vector& parameters) { + /** + * Parameters description: + * [0] = Shader stage, usually 4 for FragmentShader + */ + + u32 stage = parameters[0]; + + // Perform the same operations as the real macro code. + GPUVAddr address = static_cast(regs.tex_info_buffers.address[stage]) << 8; + u32 size = regs.tex_info_buffers.size[stage]; + + regs.const_buffer.cb_size = size; + regs.const_buffer.cb_address_high = address >> 32; + regs.const_buffer.cb_address_low = address & 0xFFFFFFFF; +} + void Maxwell3D::SetShader(const std::vector& parameters) { /** * Parameters description: -- cgit v1.2.3