mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +00:00
Persistently map filter chain UBO.
This commit is contained in:
parent
10e864b26b
commit
c0e752c53c
@ -175,6 +175,7 @@ class Buffer
|
|||||||
VkBuffer buffer;
|
VkBuffer buffer;
|
||||||
VkDeviceMemory memory;
|
VkDeviceMemory memory;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
void *mapped = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StaticTexture
|
class StaticTexture
|
||||||
@ -891,6 +892,7 @@ bool vulkan_filter_chain::init_ubo()
|
|||||||
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
common.ubo_mapped = static_cast<uint8_t*>(common.ubo->map());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,8 +953,6 @@ void vulkan_filter_chain::build_offscreen_passes(VkCommandBuffer cmd,
|
|||||||
update_history_info();
|
update_history_info();
|
||||||
update_feedback_info();
|
update_feedback_info();
|
||||||
|
|
||||||
common.ubo_mapped = static_cast<uint8_t*>(common.ubo->map());
|
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
DeferredDisposer disposer(deferred_calls[current_sync_index]);
|
DeferredDisposer disposer(deferred_calls[current_sync_index]);
|
||||||
const Texture original = {
|
const Texture original = {
|
||||||
@ -1074,9 +1074,6 @@ void vulkan_filter_chain::build_viewport_pass(
|
|||||||
passes.back()->build_commands(disposer, cmd,
|
passes.back()->build_commands(disposer, cmd,
|
||||||
original, source, vp, mvp);
|
original, source, vp, mvp);
|
||||||
|
|
||||||
common.ubo->unmap();
|
|
||||||
common.ubo_mapped = nullptr;
|
|
||||||
|
|
||||||
// If we need to keep old frames, copy it after fragment is complete.
|
// If we need to keep old frames, copy it after fragment is complete.
|
||||||
// TODO: We can improve pipelining by figuring out which pass is the last that reads from
|
// TODO: We can improve pipelining by figuring out which pass is the last that reads from
|
||||||
// the history and dispatch the copy earlier.
|
// the history and dispatch the copy earlier.
|
||||||
@ -1154,19 +1151,27 @@ Buffer::Buffer(VkDevice device,
|
|||||||
|
|
||||||
void *Buffer::map()
|
void *Buffer::map()
|
||||||
{
|
{
|
||||||
void *ptr = nullptr;
|
if (!mapped)
|
||||||
if (vkMapMemory(device, memory, 0, size, 0, &ptr) == VK_SUCCESS)
|
{
|
||||||
return ptr;
|
if (vkMapMemory(device, memory, 0, size, 0, &mapped) == VK_SUCCESS)
|
||||||
return nullptr;
|
return mapped;
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return mapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buffer::unmap()
|
void Buffer::unmap()
|
||||||
{
|
{
|
||||||
vkUnmapMemory(device, memory);
|
if (mapped)
|
||||||
|
vkUnmapMemory(device, memory);
|
||||||
|
mapped = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer::~Buffer()
|
Buffer::~Buffer()
|
||||||
{
|
{
|
||||||
|
if (mapped)
|
||||||
|
unmap();
|
||||||
if (memory != VK_NULL_HANDLE)
|
if (memory != VK_NULL_HANDLE)
|
||||||
vkFreeMemory(device, memory, nullptr);
|
vkFreeMemory(device, memory, nullptr);
|
||||||
if (buffer != VK_NULL_HANDLE)
|
if (buffer != VK_NULL_HANDLE)
|
||||||
@ -1807,6 +1812,7 @@ void Pass::build_semantics(VkDescriptorSet set, uint8_t *buffer,
|
|||||||
current_framebuffer_size.width, current_framebuffer_size.height);
|
current_framebuffer_size.width, current_framebuffer_size.height);
|
||||||
build_semantic_vec4(buffer, SLANG_SEMANTIC_FINAL_VIEWPORT,
|
build_semantic_vec4(buffer, SLANG_SEMANTIC_FINAL_VIEWPORT,
|
||||||
unsigned(current_viewport.width), unsigned(current_viewport.height));
|
unsigned(current_viewport.width), unsigned(current_viewport.height));
|
||||||
|
|
||||||
build_semantic_uint(buffer, SLANG_SEMANTIC_FRAME_COUNT,
|
build_semantic_uint(buffer, SLANG_SEMANTIC_FRAME_COUNT,
|
||||||
frame_count_period ? uint32_t(frame_count % frame_count_period) : uint32_t(frame_count));
|
frame_count_period ? uint32_t(frame_count % frame_count_period) : uint32_t(frame_count));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user