Revert "Remove unnecessary bindings from compute shader descriptor layout"

This reverts commit 090efb9513.
This commit is contained in:
Henrik Rydgård committed 2026-04-23 11:19:57 +02:00
1 parent 61e76fcf68
commit 799827e9fb
3 files changed
+46 -12

No files matched your search

+1 -1
View File
@@ -479,7 +479,7 @@ bool TextureCacheVulkan::RunMultipassCompute(VulkanContext *vulkan, VkCommandBuf
stage.useFinalOutputSize ? dstWidth : srcWidth * stage.dstWidthScale,
stage.useFinalOutputSize ? dstHeight : srcHeight * stage.dstHeightScale,
};
VkDescriptorSet stageSet = computeShaderManager_.GetDescriptorSet(outputView, inputBuffer, inputOffset, inputRange);
VkDescriptorSet stageSet = computeShaderManager_.GetDescriptorSet(outputView, inputBuffer, inputOffset, inputRange, VK_NULL_HANDLE, 0, 0, inputImage);
vkCmdBindPipeline(cmdInit, VK_PIPELINE_BIND_POINT_COMPUTE, computeShaderManager_.GetPipeline(multipassCS_[stage.shaderIndex]));
vkCmdBindDescriptorSets(cmdInit, VK_PIPELINE_BIND_POINT_COMPUTE, computeShaderManager_.GetPipelineLayout(), 0, 1, &stageSet, 0, nullptr);
vkCmdPushConstants(cmdInit, computeShaderManager_.GetPipelineLayout(), VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(params), &params);
+44 -10
View File
@@ -39,11 +39,6 @@ const VkComponentMapping VULKAN_1555_SWIZZLE = { VK_COMPONENT_SWIZZLE_B, VK_COMP
const VkComponentMapping VULKAN_565_SWIZZLE = { VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_IDENTITY };
const VkComponentMapping VULKAN_8888_SWIZZLE = { VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY };
static const BindingType bindingTypes[] = {
BindingType::STORAGE_IMAGE_COMPUTE,
BindingType::STORAGE_BUFFER_COMPUTE,
};
VkPresentModeKHR ConfigPresentModeToVulkan(Draw::DrawContext *draw) {
g_frameTiming.ComputePresentMode(draw, false);
Draw::PresentMode presentMode = g_frameTiming.PresentMode();
@@ -112,7 +107,14 @@ void VulkanComputeShaderManager::InitDeviceObjects(Draw::DrawContext *draw) {
VkResult res = vkCreatePipelineCache(vulkan_->GetDevice(), &pc, nullptr, &pipelineCache_);
_assert_(VK_SUCCESS == res);
VkDescriptorSetLayoutBinding bindings[ARRAY_SIZE(bindingTypes)] = {};
static const BindingType bindingTypes[4] = {
BindingType::STORAGE_IMAGE_COMPUTE,
BindingType::STORAGE_BUFFER_COMPUTE,
BindingType::STORAGE_BUFFER_COMPUTE,
BindingType::STORAGE_IMAGE_COMPUTE,
};
VkDescriptorSetLayoutBinding bindings[4] = {};
bindings[0].descriptorCount = 1;
bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
bindings[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
@@ -121,6 +123,14 @@ void VulkanComputeShaderManager::InitDeviceObjects(Draw::DrawContext *draw) {
bindings[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
bindings[1].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
bindings[1].binding = 1;
bindings[2].descriptorCount = 1;
bindings[2].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
bindings[2].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
bindings[2].binding = 2;
bindings[3].descriptorCount = 1;
bindings[3].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
bindings[3].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
bindings[3].binding = 3;
VkDevice device = vulkan_->GetDevice();
@@ -171,7 +181,7 @@ void VulkanComputeShaderManager::DestroyDeviceObjects() {
}
}
VkDescriptorSet VulkanComputeShaderManager::GetDescriptorSet(VkImageView image, VkBuffer buffer, VkDeviceSize bufferOffset, VkDeviceSize bufferRange) {
VkDescriptorSet VulkanComputeShaderManager::GetDescriptorSet(VkImageView image, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize range, VkBuffer buffer2, VkDeviceSize offset2, VkDeviceSize range2, VkImageView image2) {
int curFrame = vulkan_->GetCurFrame();
FrameData &frameData = frameData_[curFrame];
frameData.descPoolUsed = true;
@@ -179,7 +189,7 @@ VkDescriptorSet VulkanComputeShaderManager::GetDescriptorSet(VkImageView image,
frameData.descPool.Allocate(&desc, 1, &descriptorSetLayout_);
_assert_(desc != VK_NULL_HANDLE);
VkWriteDescriptorSet writes[2]{};
VkWriteDescriptorSet writes[4]{};
int n = 0;
VkDescriptorImageInfo imageInfo[2] = {};
VkDescriptorBufferInfo bufferInfo[2] = {};
@@ -197,8 +207,8 @@ VkDescriptorSet VulkanComputeShaderManager::GetDescriptorSet(VkImageView image,
}
if (buffer) {
bufferInfo[0].buffer = buffer;
bufferInfo[0].offset = bufferOffset;
bufferInfo[0].range = bufferRange;
bufferInfo[0].offset = offset;
bufferInfo[0].range = range;
writes[n].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writes[n].dstBinding = 1;
writes[n].pBufferInfo = &bufferInfo[0];
@@ -207,6 +217,30 @@ VkDescriptorSet VulkanComputeShaderManager::GetDescriptorSet(VkImageView image,
writes[n].dstSet = desc;
n++;
}
if (buffer2) {
bufferInfo[1].buffer = buffer2;
bufferInfo[1].offset = offset2;
bufferInfo[1].range = range2;
writes[n].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writes[n].dstBinding = 2;
writes[n].pBufferInfo = &bufferInfo[1];
writes[n].descriptorCount = 1;
writes[n].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
writes[n].dstSet = desc;
n++;
}
if (image2) {
imageInfo[1].imageLayout = VK_IMAGE_LAYOUT_GENERAL;
imageInfo[1].imageView = image2;
imageInfo[1].sampler = VK_NULL_HANDLE;
writes[n].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writes[n].dstBinding = 3;
writes[n].pImageInfo = &imageInfo[1];
writes[n].descriptorCount = 1;
writes[n].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
writes[n].dstSet = desc;
n++;
}
vkUpdateDescriptorSets(vulkan_->GetDevice(), n, writes, 0, nullptr);
return desc;
}
+1 -1
View File
@@ -55,7 +55,7 @@ public:
}
// Note: This doesn't cache. The descriptor is for immediate use only.
VkDescriptorSet GetDescriptorSet(VkImageView image, VkBuffer buffer, VkDeviceSize bufferOffset, VkDeviceSize bufferRange);
VkDescriptorSet GetDescriptorSet(VkImageView image, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize range, VkBuffer buffer2 = VK_NULL_HANDLE, VkDeviceSize offset2 = 0, VkDeviceSize range2 = 0, VkImageView image2 = VK_NULL_HANDLE);
// This of course caches though.
VkPipeline GetPipeline(VkShaderModule cs);