vulkan: fix clipping (alpilot black screen)

This commit is contained in:
Flyinghead 2019-12-04 19:06:14 +01:00
parent cd49b32473
commit 21b2eb3e5d
4 changed files with 12 additions and 12 deletions

View File

@ -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));

View File

@ -78,9 +78,7 @@ struct BufferData
vk::DeviceSize bufferSize;
Allocation allocation;
#if !defined(NDEBUG)
private:
vk::BufferUsageFlags m_usage;
vk::MemoryPropertyFlags m_propertyFlags;
#endif
};

View File

@ -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)

View File

@ -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())
{