Merge pull request #10172 from Kelebek1/debug_validation_names
Log object names with debug renderer, add a GPU address to ImageViews
This commit is contained in:
		| @@ -108,7 +108,8 @@ bool IsASTCSupported() { | |||||||
|  |  | ||||||
| [[nodiscard]] bool IsDebugToolAttached(std::span<const std::string_view> extensions) { | [[nodiscard]] bool IsDebugToolAttached(std::span<const std::string_view> extensions) { | ||||||
|     const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED"); |     const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED"); | ||||||
|     return nsight || HasExtension(extensions, "GL_EXT_debug_tool"); |     return nsight || HasExtension(extensions, "GL_EXT_debug_tool") || | ||||||
|  |            Settings::values.renderer_debug.GetValue(); | ||||||
| } | } | ||||||
| } // Anonymous namespace | } // Anonymous namespace | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1126,7 +1126,8 @@ bool Image::ScaleDown(bool ignore) { | |||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, | ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, | ||||||
|                      ImageId image_id_, Image& image, const SlotVector<Image>&) |                      ImageId image_id_, Image& image, const SlotVector<Image>&) | ||||||
|     : VideoCommon::ImageViewBase{info, image.info, image_id_}, views{runtime.null_image_views} { |     : VideoCommon::ImageViewBase{info, image.info, image_id_, image.gpu_addr}, | ||||||
|  |       views{runtime.null_image_views} { | ||||||
|     const Device& device = runtime.device; |     const Device& device = runtime.device; | ||||||
|     if (True(image.flags & ImageFlagBits::Converted)) { |     if (True(image.flags & ImageFlagBits::Converted)) { | ||||||
|         internal_format = IsPixelFormatSRGB(info.format) ? GL_SRGB8_ALPHA8 : GL_RGBA8; |         internal_format = IsPixelFormatSRGB(info.format) ? GL_SRGB8_ALPHA8 : GL_RGBA8; | ||||||
| @@ -1217,12 +1218,12 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI | |||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ||||||
|                      const VideoCommon::ImageViewInfo& view_info, GPUVAddr gpu_addr_) |                      const VideoCommon::ImageViewInfo& view_info, GPUVAddr gpu_addr_) | ||||||
|     : VideoCommon::ImageViewBase{info, view_info}, gpu_addr{gpu_addr_}, |     : VideoCommon::ImageViewBase{info, view_info, gpu_addr_}, | ||||||
|       buffer_size{VideoCommon::CalculateGuestSizeInBytes(info)} {} |       buffer_size{VideoCommon::CalculateGuestSizeInBytes(info)} {} | ||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ||||||
|                      const VideoCommon::ImageViewInfo& view_info) |                      const VideoCommon::ImageViewInfo& view_info) | ||||||
|     : VideoCommon::ImageViewBase{info, view_info} {} |     : VideoCommon::ImageViewBase{info, view_info, 0} {} | ||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::NullImageViewParams& params) | ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::NullImageViewParams& params) | ||||||
|     : VideoCommon::ImageViewBase{params}, views{runtime.null_image_views} {} |     : VideoCommon::ImageViewBase{params}, views{runtime.null_image_views} {} | ||||||
| @@ -1282,7 +1283,7 @@ GLuint ImageView::MakeView(Shader::TextureType view_type, GLenum view_format) { | |||||||
|         ApplySwizzle(view.handle, format, casted_swizzle); |         ApplySwizzle(view.handle, format, casted_swizzle); | ||||||
|     } |     } | ||||||
|     if (set_object_label) { |     if (set_object_label) { | ||||||
|         const std::string name = VideoCommon::Name(*this); |         const std::string name = VideoCommon::Name(*this, gpu_addr); | ||||||
|         glObjectLabel(GL_TEXTURE, view.handle, static_cast<GLsizei>(name.size()), name.data()); |         glObjectLabel(GL_TEXTURE, view.handle, static_cast<GLsizei>(name.size()), name.data()); | ||||||
|     } |     } | ||||||
|     return view.handle; |     return view.handle; | ||||||
|   | |||||||
| @@ -314,7 +314,6 @@ private: | |||||||
|     std::unique_ptr<StorageViews> storage_views; |     std::unique_ptr<StorageViews> storage_views; | ||||||
|     GLenum internal_format = GL_NONE; |     GLenum internal_format = GL_NONE; | ||||||
|     GLuint default_handle = 0; |     GLuint default_handle = 0; | ||||||
|     GPUVAddr gpu_addr = 0; |  | ||||||
|     u32 buffer_size = 0; |     u32 buffer_size = 0; | ||||||
|     GLuint original_texture = 0; |     GLuint original_texture = 0; | ||||||
|     int num_samples = 0; |     int num_samples = 0; | ||||||
|   | |||||||
| @@ -1584,8 +1584,9 @@ bool Image::NeedsScaleHelper() const { | |||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, | ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, | ||||||
|                      ImageId image_id_, Image& image) |                      ImageId image_id_, Image& image) | ||||||
|     : VideoCommon::ImageViewBase{info, image.info, image_id_}, device{&runtime.device}, |     : VideoCommon::ImageViewBase{info, image.info, image_id_, image.gpu_addr}, | ||||||
|       image_handle{image.Handle()}, samples(ConvertSampleCount(image.info.num_samples)) { |       device{&runtime.device}, image_handle{image.Handle()}, | ||||||
|  |       samples(ConvertSampleCount(image.info.num_samples)) { | ||||||
|     using Shader::TextureType; |     using Shader::TextureType; | ||||||
|  |  | ||||||
|     const VkImageAspectFlags aspect_mask = ImageViewAspectMask(info); |     const VkImageAspectFlags aspect_mask = ImageViewAspectMask(info); | ||||||
| @@ -1631,7 +1632,7 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI | |||||||
|         } |         } | ||||||
|         vk::ImageView handle = device->GetLogical().CreateImageView(ci); |         vk::ImageView handle = device->GetLogical().CreateImageView(ci); | ||||||
|         if (device->HasDebuggingToolAttached()) { |         if (device->HasDebuggingToolAttached()) { | ||||||
|             handle.SetObjectNameEXT(VideoCommon::Name(*this).c_str()); |             handle.SetObjectNameEXT(VideoCommon::Name(*this, gpu_addr).c_str()); | ||||||
|         } |         } | ||||||
|         image_views[static_cast<size_t>(tex_type)] = std::move(handle); |         image_views[static_cast<size_t>(tex_type)] = std::move(handle); | ||||||
|     }; |     }; | ||||||
| @@ -1672,7 +1673,7 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI | |||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::ImageInfo& info, | ||||||
|                      const VideoCommon::ImageViewInfo& view_info, GPUVAddr gpu_addr_) |                      const VideoCommon::ImageViewInfo& view_info, GPUVAddr gpu_addr_) | ||||||
|     : VideoCommon::ImageViewBase{info, view_info}, gpu_addr{gpu_addr_}, |     : VideoCommon::ImageViewBase{info, view_info, gpu_addr_}, | ||||||
|       buffer_size{VideoCommon::CalculateGuestSizeInBytes(info)} {} |       buffer_size{VideoCommon::CalculateGuestSizeInBytes(info)} {} | ||||||
|  |  | ||||||
| ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::NullImageViewParams& params) | ImageView::ImageView(TextureCacheRuntime&, const VideoCommon::NullImageViewParams& params) | ||||||
|   | |||||||
| @@ -265,7 +265,6 @@ private: | |||||||
|     VkImage image_handle = VK_NULL_HANDLE; |     VkImage image_handle = VK_NULL_HANDLE; | ||||||
|     VkImageView render_target = VK_NULL_HANDLE; |     VkImageView render_target = VK_NULL_HANDLE; | ||||||
|     VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT; |     VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT; | ||||||
|     GPUVAddr gpu_addr = 0; |  | ||||||
|     u32 buffer_size = 0; |     u32 buffer_size = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,7 +46,7 @@ std::string Name(const ImageBase& image) { | |||||||
|     return "Invalid"; |     return "Invalid"; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::string Name(const ImageViewBase& image_view) { | std::string Name(const ImageViewBase& image_view, GPUVAddr addr) { | ||||||
|     const u32 width = image_view.size.width; |     const u32 width = image_view.size.width; | ||||||
|     const u32 height = image_view.size.height; |     const u32 height = image_view.size.height; | ||||||
|     const u32 depth = image_view.size.depth; |     const u32 depth = image_view.size.depth; | ||||||
| @@ -56,23 +56,25 @@ std::string Name(const ImageViewBase& image_view) { | |||||||
|     const std::string level = num_levels > 1 ? fmt::format(":{}", num_levels) : ""; |     const std::string level = num_levels > 1 ? fmt::format(":{}", num_levels) : ""; | ||||||
|     switch (image_view.type) { |     switch (image_view.type) { | ||||||
|     case ImageViewType::e1D: |     case ImageViewType::e1D: | ||||||
|         return fmt::format("ImageView 1D {}{}", width, level); |         return fmt::format("ImageView 1D 0x{:X} {}{}", addr, width, level); | ||||||
|     case ImageViewType::e2D: |     case ImageViewType::e2D: | ||||||
|         return fmt::format("ImageView 2D {}x{}{}", width, height, level); |         return fmt::format("ImageView 2D 0x{:X} {}x{}{}", addr, width, height, level); | ||||||
|     case ImageViewType::Cube: |     case ImageViewType::Cube: | ||||||
|         return fmt::format("ImageView Cube {}x{}{}", width, height, level); |         return fmt::format("ImageView Cube 0x{:X} {}x{}{}", addr, width, height, level); | ||||||
|     case ImageViewType::e3D: |     case ImageViewType::e3D: | ||||||
|         return fmt::format("ImageView 3D {}x{}x{}{}", width, height, depth, level); |         return fmt::format("ImageView 3D 0x{:X} {}x{}x{}{}", addr, width, height, depth, level); | ||||||
|     case ImageViewType::e1DArray: |     case ImageViewType::e1DArray: | ||||||
|         return fmt::format("ImageView 1DArray {}{}|{}", width, level, num_layers); |         return fmt::format("ImageView 1DArray 0x{:X} {}{}|{}", addr, width, level, num_layers); | ||||||
|     case ImageViewType::e2DArray: |     case ImageViewType::e2DArray: | ||||||
|         return fmt::format("ImageView 2DArray {}x{}{}|{}", width, height, level, num_layers); |         return fmt::format("ImageView 2DArray 0x{:X} {}x{}{}|{}", addr, width, height, level, | ||||||
|  |                            num_layers); | ||||||
|     case ImageViewType::CubeArray: |     case ImageViewType::CubeArray: | ||||||
|         return fmt::format("ImageView CubeArray {}x{}{}|{}", width, height, level, num_layers); |         return fmt::format("ImageView CubeArray 0x{:X} {}x{}{}|{}", addr, width, height, level, | ||||||
|  |                            num_layers); | ||||||
|     case ImageViewType::Rect: |     case ImageViewType::Rect: | ||||||
|         return fmt::format("ImageView Rect {}x{}{}", width, height, level); |         return fmt::format("ImageView Rect 0x{:X} {}x{}{}", addr, width, height, level); | ||||||
|     case ImageViewType::Buffer: |     case ImageViewType::Buffer: | ||||||
|         return fmt::format("BufferView {}", width); |         return fmt::format("BufferView 0x{:X} {}", addr, width); | ||||||
|     } |     } | ||||||
|     return "Invalid"; |     return "Invalid"; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -274,7 +274,7 @@ struct RenderTargets; | |||||||
|  |  | ||||||
| [[nodiscard]] std::string Name(const ImageBase& image); | [[nodiscard]] std::string Name(const ImageBase& image); | ||||||
|  |  | ||||||
| [[nodiscard]] std::string Name(const ImageViewBase& image_view); | [[nodiscard]] std::string Name(const ImageViewBase& image_view, GPUVAddr addr); | ||||||
|  |  | ||||||
| [[nodiscard]] std::string Name(const RenderTargets& render_targets); | [[nodiscard]] std::string Name(const RenderTargets& render_targets); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,8 +16,8 @@ | |||||||
| namespace VideoCommon { | namespace VideoCommon { | ||||||
|  |  | ||||||
| ImageViewBase::ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_info, | ImageViewBase::ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_info, | ||||||
|                              ImageId image_id_) |                              ImageId image_id_, GPUVAddr addr) | ||||||
|     : image_id{image_id_}, format{info.format}, type{info.type}, range{info.range}, |     : image_id{image_id_}, gpu_addr{addr}, format{info.format}, type{info.type}, range{info.range}, | ||||||
|       size{ |       size{ | ||||||
|           .width = std::max(image_info.size.width >> range.base.level, 1u), |           .width = std::max(image_info.size.width >> range.base.level, 1u), | ||||||
|           .height = std::max(image_info.size.height >> range.base.level, 1u), |           .height = std::max(image_info.size.height >> range.base.level, 1u), | ||||||
| @@ -35,8 +35,8 @@ ImageViewBase::ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_i | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| ImageViewBase::ImageViewBase(const ImageInfo& info, const ImageViewInfo& view_info) | ImageViewBase::ImageViewBase(const ImageInfo& info, const ImageViewInfo& view_info, GPUVAddr addr) | ||||||
|     : image_id{NULL_IMAGE_ID}, format{info.format}, type{ImageViewType::Buffer}, |     : image_id{NULL_IMAGE_ID}, gpu_addr{addr}, format{info.format}, type{ImageViewType::Buffer}, | ||||||
|       size{ |       size{ | ||||||
|           .width = info.size.width, |           .width = info.size.width, | ||||||
|           .height = 1, |           .height = 1, | ||||||
|   | |||||||
| @@ -24,9 +24,9 @@ enum class ImageViewFlagBits : u16 { | |||||||
| DECLARE_ENUM_FLAG_OPERATORS(ImageViewFlagBits) | DECLARE_ENUM_FLAG_OPERATORS(ImageViewFlagBits) | ||||||
|  |  | ||||||
| struct ImageViewBase { | struct ImageViewBase { | ||||||
|     explicit ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_info, |     explicit ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_info, ImageId image_id, | ||||||
|                            ImageId image_id); |                            GPUVAddr addr); | ||||||
|     explicit ImageViewBase(const ImageInfo& info, const ImageViewInfo& view_info); |     explicit ImageViewBase(const ImageInfo& info, const ImageViewInfo& view_info, GPUVAddr addr); | ||||||
|     explicit ImageViewBase(const NullImageViewParams&); |     explicit ImageViewBase(const NullImageViewParams&); | ||||||
|  |  | ||||||
|     [[nodiscard]] bool IsBuffer() const noexcept { |     [[nodiscard]] bool IsBuffer() const noexcept { | ||||||
| @@ -34,6 +34,7 @@ struct ImageViewBase { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     ImageId image_id{}; |     ImageId image_id{}; | ||||||
|  |     GPUVAddr gpu_addr = 0; | ||||||
|     PixelFormat format{}; |     PixelFormat format{}; | ||||||
|     ImageViewType type{}; |     ImageViewType type{}; | ||||||
|     SubresourceRange range; |     SubresourceRange range; | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/settings.h" | ||||||
| #include "video_core/vulkan_common/vulkan_wrapper.h" | #include "video_core/vulkan_common/vulkan_wrapper.h" | ||||||
|  |  | ||||||
| // Define all features which may be used by the implementation here. | // Define all features which may be used by the implementation here. | ||||||
| @@ -510,7 +511,7 @@ public: | |||||||
|  |  | ||||||
|     /// Returns true when a known debugging tool is attached. |     /// Returns true when a known debugging tool is attached. | ||||||
|     bool HasDebuggingToolAttached() const { |     bool HasDebuggingToolAttached() const { | ||||||
|         return has_renderdoc || has_nsight_graphics; |         return has_renderdoc || has_nsight_graphics || Settings::values.renderer_debug.GetValue(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// Returns true when the device does not properly support cube compatibility. |     /// Returns true when the device does not properly support cube compatibility. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user