diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 5f7f4aa9a8..ad5603e852 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -798,30 +798,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { key.state.alpha_to_one_enabled != 0 ? VK_TRUE : VK_FALSE, }; - const auto [sample_grid_width, sample_grid_height] = - VideoCommon::SampleLocationGridSize(msaa_mode); - const u32 sample_count = static_cast(VideoCommon::NumSamples(msaa_mode)); - const u32 total_sample_locations = sample_count * sample_grid_width * sample_grid_height; - std::array default_sample_locations{}; - VkSampleLocationsInfoEXT sample_locations_info{ - .sType = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT, - .pNext = nullptr, - .sampleLocationsPerPixel = vk_samples, - .sampleLocationGridSize = {sample_grid_width, sample_grid_height}, - .sampleLocationsCount = total_sample_locations, - .pSampleLocations = default_sample_locations.data(), - }; - VkPipelineSampleLocationsStateCreateInfoEXT sample_locations_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT, - .pNext = nullptr, - .sampleLocationsEnable = VK_FALSE, - .sampleLocationsInfo = sample_locations_info, - }; - if (device.IsExtSampleLocationsSupported() && total_sample_locations > 0 && - device.SupportsSampleLocationsFor(vk_samples)) { - sample_locations_ci.sampleLocationsEnable = VK_TRUE; - sample_locations_ci.pNext = std::exchange(multisample_ci.pNext, &sample_locations_ci); - } const VkPipelineDepthStencilStateCreateInfo depth_stencil_ci{ .sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, .pNext = nullptr, @@ -960,10 +936,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { } } - if (sample_locations_ci.sampleLocationsEnable) { - dynamic_states.push_back(VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT); - } - const VkPipelineDynamicStateCreateInfo dynamic_state_ci{ .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, .pNext = nullptr, diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 09acd0320d..984c5c2688 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1029,7 +1029,6 @@ void RasterizerVulkan::UpdateDynamicStates() { UpdateDepthBounds(regs); UpdateStencilFaces(regs); UpdateLineWidth(regs); - UpdateSampleLocations(regs); // EDS1: CullMode, DepthCompare, FrontFace, StencilOp, DepthBoundsTest, DepthTest, DepthWrite, StencilTest if (device.IsExtExtendedDynamicStateSupported()) { @@ -1279,15 +1278,15 @@ void RasterizerVulkan::UpdateDepthBias(Tegra::Engines::Maxwell3D::Regs& regs) { }); } -void RasterizerVulkan::UpdateBlendConstants(Tegra::Engines::Maxwell3D::Regs& regs) { - if (!state_tracker.TouchBlendConstants()) { - return; - } - const std::array blend_color = {regs.blend_color.r, regs.blend_color.g, regs.blend_color.b, - regs.blend_color.a}; - scheduler.Record( - [blend_color](vk::CommandBuffer cmdbuf) { cmdbuf.SetBlendConstants(blend_color.data()); }); -} +// void RasterizerVulkan::UpdateLineWidth(Tegra::Engines::Maxwell3D::Regs& regs) { +// if (!state_tracker.TouchLineWidth()) { +// return; +// } +// const std::array blend_color = {regs.blend_color.r, regs.blend_color.g, regs.blend_color.b, +// regs.blend_color.a}; +// scheduler.Record( +// [blend_color](vk::CommandBuffer cmdbuf) { cmdbuf.SetBlendConstants(blend_color.data()); }); +// } void RasterizerVulkan::UpdateDepthBounds(Tegra::Engines::Maxwell3D::Regs& regs) { if (!state_tracker.TouchDepthBounds()) { @@ -1398,66 +1397,6 @@ void RasterizerVulkan::UpdateLineWidth(Tegra::Engines::Maxwell3D::Regs& regs) { scheduler.Record([width](vk::CommandBuffer cmdbuf) { cmdbuf.SetLineWidth(width); }); } -void RasterizerVulkan::UpdateSampleLocations(Tegra::Engines::Maxwell3D::Regs& regs) { - if (!device.IsExtSampleLocationsSupported()) { - state_tracker.TouchSampleLocations(); - return; - } - if (!state_tracker.TouchSampleLocations()) { - return; - } - - const auto msaa_mode = regs.anti_alias_samples_mode; - const u32 sample_count = static_cast(VideoCommon::NumSamples(msaa_mode)); - - const VkSampleCountFlagBits vk_samples = MaxwellToVK::MsaaMode(msaa_mode); - if (!device.SupportsSampleLocationsFor(vk_samples)) { - return; - } - - const auto [grid_width, grid_height] = VideoCommon::SampleLocationGridSize(msaa_mode); - const u32 total_locations = sample_count * grid_width * grid_height; - if (total_locations == 0 || total_locations > VideoCommon::MaxSampleLocationSlots) { - LOG_WARNING(Render_Vulkan, "Unsupported sample-location grid configuration: samples={}, grid={}x{}", - sample_count, grid_width, grid_height); - return; - } - - const auto& props = device.SampleLocationProperties(); - std::array locations{}; - constexpr float unit = 1.0f / 16.0f; - const auto clamp_coord = [&](float coord) { - return std::clamp(coord, props.sampleLocationCoordinateRange[0], - props.sampleLocationCoordinateRange[1]); - }; - - for (u32 index = 0; index < total_locations; ++index) { - const auto& packed = regs.multisample_sample_locations[index / 4]; - const auto [raw_x, raw_y] = packed.Location(index % 4); - const float offset_x = static_cast(static_cast(raw_x) - 8); - const float offset_y = static_cast(static_cast(raw_y) - 8); - const float x = clamp_coord(offset_x * unit); - const float y = clamp_coord(offset_y * unit); - locations[index] = VkSampleLocationEXT{.x = x, .y = y}; - } - - VkSampleLocationsInfoEXT info{ - .sType = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT, - .pNext = nullptr, - .sampleLocationsPerPixel = vk_samples, - .sampleLocationGridSize = {grid_width, grid_height}, - .sampleLocationsCount = total_locations, - .pSampleLocations = nullptr, - }; - - const auto sample_locations = locations; - scheduler.Record([info, sample_locations](vk::CommandBuffer cmdbuf) { - auto info_copy = info; - info_copy.pSampleLocations = sample_locations.data(); - cmdbuf.SetSampleLocationsEXT(info_copy); - }); -} - void RasterizerVulkan::UpdateCullMode(Tegra::Engines::Maxwell3D::Regs& regs) { if (!state_tracker.TouchCullMode()) { return; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 0703fee06a..841933d31d 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -169,7 +169,6 @@ private: void UpdateDepthBounds(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateStencilFaces(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateLineWidth(Tegra::Engines::Maxwell3D::Regs& regs); - void UpdateSampleLocations(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateCullMode(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateDepthBoundsTestEnable(Tegra::Engines::Maxwell3D::Regs& regs); diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp index c1fe4381a1..3f4dd89c7e 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp +++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp @@ -40,7 +40,6 @@ Flags MakeInvalidationFlags() { StencilWriteMask, StencilCompare, LineWidth, - SampleLocations, CullMode, DepthBoundsEnable, DepthTestEnable, @@ -131,12 +130,6 @@ void SetupDirtyLineWidth(Tables& tables) { tables[0][OFF(line_width_aliased)] = LineWidth; } -void SetupDirtySampleLocations(Tables& tables) { - tables[0][OFF(anti_alias_samples_mode)] = SampleLocations; - FillBlock(tables[0], OFF(multisample_sample_locations), - NUM(multisample_sample_locations), SampleLocations); -} - void SetupDirtyCullMode(Tables& tables) { auto& table = tables[0]; table[OFF(gl_cull_face)] = CullMode; @@ -254,7 +247,6 @@ void StateTracker::SetupTables(Tegra::Control::ChannelState& channel_state) { SetupDirtyDepthBounds(tables); SetupDirtyStencilProperties(tables); SetupDirtyLineWidth(tables); - SetupDirtySampleLocations(tables); SetupDirtyCullMode(tables); SetupDirtyStateEnable(tables); SetupDirtyDepthCompareOp(tables); diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.h b/src/video_core/renderer_vulkan/vk_state_tracker.h index 818d7c1d70..6b47ba4176 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.h +++ b/src/video_core/renderer_vulkan/vk_state_tracker.h @@ -42,7 +42,6 @@ enum : u8 { StencilWriteMask, StencilCompare, LineWidth, - SampleLocations, CullMode, DepthBoundsEnable, @@ -186,10 +185,6 @@ public: return Exchange(Dirty::LineWidth, false); } - bool TouchSampleLocations() { - return Exchange(Dirty::SampleLocations, false); - } - bool TouchCullMode() { return Exchange(Dirty::CullMode, false); } diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 0d8c6ed8ae..bd7b3e1a37 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -139,13 +139,6 @@ constexpr VkBorderColor ConvertBorderColor(const std::array& color) { if (info.type == ImageType::e3D) { flags |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT; } - if (device.IsExtSampleLocationsSupported()) { - const auto surface_type = VideoCore::Surface::GetFormatType(info.format); - if (surface_type == VideoCore::Surface::SurfaceType::Depth || - surface_type == VideoCore::Surface::SurfaceType::DepthStencil) { - flags |= VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT; - } - } const auto [samples_x, samples_y] = VideoCommon::SamplesLog2(info.num_samples); return VkImageCreateInfo{ .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,