summaryrefslogtreecommitdiffstats
path: root/src/video_core/engines
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/engines')
-rw-r--r--src/video_core/engines/const_buffer_engine_interface.h10
-rw-r--r--src/video_core/engines/kepler_compute.cpp1
-rw-r--r--src/video_core/engines/kepler_compute.h10
-rw-r--r--src/video_core/engines/maxwell_3d.cpp41
-rw-r--r--src/video_core/engines/maxwell_3d.h20
-rw-r--r--src/video_core/engines/shader_type.h21
6 files changed, 54 insertions, 49 deletions
diff --git a/src/video_core/engines/const_buffer_engine_interface.h b/src/video_core/engines/const_buffer_engine_interface.h
index ac27b6cbe..44b8b8d22 100644
--- a/src/video_core/engines/const_buffer_engine_interface.h
+++ b/src/video_core/engines/const_buffer_engine_interface.h
@@ -8,19 +8,11 @@
#include "common/bit_field.h"
#include "common/common_types.h"
#include "video_core/engines/shader_bytecode.h"
+#include "video_core/engines/shader_type.h"
#include "video_core/textures/texture.h"
namespace Tegra::Engines {
-enum class ShaderType : u32 {
- Vertex = 0,
- TesselationControl = 1,
- TesselationEval = 2,
- Geometry = 3,
- Fragment = 4,
- Compute = 5,
-};
-
struct SamplerDescriptor {
union {
BitField<0, 20, Tegra::Shader::TextureType> texture_type;
diff --git a/src/video_core/engines/kepler_compute.cpp b/src/video_core/engines/kepler_compute.cpp
index 3a39aeabe..110406f2f 100644
--- a/src/video_core/engines/kepler_compute.cpp
+++ b/src/video_core/engines/kepler_compute.cpp
@@ -8,6 +8,7 @@
#include "core/core.h"
#include "video_core/engines/kepler_compute.h"
#include "video_core/engines/maxwell_3d.h"
+#include "video_core/engines/shader_type.h"
#include "video_core/memory_manager.h"
#include "video_core/rasterizer_interface.h"
#include "video_core/renderer_base.h"
diff --git a/src/video_core/engines/kepler_compute.h b/src/video_core/engines/kepler_compute.h
index 5259d92bd..4ef3e0613 100644
--- a/src/video_core/engines/kepler_compute.h
+++ b/src/video_core/engines/kepler_compute.h
@@ -12,6 +12,7 @@
#include "common/common_types.h"
#include "video_core/engines/const_buffer_engine_interface.h"
#include "video_core/engines/engine_upload.h"
+#include "video_core/engines/shader_type.h"
#include "video_core/gpu.h"
#include "video_core/textures/texture.h"
@@ -140,7 +141,7 @@ public:
INSERT_PADDING_WORDS(0x3);
- BitField<0, 16, u32> shared_alloc;
+ BitField<0, 18, u32> shared_alloc;
BitField<16, 16, u32> block_dim_x;
union {
@@ -178,7 +179,12 @@ public:
BitField<24, 5, u32> gpr_alloc;
};
- INSERT_PADDING_WORDS(0x11);
+ union {
+ BitField<0, 20, u32> local_crs_alloc;
+ BitField<24, 5, u32> sass_version;
+ };
+
+ INSERT_PADDING_WORDS(0x10);
} launch_description{};
struct {
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 42ce49a4d..15a7a9d6a 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -9,6 +9,7 @@
#include "core/core_timing.h"
#include "video_core/debug_utils/debug_utils.h"
#include "video_core/engines/maxwell_3d.h"
+#include "video_core/engines/shader_type.h"
#include "video_core/memory_manager.h"
#include "video_core/rasterizer_interface.h"
#include "video_core/textures/texture.h"
@@ -368,24 +369,24 @@ void Maxwell3D::CallMethod(const GPU::MethodCall& method_call) {
StartCBData(method);
break;
}
- case MAXWELL3D_REG_INDEX(cb_bind[0].raw_config): {
- ProcessCBBind(Regs::ShaderStage::Vertex);
+ case MAXWELL3D_REG_INDEX(cb_bind[0]): {
+ ProcessCBBind(0);
break;
}
- case MAXWELL3D_REG_INDEX(cb_bind[1].raw_config): {
- ProcessCBBind(Regs::ShaderStage::TesselationControl);
+ case MAXWELL3D_REG_INDEX(cb_bind[1]): {
+ ProcessCBBind(1);
break;
}
- case MAXWELL3D_REG_INDEX(cb_bind[2].raw_config): {
- ProcessCBBind(Regs::ShaderStage::TesselationEval);
+ case MAXWELL3D_REG_INDEX(cb_bind[2]): {
+ ProcessCBBind(2);
break;
}
- case MAXWELL3D_REG_INDEX(cb_bind[3].raw_config): {
- ProcessCBBind(Regs::ShaderStage::Geometry);
+ case MAXWELL3D_REG_INDEX(cb_bind[3]): {
+ ProcessCBBind(3);
break;
}
- case MAXWELL3D_REG_INDEX(cb_bind[4].raw_config): {
- ProcessCBBind(Regs::ShaderStage::Fragment);
+ case MAXWELL3D_REG_INDEX(cb_bind[4]): {
+ ProcessCBBind(4);
break;
}
case MAXWELL3D_REG_INDEX(draw.vertex_end_gl): {
@@ -687,10 +688,10 @@ void Maxwell3D::DrawArrays() {
}
}
-void Maxwell3D::ProcessCBBind(Regs::ShaderStage stage) {
+void Maxwell3D::ProcessCBBind(std::size_t stage_index) {
// Bind the buffer currently in CB_ADDRESS to the specified index in the desired shader stage.
- auto& shader = state.shader_stages[static_cast<std::size_t>(stage)];
- auto& bind_data = regs.cb_bind[static_cast<std::size_t>(stage)];
+ auto& shader = state.shader_stages[stage_index];
+ auto& bind_data = regs.cb_bind[stage_index];
ASSERT(bind_data.index < Regs::MaxConstBuffers);
auto& buffer = shader.const_buffers[bind_data.index];
@@ -742,14 +743,6 @@ Texture::TICEntry Maxwell3D::GetTICEntry(u32 tic_index) const {
Texture::TICEntry tic_entry;
memory_manager.ReadBlockUnsafe(tic_address_gpu, &tic_entry, sizeof(Texture::TICEntry));
- [[maybe_unused]] const auto r_type{tic_entry.r_type.Value()};
- [[maybe_unused]] const auto g_type{tic_entry.g_type.Value()};
- [[maybe_unused]] const auto b_type{tic_entry.b_type.Value()};
- [[maybe_unused]] const auto a_type{tic_entry.a_type.Value()};
-
- // TODO(Subv): Different data types for separate components are not supported
- DEBUG_ASSERT(r_type == g_type && r_type == b_type && r_type == a_type);
-
return tic_entry;
}
@@ -765,9 +758,9 @@ Texture::FullTextureInfo Maxwell3D::GetTextureInfo(Texture::TextureHandle tex_ha
return Texture::FullTextureInfo{GetTICEntry(tex_handle.tic_id), GetTSCEntry(tex_handle.tsc_id)};
}
-Texture::FullTextureInfo Maxwell3D::GetStageTexture(Regs::ShaderStage stage,
- std::size_t offset) const {
- const auto& shader = state.shader_stages[static_cast<std::size_t>(stage)];
+Texture::FullTextureInfo Maxwell3D::GetStageTexture(ShaderType stage, std::size_t offset) const {
+ const auto stage_index = static_cast<std::size_t>(stage);
+ const auto& shader = state.shader_stages[stage_index];
const auto& tex_info_buffer = shader.const_buffers[regs.tex_cb_index];
ASSERT(tex_info_buffer.enabled && tex_info_buffer.address != 0);
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index 1aa7c274f..4cb7339b5 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -18,6 +18,7 @@
#include "video_core/engines/const_buffer_engine_interface.h"
#include "video_core/engines/const_buffer_info.h"
#include "video_core/engines/engine_upload.h"
+#include "video_core/engines/shader_type.h"
#include "video_core/gpu.h"
#include "video_core/macro_interpreter.h"
#include "video_core/textures/texture.h"
@@ -62,7 +63,6 @@ public:
static constexpr std::size_t NumVertexArrays = 32;
static constexpr std::size_t NumVertexAttributes = 32;
static constexpr std::size_t NumVaryings = 31;
- static constexpr std::size_t NumTextureSamplers = 32;
static constexpr std::size_t NumImages = 8; // TODO(Rodrigo): Investigate this number
static constexpr std::size_t NumClipDistances = 8;
static constexpr std::size_t MaxShaderProgram = 6;
@@ -130,14 +130,6 @@ public:
Fragment = 5,
};
- enum class ShaderStage : u32 {
- Vertex = 0,
- TesselationControl = 1,
- TesselationEval = 2,
- Geometry = 3,
- Fragment = 4,
- };
-
struct VertexAttribute {
enum class Size : u32 {
Invalid = 0x0,
@@ -677,8 +669,8 @@ public:
INSERT_UNION_PADDING_WORDS(0x15);
s32 stencil_back_func_ref;
- u32 stencil_back_mask;
u32 stencil_back_func_mask;
+ u32 stencil_back_mask;
INSERT_UNION_PADDING_WORDS(0xC);
@@ -1254,7 +1246,7 @@ public:
Texture::FullTextureInfo GetTextureInfo(Texture::TextureHandle tex_handle) const;
/// Returns the texture information for a specific texture in a specific shader stage.
- Texture::FullTextureInfo GetStageTexture(Regs::ShaderStage stage, std::size_t offset) const;
+ Texture::FullTextureInfo GetStageTexture(ShaderType stage, std::size_t offset) const;
u32 AccessConstBuffer32(ShaderType stage, u64 const_buffer, u64 offset) const override;
@@ -1376,7 +1368,7 @@ private:
void FinishCBData();
/// Handles a write to the CB_BIND register.
- void ProcessCBBind(Regs::ShaderStage stage);
+ void ProcessCBBind(std::size_t stage_index);
/// Handles a write to the VERTEX_END_GL register, triggering a draw.
void DrawArrays();
@@ -1407,8 +1399,8 @@ ASSERT_REG_POSITION(polygon_offset_line_enable, 0x371);
ASSERT_REG_POSITION(polygon_offset_fill_enable, 0x372);
ASSERT_REG_POSITION(scissor_test, 0x380);
ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5);
-ASSERT_REG_POSITION(stencil_back_mask, 0x3D6);
-ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7);
+ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D6);
+ASSERT_REG_POSITION(stencil_back_mask, 0x3D7);
ASSERT_REG_POSITION(color_mask_common, 0x3E4);
ASSERT_REG_POSITION(rt_separate_frag_data, 0x3EB);
ASSERT_REG_POSITION(depth_bounds, 0x3EC);
diff --git a/src/video_core/engines/shader_type.h b/src/video_core/engines/shader_type.h
new file mode 100644
index 000000000..49ce5cde5
--- /dev/null
+++ b/src/video_core/engines/shader_type.h
@@ -0,0 +1,21 @@
+// Copyright 2019 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "common/common_types.h"
+
+namespace Tegra::Engines {
+
+enum class ShaderType : u32 {
+ Vertex = 0,
+ TesselationControl = 1,
+ TesselationEval = 2,
+ Geometry = 3,
+ Fragment = 4,
+ Compute = 5,
+};
+static constexpr std::size_t MaxShaderTypes = 6;
+
+} // namespace Tegra::Engines