mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-14 06:50:29 +02:00
Revert "Remove unnecessary bindings from compute shader descriptor layout"
This reverts commit 090efb9513.
This commit is contained in:
1 parent
61e76fcf68
commit
799827e9fb
3 files changed
+46
-12
No files matched your search
@@ -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), ¶ms);
|
||||
|
||||
+44
-10
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user