Merge pull request #1505 from FernandoS27/tex-3d
Implemented 3D Textures
This commit is contained in:
		
						commit
						6acd8d166a
					
				@ -448,7 +448,10 @@ public:
 | 
			
		||||
                BitField<8, 3, u32> block_depth;
 | 
			
		||||
                BitField<12, 1, InvMemoryLayout> type;
 | 
			
		||||
            } memory_layout;
 | 
			
		||||
            u32 array_mode;
 | 
			
		||||
            union {
 | 
			
		||||
                BitField<0, 16, u32> array_mode;
 | 
			
		||||
                BitField<16, 1, u32> volume;
 | 
			
		||||
            };
 | 
			
		||||
            u32 layer_stride;
 | 
			
		||||
            u32 base_layer;
 | 
			
		||||
            INSERT_PADDING_WORDS(7);
 | 
			
		||||
 | 
			
		||||
@ -155,6 +155,7 @@ void SurfaceParams::InitCacheParameters(Tegra::GPUVAddr gpu_addr_) {
 | 
			
		||||
    params.rt.index = static_cast<u32>(index);
 | 
			
		||||
    params.rt.array_mode = config.array_mode;
 | 
			
		||||
    params.rt.layer_stride = config.layer_stride;
 | 
			
		||||
    params.rt.volume = config.volume;
 | 
			
		||||
    params.rt.base_layer = config.base_layer;
 | 
			
		||||
 | 
			
		||||
    params.InitCacheParameters(config.Address());
 | 
			
		||||
@ -1122,8 +1123,8 @@ Surface RasterizerCacheOpenGL::GetSurface(const SurfaceParams& params, bool pres
 | 
			
		||||
        } else if (preserve_contents) {
 | 
			
		||||
            // If surface parameters changed and we care about keeping the previous data, recreate
 | 
			
		||||
            // the surface from the old one
 | 
			
		||||
            Unregister(surface);
 | 
			
		||||
            Surface new_surface{RecreateSurface(surface, params)};
 | 
			
		||||
            Unregister(surface);
 | 
			
		||||
            Register(new_surface);
 | 
			
		||||
            return new_surface;
 | 
			
		||||
        } else {
 | 
			
		||||
@ -1220,6 +1221,9 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
 | 
			
		||||
            CopySurface(old_surface, new_surface, copy_pbo.handle);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case SurfaceParams::SurfaceTarget::Texture3D:
 | 
			
		||||
        AccurateCopySurface(old_surface, new_surface);
 | 
			
		||||
        break;
 | 
			
		||||
    case SurfaceParams::SurfaceTarget::TextureCubemap: {
 | 
			
		||||
        if (old_params.rt.array_mode != 1) {
 | 
			
		||||
            // TODO(bunnei): This is used by Breath of the Wild, I'm not sure how to implement this
 | 
			
		||||
 | 
			
		||||
@ -132,6 +132,8 @@ struct SurfaceParams {
 | 
			
		||||
        case Tegra::Texture::TextureType::Texture2D:
 | 
			
		||||
        case Tegra::Texture::TextureType::Texture2DNoMipmap:
 | 
			
		||||
            return SurfaceTarget::Texture2D;
 | 
			
		||||
        case Tegra::Texture::TextureType::Texture3D:
 | 
			
		||||
            return SurfaceTarget::Texture3D;
 | 
			
		||||
        case Tegra::Texture::TextureType::TextureCubemap:
 | 
			
		||||
            return SurfaceTarget::TextureCubemap;
 | 
			
		||||
        case Tegra::Texture::TextureType::Texture1DArray:
 | 
			
		||||
@ -791,6 +793,7 @@ struct SurfaceParams {
 | 
			
		||||
    struct {
 | 
			
		||||
        u32 index;
 | 
			
		||||
        u32 array_mode;
 | 
			
		||||
        u32 volume;
 | 
			
		||||
        u32 layer_stride;
 | 
			
		||||
        u32 base_layer;
 | 
			
		||||
    } rt;
 | 
			
		||||
 | 
			
		||||
@ -1142,6 +1142,7 @@ private:
 | 
			
		||||
        case Tegra::Shader::TextureType::Texture2D: {
 | 
			
		||||
            return 2;
 | 
			
		||||
        }
 | 
			
		||||
        case Tegra::Shader::TextureType::Texture3D:
 | 
			
		||||
        case Tegra::Shader::TextureType::TextureCube: {
 | 
			
		||||
            return 3;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user