mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-26 23:10:38 +00:00
parent
506d7249a2
commit
9f9881dfe3
@ -114,3 +114,22 @@ void VulkanBarrier::TransitionImageAuto(
|
||||
imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
}
|
||||
|
||||
void TransitionImageLayout2(VkCommandBuffer cmd, VkImage image, int baseMip, int numMipLevels, int numLayers, VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
|
||||
VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask) {
|
||||
VkImageMemoryBarrier image_memory_barrier{ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER };
|
||||
image_memory_barrier.srcAccessMask = srcAccessMask;
|
||||
image_memory_barrier.dstAccessMask = dstAccessMask;
|
||||
image_memory_barrier.oldLayout = oldImageLayout;
|
||||
image_memory_barrier.newLayout = newImageLayout;
|
||||
image_memory_barrier.image = image;
|
||||
image_memory_barrier.subresourceRange.aspectMask = aspectMask;
|
||||
image_memory_barrier.subresourceRange.baseMipLevel = baseMip;
|
||||
image_memory_barrier.subresourceRange.levelCount = numMipLevels;
|
||||
image_memory_barrier.subresourceRange.layerCount = numLayers; // We never use more than one layer, and old Mali drivers have problems with VK_REMAINING_ARRAY_LAYERS/VK_REMAINING_MIP_LEVELS.
|
||||
image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
vkCmdPipelineBarrier(cmd, srcStageMask, dstStageMask, 0, 0, nullptr, 0, nullptr, 1, &image_memory_barrier);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ class VulkanContext;
|
||||
|
||||
class VulkanBarrierBatch {
|
||||
public:
|
||||
VulkanBarrierBatch() : imageBarriers_(4) {}
|
||||
~VulkanBarrierBatch();
|
||||
|
||||
VkImageMemoryBarrier *Add(VkImage image, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags) {
|
||||
@ -80,3 +81,9 @@ private:
|
||||
FastVec<VkImageMemoryBarrier> imageBarriers_;
|
||||
VkDependencyFlags dependencyFlags_ = 0;
|
||||
};
|
||||
|
||||
// Detailed control, but just a single image. Use the barrier batch when possible.
|
||||
void TransitionImageLayout2(VkCommandBuffer cmd, VkImage image, int baseMip, int mipLevels, int numLayers, VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
|
||||
VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask);
|
||||
|
@ -1494,25 +1494,6 @@ bool VulkanContext::CreateShaderModule(const std::vector<uint32_t> &spirv, VkSha
|
||||
}
|
||||
}
|
||||
|
||||
void TransitionImageLayout2(VkCommandBuffer cmd, VkImage image, int baseMip, int numMipLevels, int numLayers, VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
|
||||
VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask) {
|
||||
VkImageMemoryBarrier image_memory_barrier{ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER };
|
||||
image_memory_barrier.srcAccessMask = srcAccessMask;
|
||||
image_memory_barrier.dstAccessMask = dstAccessMask;
|
||||
image_memory_barrier.oldLayout = oldImageLayout;
|
||||
image_memory_barrier.newLayout = newImageLayout;
|
||||
image_memory_barrier.image = image;
|
||||
image_memory_barrier.subresourceRange.aspectMask = aspectMask;
|
||||
image_memory_barrier.subresourceRange.baseMipLevel = baseMip;
|
||||
image_memory_barrier.subresourceRange.levelCount = numMipLevels;
|
||||
image_memory_barrier.subresourceRange.layerCount = numLayers; // We never use more than one layer, and old Mali drivers have problems with VK_REMAINING_ARRAY_LAYERS/VK_REMAINING_MIP_LEVELS.
|
||||
image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
vkCmdPipelineBarrier(cmd, srcStageMask, dstStageMask, 0, 0, nullptr, 0, nullptr, 1, &image_memory_barrier);
|
||||
}
|
||||
|
||||
EShLanguage FindLanguage(const VkShaderStageFlagBits shader_type) {
|
||||
switch (shader_type) {
|
||||
case VK_SHADER_STAGE_VERTEX_BIT:
|
||||
|
@ -498,12 +498,6 @@ private:
|
||||
VmaAllocator allocator_ = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
// Detailed control.
|
||||
void TransitionImageLayout2(VkCommandBuffer cmd, VkImage image, int baseMip, int mipLevels, int numLayers, VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
|
||||
VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask);
|
||||
|
||||
// GLSL compiler
|
||||
void init_glslang();
|
||||
void finalize_glslang();
|
||||
|
@ -73,7 +73,7 @@ static bool HashISOFile(ISOFileSystem *fs, const std::string filename, md5_conte
|
||||
return false;
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> buffer(new uint8_t[sz]);
|
||||
auto buffer = std::make_unique<uint8_t[]>(sz);
|
||||
if (fs->ReadFile(handle, buffer.get(), sz) != sz) {
|
||||
return false;
|
||||
}
|
||||
@ -84,13 +84,15 @@ static bool HashISOFile(ISOFileSystem *fs, const std::string filename, md5_conte
|
||||
}
|
||||
|
||||
// Consumes the blockDevice.
|
||||
std::string ComputePSPHash(BlockDevice *blockDevice) {
|
||||
// If failed, returns an empty string, otherwise a 32-character string with the hash in hex format.
|
||||
static std::string ComputePSPHash(BlockDevice *blockDevice) {
|
||||
md5_context md5;
|
||||
ppsspp_md5_starts(&md5);
|
||||
|
||||
SequentialHandleAllocator alloc;
|
||||
{
|
||||
std::unique_ptr<ISOFileSystem> fs(new ISOFileSystem(&alloc, blockDevice));
|
||||
// ISOFileSystem takes owneship of the blockDevice here.
|
||||
auto fs = std::make_unique<ISOFileSystem>(&alloc, blockDevice);
|
||||
if (!HashISOFile(fs.get(), "PSP_GAME/PARAM.SFO", &md5)) {
|
||||
return std::string();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user