mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-06-03 05:05:00 -06:00
Vulkan: Remove unused transform feedback extension path (#1919)
This commit is contained in:
parent
7ff99a5e13
commit
dfb9a99c3e
@ -192,11 +192,6 @@ VKFUNC_DEVICE(vkCmdEndRenderingKHR);
|
|||||||
// khr_present_wait
|
// khr_present_wait
|
||||||
VKFUNC_DEVICE(vkWaitForPresentKHR);
|
VKFUNC_DEVICE(vkWaitForPresentKHR);
|
||||||
|
|
||||||
// transform feedback extension
|
|
||||||
VKFUNC_DEVICE(vkCmdBindTransformFeedbackBuffersEXT);
|
|
||||||
VKFUNC_DEVICE(vkCmdBeginTransformFeedbackEXT);
|
|
||||||
VKFUNC_DEVICE(vkCmdEndTransformFeedbackEXT);
|
|
||||||
|
|
||||||
// query
|
// query
|
||||||
VKFUNC_DEVICE(vkCreateQueryPool);
|
VKFUNC_DEVICE(vkCreateQueryPool);
|
||||||
VKFUNC_DEVICE(vkDestroyQueryPool);
|
VKFUNC_DEVICE(vkDestroyQueryPool);
|
||||||
|
|||||||
@ -646,10 +646,7 @@ VulkanRenderer::VulkanRenderer()
|
|||||||
deviceFeatures.robustBufferAccess = VK_TRUE;
|
deviceFeatures.robustBufferAccess = VK_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_featureControl.mode.useTFEmulationViaSSBO)
|
|
||||||
{
|
|
||||||
deviceFeatures.vertexPipelineStoresAndAtomics = true;
|
deviceFeatures.vertexPipelineStoresAndAtomics = true;
|
||||||
}
|
|
||||||
|
|
||||||
void* deviceExtensionFeatures = nullptr;
|
void* deviceExtensionFeatures = nullptr;
|
||||||
|
|
||||||
@ -787,7 +784,8 @@ VulkanRenderer::VulkanRenderer()
|
|||||||
m_textureReadbackBufferPtr = (uint8*)bufferPtr;
|
m_textureReadbackBufferPtr = (uint8*)bufferPtr;
|
||||||
|
|
||||||
// transform feedback ringbuffer
|
// transform feedback ringbuffer
|
||||||
memoryManager->CreateBuffer(LatteStreamout_GetRingBufferSize(), VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | (m_featureControl.mode.useTFEmulationViaSSBO ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT : 0), 0, m_xfbRingBuffer, m_xfbRingBufferMemory);
|
VkBufferUsageFlags xfbRingBufferUsage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
|
||||||
|
memoryManager->CreateBuffer(LatteStreamout_GetRingBufferSize(), xfbRingBufferUsage, 0, m_xfbRingBuffer, m_xfbRingBufferMemory);
|
||||||
|
|
||||||
// occlusion query result buffer
|
// occlusion query result buffer
|
||||||
if (!memoryManager->CreateBuffer(OCCLUSION_QUERY_POOL_SIZE * sizeof(uint64), VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT, m_occlusionQueries.bufferQueryResults, m_occlusionQueries.memoryQueryResults))
|
if (!memoryManager->CreateBuffer(OCCLUSION_QUERY_POOL_SIZE * sizeof(uint64), VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT, m_occlusionQueries.bufferQueryResults, m_occlusionQueries.memoryQueryResults))
|
||||||
@ -1367,7 +1365,6 @@ bool VulkanRenderer::CheckDeviceExtensionSupport(const VkPhysicalDevice device,
|
|||||||
}
|
}
|
||||||
|
|
||||||
info.deviceExtensions.tooling_info = isExtensionAvailable(VK_EXT_TOOLING_INFO_EXTENSION_NAME);
|
info.deviceExtensions.tooling_info = isExtensionAvailable(VK_EXT_TOOLING_INFO_EXTENSION_NAME);
|
||||||
info.deviceExtensions.transform_feedback = isExtensionAvailable(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME);
|
|
||||||
info.deviceExtensions.depth_range_unrestricted = isExtensionAvailable(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME);
|
info.deviceExtensions.depth_range_unrestricted = isExtensionAvailable(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME);
|
||||||
info.deviceExtensions.nv_fill_rectangle = isExtensionAvailable(VK_NV_FILL_RECTANGLE_EXTENSION_NAME);
|
info.deviceExtensions.nv_fill_rectangle = isExtensionAvailable(VK_NV_FILL_RECTANGLE_EXTENSION_NAME);
|
||||||
info.deviceExtensions.pipeline_feedback = isExtensionAvailable(VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME);
|
info.deviceExtensions.pipeline_feedback = isExtensionAvailable(VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME);
|
||||||
@ -3714,46 +3711,14 @@ void VulkanRenderer::streamout_setupXfbBuffer(uint32 bufferIndex, sint32 ringBuf
|
|||||||
|
|
||||||
void VulkanRenderer::streamout_begin()
|
void VulkanRenderer::streamout_begin()
|
||||||
{
|
{
|
||||||
if (m_featureControl.mode.useTFEmulationViaSSBO)
|
|
||||||
return;
|
|
||||||
if (m_state.hasActiveXfb == false)
|
|
||||||
m_state.hasActiveXfb = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VulkanRenderer::streamout_applyTransformFeedbackState()
|
|
||||||
{
|
|
||||||
if (m_featureControl.mode.useTFEmulationViaSSBO)
|
|
||||||
return;
|
|
||||||
cemu_assert_debug(m_state.hasActiveXfb == false);
|
|
||||||
if (m_state.hasActiveXfb)
|
|
||||||
{
|
|
||||||
// set buffers
|
|
||||||
for (sint32 i = 0; i < LATTE_NUM_STREAMOUT_BUFFER; i++)
|
|
||||||
{
|
|
||||||
if (m_streamoutState.buffer[i].enabled)
|
|
||||||
{
|
|
||||||
VkBuffer tfBuffer = m_xfbRingBuffer;
|
|
||||||
VkDeviceSize tfBufferOffset = m_streamoutState.buffer[i].ringBufferOffset;
|
|
||||||
VkDeviceSize tfBufferSize = VK_WHOLE_SIZE;
|
|
||||||
vkCmdBindTransformFeedbackBuffersEXT(m_state.currentCommandBuffer, i, 1, &tfBuffer, &tfBufferOffset, &tfBufferSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// begin transform feedback
|
|
||||||
vkCmdBeginTransformFeedbackEXT(m_state.currentCommandBuffer, 0, 0, nullptr, nullptr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanRenderer::streamout_rendererFinishDrawcall()
|
void VulkanRenderer::streamout_rendererFinishDrawcall()
|
||||||
{
|
{
|
||||||
if (m_state.hasActiveXfb)
|
|
||||||
{
|
|
||||||
vkCmdEndTransformFeedbackEXT(m_state.currentCommandBuffer, 0, 0, nullptr, nullptr);
|
|
||||||
m_streamoutState.buffer[0].enabled = false;
|
m_streamoutState.buffer[0].enabled = false;
|
||||||
m_streamoutState.buffer[1].enabled = false;
|
m_streamoutState.buffer[1].enabled = false;
|
||||||
m_streamoutState.buffer[2].enabled = false;
|
m_streamoutState.buffer[2].enabled = false;
|
||||||
m_streamoutState.buffer[3].enabled = false;
|
m_streamoutState.buffer[3].enabled = false;
|
||||||
m_state.hasActiveXfb = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -380,9 +380,6 @@ private:
|
|||||||
uint32 offset;
|
uint32 offset;
|
||||||
}currentVertexBinding[LATTE_MAX_VERTEX_BUFFERS]{};
|
}currentVertexBinding[LATTE_MAX_VERTEX_BUFFERS]{};
|
||||||
|
|
||||||
// transform feedback
|
|
||||||
bool hasActiveXfb{};
|
|
||||||
|
|
||||||
// index buffer
|
// index buffer
|
||||||
Renderer::INDEX_TYPE activeIndexType{};
|
Renderer::INDEX_TYPE activeIndexType{};
|
||||||
uint32 activeIndexBufferIndex{};
|
uint32 activeIndexBufferIndex{};
|
||||||
@ -442,7 +439,6 @@ private:
|
|||||||
{
|
{
|
||||||
// if using new optional extensions add to CheckDeviceExtensionSupport and CreateDeviceCreateInfo
|
// if using new optional extensions add to CheckDeviceExtensionSupport and CreateDeviceCreateInfo
|
||||||
bool tooling_info = false; // VK_EXT_tooling_info
|
bool tooling_info = false; // VK_EXT_tooling_info
|
||||||
bool transform_feedback = false;
|
|
||||||
bool depth_range_unrestricted = false;
|
bool depth_range_unrestricted = false;
|
||||||
bool nv_fill_rectangle = false; // NV_fill_rectangle
|
bool nv_fill_rectangle = false; // NV_fill_rectangle
|
||||||
bool pipeline_feedback = false;
|
bool pipeline_feedback = false;
|
||||||
@ -470,11 +466,6 @@ private:
|
|||||||
bool debug_utils = false; // VK_EXT_DEBUG_UTILS
|
bool debug_utils = false; // VK_EXT_DEBUG_UTILS
|
||||||
}instanceExtensions;
|
}instanceExtensions;
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
bool useTFEmulationViaSSBO = true; // emulate transform feedback via shader writes to a storage buffer
|
|
||||||
}mode;
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 minUniformBufferOffsetAlignment = 256;
|
uint32 minUniformBufferOffsetAlignment = 256;
|
||||||
@ -521,7 +512,10 @@ private:
|
|||||||
void DeleteFontTextures() override;
|
void DeleteFontTextures() override;
|
||||||
bool BeginFrame(bool mainWindow) override;
|
bool BeginFrame(bool mainWindow) override;
|
||||||
|
|
||||||
bool UseTFViaSSBO() const override { return m_featureControl.mode.useTFEmulationViaSSBO; }
|
bool UseTFViaSSBO() const override
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// drawcall emulation
|
// drawcall emulation
|
||||||
PipelineInfo* draw_createGraphicsPipeline(uint32 indexCount);
|
PipelineInfo* draw_createGraphicsPipeline(uint32 indexCount);
|
||||||
@ -567,7 +561,6 @@ private:
|
|||||||
// streamout
|
// streamout
|
||||||
void streamout_setupXfbBuffer(uint32 bufferIndex, sint32 ringBufferOffset, uint32 rangeAddr, uint32 rangeSize) override;
|
void streamout_setupXfbBuffer(uint32 bufferIndex, sint32 ringBufferOffset, uint32 rangeAddr, uint32 rangeSize) override;
|
||||||
void streamout_begin() override;
|
void streamout_begin() override;
|
||||||
void streamout_applyTransformFeedbackState();
|
|
||||||
void bufferCache_copyStreamoutToMainBuffer(uint32 srcOffset, uint32 dstOffset, uint32 size) override;
|
void bufferCache_copyStreamoutToMainBuffer(uint32 srcOffset, uint32 dstOffset, uint32 size) override;
|
||||||
void streamout_rendererFinishDrawcall() override;
|
void streamout_rendererFinishDrawcall() override;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user