From e666ab49dec811bc8fc71b1d57fb4fe9b942aa9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 19 Oct 2026 12:02:10 +0200 Subject: [PATCH] Remove leftovers from hardware tessellation Nothing reads from textures or storage buffers in vertex shaders since hardware tessellation was removed. Drop what was left for it: the vertexTexture flag of VulkanTexture::EndCreate (always false), the STORAGE_BUFFER_VERTEX binding type, GL's maxVertexTextureUnits, and the tesselationShaderSupported cap, which nothing read (and which was always false, since the feature was never enabled). Co-Authored-By: Claude Opus 5.5 (1M context) --- Common/GPU/OpenGL/GLFeatures.cpp | 2 -- Common/GPU/OpenGL/GLFeatures.h | 2 -- Common/GPU/Vulkan/VulkanDescSet.cpp | 1 - Common/GPU/Vulkan/VulkanDescSet.h | 1 - Common/GPU/Vulkan/VulkanImage.cpp | 4 ++-- Common/GPU/Vulkan/VulkanImage.h | 2 +- Common/GPU/Vulkan/VulkanRenderManager.cpp | 5 ----- Common/GPU/Vulkan/thin3d_vulkan.cpp | 5 ++--- Common/GPU/thin3d.h | 1 - GPU/Vulkan/TextureCacheVulkan.cpp | 2 +- 10 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Common/GPU/OpenGL/GLFeatures.cpp b/Common/GPU/OpenGL/GLFeatures.cpp index 3fcbe41ddd..b80d4ce123 100644 --- a/Common/GPU/OpenGL/GLFeatures.cpp +++ b/Common/GPU/OpenGL/GLFeatures.cpp @@ -504,8 +504,6 @@ bool CheckGLExtensions() { ParseExtensionsString(g_all_egl_extensions, g_set_egl_extensions); #endif - glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &gl_extensions.maxVertexTextureUnits); - #ifdef GL_LOW_FLOAT // This is probably a waste of time, implementations lie. if (gl_extensions.IsGLES || g_set_gl_extensions.count("GL_ARB_ES2_compatibility") || gl_extensions.VersionGEThan(4, 1)) { diff --git a/Common/GPU/OpenGL/GLFeatures.h b/Common/GPU/OpenGL/GLFeatures.h index 1223542b17..8f54894f43 100644 --- a/Common/GPU/OpenGL/GLFeatures.h +++ b/Common/GPU/OpenGL/GLFeatures.h @@ -129,8 +129,6 @@ struct GLExtensions { int range[2][6][2]; // [vs,fs][lowf,mediumf,highf,lowi,mediumi,highi][min,max] int precision[2][6]; // [vs,fs][lowf...] - int maxVertexTextureUnits; - bool supportsETC2; bool supportsBC123; bool supportsBC45; diff --git a/Common/GPU/Vulkan/VulkanDescSet.cpp b/Common/GPU/Vulkan/VulkanDescSet.cpp index 7a0e3f4fb8..6148c41359 100644 --- a/Common/GPU/Vulkan/VulkanDescSet.cpp +++ b/Common/GPU/Vulkan/VulkanDescSet.cpp @@ -27,7 +27,6 @@ void VulkanDescSetPool::Create(VulkanContext *vulkan, const BindingType *binding case BindingType::COMBINED_IMAGE_SAMPLER: combinedImageSamplerCount++; break; case BindingType::UNIFORM_BUFFER_DYNAMIC_VERTEX: case BindingType::UNIFORM_BUFFER_DYNAMIC_ALL: uniformBufferDynamicCount++; break; - case BindingType::STORAGE_BUFFER_VERTEX: case BindingType::STORAGE_BUFFER_COMPUTE: storageBufferCount++; break; case BindingType::STORAGE_IMAGE_COMPUTE: storageImageCount++; break; case BindingType::UNIFORM_BUFFER_COMPUTE: uniformBufferCount++; break; diff --git a/Common/GPU/Vulkan/VulkanDescSet.h b/Common/GPU/Vulkan/VulkanDescSet.h index 17833db7c6..5f9e08675b 100644 --- a/Common/GPU/Vulkan/VulkanDescSet.h +++ b/Common/GPU/Vulkan/VulkanDescSet.h @@ -9,7 +9,6 @@ enum class BindingType { COMBINED_IMAGE_SAMPLER, UNIFORM_BUFFER_DYNAMIC_VERTEX, UNIFORM_BUFFER_DYNAMIC_ALL, - STORAGE_BUFFER_VERTEX, STORAGE_BUFFER_COMPUTE, STORAGE_IMAGE_COMPUTE, UNIFORM_BUFFER_COMPUTE, diff --git a/Common/GPU/Vulkan/VulkanImage.cpp b/Common/GPU/Vulkan/VulkanImage.cpp index 35cc082a92..a0fdb5cc31 100644 --- a/Common/GPU/Vulkan/VulkanImage.cpp +++ b/Common/GPU/Vulkan/VulkanImage.cpp @@ -284,9 +284,9 @@ void VulkanTexture::GenerateMips(VkCommandBuffer cmd, int firstMipToGenerate, bo } } -void VulkanTexture::EndCreate(VkCommandBuffer cmd, bool vertexTexture, VkPipelineStageFlags prevStage, VkImageLayout layout) { +void VulkanTexture::EndCreate(VkCommandBuffer cmd, VkPipelineStageFlags prevStage, VkImageLayout layout) { VulkanBarrierBatch batch; - VkImageMemoryBarrier *barrier = batch.Add(image_, prevStage, vertexTexture ? VK_PIPELINE_STAGE_VERTEX_SHADER_BIT : VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0); + VkImageMemoryBarrier *barrier = batch.Add(image_, prevStage, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0); barrier->subresourceRange.levelCount = numMips_; barrier->oldLayout = layout; barrier->newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; diff --git a/Common/GPU/Vulkan/VulkanImage.h b/Common/GPU/Vulkan/VulkanImage.h index d6a53ec11a..4c56ef99e2 100644 --- a/Common/GPU/Vulkan/VulkanImage.h +++ b/Common/GPU/Vulkan/VulkanImage.h @@ -43,7 +43,7 @@ public: void FinishCopyBatch(VkCommandBuffer cmd, TextureCopyBatch *copyBatch); void GenerateMips(VkCommandBuffer cmd, int firstMipToGenerate, bool fromCompute); - void EndCreate(VkCommandBuffer cmd, bool vertexTexture, VkPipelineStageFlags prevStage, VkImageLayout layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + void EndCreate(VkCommandBuffer cmd, VkPipelineStageFlags prevStage, VkImageLayout layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); // For updating levels after creation. Careful with the timelines! void PrepareForTransferDst(VkCommandBuffer cmd, int levels); diff --git a/Common/GPU/Vulkan/VulkanRenderManager.cpp b/Common/GPU/Vulkan/VulkanRenderManager.cpp index 50299f38ef..a960239ab0 100644 --- a/Common/GPU/Vulkan/VulkanRenderManager.cpp +++ b/Common/GPU/Vulkan/VulkanRenderManager.cpp @@ -1857,10 +1857,6 @@ VKRPipelineLayout *VulkanRenderManager::CreatePipelineLayout(BindingType *bindin bindings[i].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; bindings[i].stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT; break; - case BindingType::STORAGE_BUFFER_VERTEX: - bindings[i].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - bindings[i].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; - break; case BindingType::STORAGE_BUFFER_COMPUTE: bindings[i].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; bindings[i].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; @@ -2052,7 +2048,6 @@ void VKRPipelineLayout::FlushDescSets(VulkanContext *vulkan, int frame, QueuePro writes[numWrites].pBufferInfo = nullptr; numImages++; break; - case BindingType::STORAGE_BUFFER_VERTEX: case BindingType::STORAGE_BUFFER_COMPUTE: _dbg_assert_(data[i].buffer.buffer != VK_NULL_HANDLE); bufferInfo[numBuffers].buffer = data[i].buffer.buffer; diff --git a/Common/GPU/Vulkan/thin3d_vulkan.cpp b/Common/GPU/Vulkan/thin3d_vulkan.cpp index b34c4cd96c..c98b7611df 100644 --- a/Common/GPU/Vulkan/thin3d_vulkan.cpp +++ b/Common/GPU/Vulkan/thin3d_vulkan.cpp @@ -745,7 +745,7 @@ VulkanTexture *VKContext::GetNullTexture() { TextureCopyBatch batch; nullTexture_->CopyBufferToMipLevel(cmdInit, &batch, 0, w, h, 0, bindBuf, bindOffset, w); nullTexture_->FinishCopyBatch(cmdInit, &batch); - nullTexture_->EndCreate(cmdInit, false, VK_PIPELINE_STAGE_TRANSFER_BIT); + nullTexture_->EndCreate(cmdInit, VK_PIPELINE_STAGE_TRANSFER_BIT); } return nullTexture_; } @@ -851,7 +851,7 @@ bool VKTexture::Create(VkCommandBuffer cmd, VulkanBarrierBatch *postBarriers, Vu layout = VK_IMAGE_LAYOUT_GENERAL; } } - vkTex_->EndCreate(cmd, false, VK_PIPELINE_STAGE_TRANSFER_BIT, layout); + vkTex_->EndCreate(cmd, VK_PIPELINE_STAGE_TRANSFER_BIT, layout); return true; } @@ -957,7 +957,6 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread) caps_.coordConvention = CoordConvention::Vulkan; caps_.setMaxFrameLatencySupported = true; caps_.anisoSupported = vulkan->GetDeviceFeatures().enabled.standard.samplerAnisotropy != 0; - caps_.tesselationShaderSupported = vulkan->GetDeviceFeatures().enabled.standard.tessellationShader != 0; caps_.dualSourceBlend = vulkan->GetDeviceFeatures().enabled.standard.dualSrcBlend != 0; caps_.depthClampSupported = vulkan->GetDeviceFeatures().enabled.standard.depthClamp != 0; diff --git a/Common/GPU/thin3d.h b/Common/GPU/thin3d.h index 6c230bd385..7445fe2317 100644 --- a/Common/GPU/thin3d.h +++ b/Common/GPU/thin3d.h @@ -602,7 +602,6 @@ struct DeviceCaps { bool anisoSupported; bool depthRangeMinusOneToOne; // OpenGL style depth - bool tesselationShaderSupported; bool dualSourceBlend; bool logicOpSupported; bool depthClampSupported; diff --git a/GPU/Vulkan/TextureCacheVulkan.cpp b/GPU/Vulkan/TextureCacheVulkan.cpp index 1f651fe1a1..4b9937b375 100644 --- a/GPU/Vulkan/TextureCacheVulkan.cpp +++ b/GPU/Vulkan/TextureCacheVulkan.cpp @@ -918,7 +918,7 @@ void TextureCacheVulkan::BuildTexture(TexCacheEntry *const entry) { VK_PROFILE_END(vulkan, cmdInit, VK_PIPELINE_STAGE_TRANSFER_BIT); } - entry->vkTex->EndCreate(cmdInit, false, prevStage, layout); + entry->vkTex->EndCreate(cmdInit, prevStage, layout); VK_PROFILE_END(vulkan, cmdInit, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT); // Signal that we support depth textures so use it as one.