summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar FernandoS272018-10-15 21:04:20 -0400
committerGravatar FernandoS272018-10-17 18:52:08 -0400
commitfd9e2d0073be84deff02a122d5db8d2917309a61 (patch)
tree1308b6b6f1c99169d22bb3ca963ce8a6104c557b
parentMerge pull request #1497 from bunnei/flush-framebuffers (diff)
downloadyuzu-fd9e2d0073be84deff02a122d5db8d2917309a61.tar.gz
yuzu-fd9e2d0073be84deff02a122d5db8d2917309a61.tar.xz
yuzu-fd9e2d0073be84deff02a122d5db8d2917309a61.zip
Implement 3D Textures
-rw-r--r--src/video_core/engines/maxwell_3d.h5
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.h3
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp1
4 files changed, 10 insertions, 1 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index c8d1b6478..c8af1c6b6 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -448,7 +448,10 @@ public:
448 BitField<8, 3, u32> block_depth; 448 BitField<8, 3, u32> block_depth;
449 BitField<12, 1, InvMemoryLayout> type; 449 BitField<12, 1, InvMemoryLayout> type;
450 } memory_layout; 450 } memory_layout;
451 u32 array_mode; 451 union {
452 BitField<0, 16, u32> array_mode;
453 BitField<16, 1, u32> volume;
454 };
452 u32 layer_stride; 455 u32 layer_stride;
453 u32 base_layer; 456 u32 base_layer;
454 INSERT_PADDING_WORDS(7); 457 INSERT_PADDING_WORDS(7);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index 1cb77aaf2..b20ef8fae 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -155,6 +155,7 @@ void SurfaceParams::InitCacheParameters(Tegra::GPUVAddr gpu_addr_) {
155 params.rt.index = static_cast<u32>(index); 155 params.rt.index = static_cast<u32>(index);
156 params.rt.array_mode = config.array_mode; 156 params.rt.array_mode = config.array_mode;
157 params.rt.layer_stride = config.layer_stride; 157 params.rt.layer_stride = config.layer_stride;
158 params.rt.volume = config.volume;
158 params.rt.base_layer = config.base_layer; 159 params.rt.base_layer = config.base_layer;
159 160
160 params.InitCacheParameters(config.Address()); 161 params.InitCacheParameters(config.Address());
@@ -1213,6 +1214,7 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
1213 const bool is_blit{old_params.pixel_format == new_params.pixel_format}; 1214 const bool is_blit{old_params.pixel_format == new_params.pixel_format};
1214 1215
1215 switch (new_params.target) { 1216 switch (new_params.target) {
1217 case SurfaceParams::SurfaceTarget::Texture3D:
1216 case SurfaceParams::SurfaceTarget::Texture2D: 1218 case SurfaceParams::SurfaceTarget::Texture2D:
1217 if (is_blit) { 1219 if (is_blit) {
1218 BlitSurface(old_surface, new_surface, read_framebuffer.handle, draw_framebuffer.handle); 1220 BlitSurface(old_surface, new_surface, read_framebuffer.handle, draw_framebuffer.handle);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
index 7c1cb72d0..0dd0d90a3 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
@@ -132,6 +132,8 @@ struct SurfaceParams {
132 case Tegra::Texture::TextureType::Texture2D: 132 case Tegra::Texture::TextureType::Texture2D:
133 case Tegra::Texture::TextureType::Texture2DNoMipmap: 133 case Tegra::Texture::TextureType::Texture2DNoMipmap:
134 return SurfaceTarget::Texture2D; 134 return SurfaceTarget::Texture2D;
135 case Tegra::Texture::TextureType::Texture3D:
136 return SurfaceTarget::Texture3D;
135 case Tegra::Texture::TextureType::TextureCubemap: 137 case Tegra::Texture::TextureType::TextureCubemap:
136 return SurfaceTarget::TextureCubemap; 138 return SurfaceTarget::TextureCubemap;
137 case Tegra::Texture::TextureType::Texture1DArray: 139 case Tegra::Texture::TextureType::Texture1DArray:
@@ -791,6 +793,7 @@ struct SurfaceParams {
791 struct { 793 struct {
792 u32 index; 794 u32 index;
793 u32 array_mode; 795 u32 array_mode;
796 u32 volume;
794 u32 layer_stride; 797 u32 layer_stride;
795 u32 base_layer; 798 u32 base_layer;
796 } rt; 799 } rt;
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 28dba0084..787de4bef 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -1142,6 +1142,7 @@ private:
1142 case Tegra::Shader::TextureType::Texture2D: { 1142 case Tegra::Shader::TextureType::Texture2D: {
1143 return 2; 1143 return 2;
1144 } 1144 }
1145 case Tegra::Shader::TextureType::Texture3D:
1145 case Tegra::Shader::TextureType::TextureCube: { 1146 case Tegra::Shader::TextureType::TextureCube: {
1146 return 3; 1147 return 3;
1147 } 1148 }