video_core: defensively program around unmapped device pointers
This commit is contained in:
		| @@ -131,10 +131,12 @@ FramebufferTextureInfo Layer::LoadFBToScreenInfo(const Tegra::FramebufferConfig& | ||||
|     const u64 size_in_bytes{Tegra::Texture::CalculateSize( | ||||
|         true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; | ||||
|     const u8* const host_ptr{device_memory.GetPointer<u8>(framebuffer_addr)}; | ||||
|     const std::span<const u8> input_data(host_ptr, size_in_bytes); | ||||
|     Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel, | ||||
|                                      framebuffer.width, framebuffer.height, 1, block_height_log2, | ||||
|                                      0); | ||||
|     if (host_ptr) { | ||||
|         const std::span<const u8> input_data(host_ptr, size_in_bytes); | ||||
|         Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel, | ||||
|                                          framebuffer.width, framebuffer.height, 1, | ||||
|                                          block_height_log2, 0); | ||||
|     } | ||||
|  | ||||
|     glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); | ||||
|     glPixelStorei(GL_UNPACK_ROW_LENGTH, static_cast<GLint>(framebuffer.stride)); | ||||
|   | ||||
| @@ -270,9 +270,11 @@ void Layer::UpdateRawImage(const Tegra::FramebufferConfig& framebuffer, size_t i | ||||
|     const u64 linear_size{GetSizeInBytes(framebuffer)}; | ||||
|     const u64 tiled_size{Tegra::Texture::CalculateSize( | ||||
|         true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; | ||||
|     Tegra::Texture::UnswizzleTexture( | ||||
|         mapped_span.subspan(image_offset, linear_size), std::span(host_ptr, tiled_size), | ||||
|         bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0); | ||||
|     if (host_ptr) { | ||||
|         Tegra::Texture::UnswizzleTexture( | ||||
|             mapped_span.subspan(image_offset, linear_size), std::span(host_ptr, tiled_size), | ||||
|             bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0); | ||||
|     } | ||||
|  | ||||
|     const VkBufferImageCopy copy{ | ||||
|         .bufferOffset = image_offset, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Liam
					Liam