maxwell_3d: Partially implement texture buffers as 1D textures
This commit is contained in:
		| @@ -430,14 +430,10 @@ Texture::TICEntry Maxwell3D::GetTICEntry(u32 tic_index) const { | ||||
|     Texture::TICEntry tic_entry; | ||||
|     memory_manager.ReadBlockUnsafe(tic_address_gpu, &tic_entry, sizeof(Texture::TICEntry)); | ||||
|  | ||||
|     ASSERT_MSG(tic_entry.header_version == Texture::TICHeaderVersion::BlockLinear || | ||||
|                    tic_entry.header_version == Texture::TICHeaderVersion::Pitch, | ||||
|                "TIC versions other than BlockLinear or Pitch are unimplemented"); | ||||
|  | ||||
|     const auto r_type = tic_entry.r_type.Value(); | ||||
|     const auto g_type = tic_entry.g_type.Value(); | ||||
|     const auto b_type = tic_entry.b_type.Value(); | ||||
|     const auto a_type = tic_entry.a_type.Value(); | ||||
|     const auto r_type{tic_entry.r_type.Value()}; | ||||
|     const auto g_type{tic_entry.g_type.Value()}; | ||||
|     const auto b_type{tic_entry.b_type.Value()}; | ||||
|     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); | ||||
|   | ||||
| @@ -140,7 +140,7 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only, | ||||
|  | ||||
|     params.width = Common::AlignUp(config.tic.Width(), GetCompressionFactor(params.pixel_format)); | ||||
|     params.height = Common::AlignUp(config.tic.Height(), GetCompressionFactor(params.pixel_format)); | ||||
|     if (!params.is_tiled) { | ||||
|     if (config.tic.IsLineal()) { | ||||
|         params.pitch = config.tic.Pitch(); | ||||
|     } | ||||
|     params.unaligned_height = config.tic.Height(); | ||||
|   | ||||
| @@ -12,6 +12,8 @@ SurfaceTarget SurfaceTargetFromTextureType(Tegra::Texture::TextureType texture_t | ||||
|     switch (texture_type) { | ||||
|     case Tegra::Texture::TextureType::Texture1D: | ||||
|         return SurfaceTarget::Texture1D; | ||||
|     case Tegra::Texture::TextureType::Texture1DBuffer: | ||||
|         return SurfaceTarget::Texture1D; // Fixme | ||||
|     case Tegra::Texture::TextureType::Texture2D: | ||||
|     case Tegra::Texture::TextureType::Texture2DNoMipmap: | ||||
|         return SurfaceTarget::Texture2D; | ||||
|   | ||||
| @@ -172,12 +172,16 @@ struct TICEntry { | ||||
|         BitField<26, 1, u32> use_header_opt_control; | ||||
|         BitField<27, 1, u32> depth_texture; | ||||
|         BitField<28, 4, u32> max_mip_level; | ||||
|  | ||||
|         BitField<0, 16, u32> buffer_high_width_minus_one; | ||||
|     }; | ||||
|     union { | ||||
|         BitField<0, 16, u32> width_minus_1; | ||||
|         BitField<22, 1, u32> srgb_conversion; | ||||
|         BitField<23, 4, TextureType> texture_type; | ||||
|         BitField<29, 3, u32> border_size; | ||||
|  | ||||
|         BitField<0, 16, u32> buffer_low_width_minus_one; | ||||
|     }; | ||||
|     union { | ||||
|         BitField<0, 16, u32> height_minus_1; | ||||
| @@ -206,7 +210,10 @@ struct TICEntry { | ||||
|     } | ||||
|  | ||||
|     u32 Width() const { | ||||
|         return width_minus_1 + 1; | ||||
|         if (header_version != TICHeaderVersion::OneDBuffer) { | ||||
|             return width_minus_1 + 1; | ||||
|         } | ||||
|         return (buffer_high_width_minus_one << 16) | buffer_low_width_minus_one; | ||||
|     } | ||||
|  | ||||
|     u32 Height() const { | ||||
| @@ -237,6 +244,15 @@ struct TICEntry { | ||||
|                header_version == TICHeaderVersion::BlockLinearColorKey; | ||||
|     } | ||||
|  | ||||
|     bool IsLineal() const { | ||||
|         return header_version == TICHeaderVersion::Pitch || | ||||
|                header_version == TICHeaderVersion::PitchColorKey; | ||||
|     } | ||||
|  | ||||
|     bool IsBuffer() const { | ||||
|         return header_version == TICHeaderVersion::OneDBuffer; | ||||
|     } | ||||
|  | ||||
|     bool IsSrgbConversionEnabled() const { | ||||
|         return srgb_conversion != 0; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user