vulkan: fix clipping (alpilot black screen)
This commit is contained in:
parent
cd49b32473
commit
21b2eb3e5d
|
@ -23,10 +23,7 @@
|
|||
#include "vulkan_context.h"
|
||||
|
||||
BufferData::BufferData(vk::DeviceSize size, vk::BufferUsageFlags usage, vk::MemoryPropertyFlags propertyFlags)
|
||||
: bufferSize(size)
|
||||
#if !defined(NDEBUG)
|
||||
, m_usage(usage), m_propertyFlags(propertyFlags)
|
||||
#endif
|
||||
: bufferSize(size), m_usage(usage), m_propertyFlags(propertyFlags)
|
||||
{
|
||||
VulkanContext *context = VulkanContext::Instance();
|
||||
buffer = context->GetDevice().createBufferUnique(vk::BufferCreateInfo(vk::BufferCreateFlags(), size, usage));
|
||||
|
|
|
@ -78,9 +78,7 @@ struct BufferData
|
|||
vk::DeviceSize bufferSize;
|
||||
Allocation allocation;
|
||||
|
||||
#if !defined(NDEBUG)
|
||||
private:
|
||||
vk::BufferUsageFlags m_usage;
|
||||
vk::MemoryPropertyFlags m_propertyFlags;
|
||||
#endif
|
||||
};
|
||||
|
|
|
@ -149,15 +149,17 @@ void BaseDrawer::SetBaseScissor()
|
|||
baseScissor = vk::Rect2D(vk::Offset2D(0, 0),
|
||||
vk::Extent2D(screen_width, screen_height));
|
||||
}
|
||||
currentScissor = { 0, 0, 0, 0 };
|
||||
}
|
||||
|
||||
void Drawer::DrawPoly(const vk::CommandBuffer& cmdBuffer, u32 listType, bool sortTriangles, const PolyParam& poly, u32 first, u32 count)
|
||||
{
|
||||
vk::Rect2D scissorRect;
|
||||
TileClipping tileClip = SetTileClip(poly.tileclip, scissorRect);
|
||||
if (tileClip != TileClipping::Outside)
|
||||
scissorRect = baseScissor;
|
||||
SetScissor(cmdBuffer, scissorRect);
|
||||
if (tileClip == TileClipping::Outside)
|
||||
SetScissor(cmdBuffer, scissorRect);
|
||||
else
|
||||
SetScissor(cmdBuffer, baseScissor);
|
||||
|
||||
float trilinearAlpha = 1.f;
|
||||
if (poly.tsp.FilterMode > 1 && poly.pcw.Texture && listType != ListType_Punch_Through)
|
||||
|
|
|
@ -27,9 +27,10 @@ void OITDrawer::DrawPoly(const vk::CommandBuffer& cmdBuffer, u32 listType, bool
|
|||
{
|
||||
vk::Rect2D scissorRect;
|
||||
TileClipping tileClip = SetTileClip(poly.tileclip, scissorRect);
|
||||
if (tileClip != TileClipping::Outside)
|
||||
scissorRect = baseScissor;
|
||||
SetScissor(cmdBuffer, scissorRect);
|
||||
if (tileClip == TileClipping::Outside)
|
||||
SetScissor(cmdBuffer, scissorRect);
|
||||
else
|
||||
SetScissor(cmdBuffer, baseScissor);
|
||||
|
||||
float trilinearAlpha = 1.f;
|
||||
if (poly.tsp.FilterMode > 1 && poly.pcw.Texture && listType != ListType_Punch_Through)
|
||||
|
@ -95,6 +96,7 @@ void OITDrawer::DrawModifierVolumes(const vk::CommandBuffer& cmdBuffer, int firs
|
|||
|
||||
vk::Buffer buffer = GetMainBuffer(0)->buffer.get();
|
||||
cmdBuffer.bindVertexBuffers(0, 1, &buffer, &offsets.modVolOffset);
|
||||
SetScissor(cmdBuffer, baseScissor);
|
||||
|
||||
ModifierVolumeParam* params = Translucent ? &pvrrc.global_param_mvo_tr.head()[first] : &pvrrc.global_param_mvo.head()[first];
|
||||
|
||||
|
@ -309,6 +311,7 @@ bool OITDrawer::Draw(const Texture *fogTexture)
|
|||
// Final subpass
|
||||
cmdBuffer.nextSubpass(vk::SubpassContents::eInline);
|
||||
GetCurrentDescSet().BindColorInputDescSet(cmdBuffer, (pvrrc.render_passes.used() - 1 - render_pass) % 2);
|
||||
SetScissor(cmdBuffer, baseScissor);
|
||||
|
||||
if (!oitBuffers->isFirstFrameAfterInit())
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue