From 6b8c0045612dfa23058fd5ecd1a9c0dd25228ab4 Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Sat, 9 Jan 2016 12:37:05 +0100 Subject: [PATCH] Fix indexed drawing, flip rendering the right side up, enable culling --- GPU/Vulkan/DrawEngineVulkan.cpp | 2 +- GPU/Vulkan/GPU_Vulkan.cpp | 3 +-- GPU/Vulkan/ShaderManagerVulkan.cpp | 15 ++++----------- GPU/Vulkan/StateMappingVulkan.cpp | 3 --- GPU/Vulkan/TextureCacheVulkan.cpp | 2 +- 5 files changed, 7 insertions(+), 18 deletions(-) diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 72d7de2b34..f1523df757 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -544,7 +544,7 @@ void DrawEngineVulkan::DoFlush(VkCommandBuffer cmd) { // Might want to separate vertices out into a different push buffer in that case. vkCmdBindVertexBuffers(cmd_, 0, 1, buf, offsets); vkCmdBindIndexBuffer(cmd_, buf[0], ibOffset, VK_INDEX_TYPE_UINT16); - vkCmdDrawIndexed(cmd_, maxIndex, 1, 0, 0, 0); + vkCmdDrawIndexed(cmd_, indexGen.VertexCount(), 1, 0, 0, 0); } else { vkCmdBindVertexBuffers(cmd_, 0, 1, buf, offsets); vkCmdDraw(cmd_, vertexCount, 1, 0, 0); diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index c49fa09d5d..29e9d6f547 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -501,9 +501,8 @@ void GPU_Vulkan::BeginHostFrame() { } else if (dumpThisFrame_) { dumpThisFrame_ = false; } - shaderManager_->DirtyShader(); - // Not sure if this is really needed. + shaderManager_->DirtyShader(); shaderManager_->DirtyUniform(DIRTY_ALL); framebufferManager_.BeginFrame(); diff --git a/GPU/Vulkan/ShaderManagerVulkan.cpp b/GPU/Vulkan/ShaderManagerVulkan.cpp index 0ab32e7f0d..a51fedd901 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.cpp +++ b/GPU/Vulkan/ShaderManagerVulkan.cpp @@ -182,21 +182,15 @@ ShaderManagerVulkan::~ShaderManagerVulkan() { } uint32_t ShaderManagerVulkan::PushBaseBuffer(VulkanPushBuffer *dest) { - if (globalDirty_ & DIRTY_BASE_UNIFORMS) - BaseUpdateUniforms(globalDirty_); return dest->PushAligned(&ub_base, sizeof(ub_base), uboAlignment_); } uint32_t ShaderManagerVulkan::PushLightBuffer(VulkanPushBuffer *dest) { - if (globalDirty_ & DIRTY_BASE_UNIFORMS) - BaseUpdateUniforms(globalDirty_); return dest->PushAligned(&ub_lights, sizeof(ub_lights), uboAlignment_); } // TODO: Only push half the bone buffer if we only have four bones. uint32_t ShaderManagerVulkan::PushBoneBuffer(VulkanPushBuffer *dest) { - if (globalDirty_ & DIRTY_BASE_UNIFORMS) - BaseUpdateUniforms(globalDirty_); return dest->PushAligned(&ub_bones, sizeof(ub_bones), uboAlignment_); } @@ -255,7 +249,7 @@ void ShaderManagerVulkan::BaseUpdateUniforms(int dirtyUniforms) { memcpy(&flippedMatrix, gstate.projMatrix, 16 * sizeof(float)); const bool invertedY = gstate_c.vpHeight < 0; - if (!invertedY) { + if (invertedY) { flippedMatrix[1] = -flippedMatrix[1]; flippedMatrix[5] = -flippedMatrix[5]; flippedMatrix[9] = -flippedMatrix[9]; @@ -401,7 +395,7 @@ void ShaderManagerVulkan::LightUpdateUniforms(int dirtyUniforms) { Uint8x3ToFloat4(ub_lights.materialEmissive, gstate.materialemissive); } if (dirtyUniforms & DIRTY_MATSPECULAR) { - Uint8x3ToFloat4_Alpha(ub_lights.materialEmissive, gstate.materialspecular, getFloat24(gstate.materialspecularcoef)); + Uint8x3ToFloat4_Alpha(ub_lights.materialSpecular, gstate.materialspecular, getFloat24(gstate.materialspecularcoef)); } for (int i = 0; i < 4; i++) { @@ -449,10 +443,10 @@ void ShaderManagerVulkan::Clear() { } fsCache_.clear(); vsCache_.clear(); - globalDirty_ = 0xFFFFFFFF; lastFSID_.clear(); lastVSID_.clear(); DirtyShader(); + DirtyUniform(0xFFFFFFFF); } void ShaderManagerVulkan::ClearCache(bool deleteThem) { @@ -466,7 +460,6 @@ void ShaderManagerVulkan::DirtyShader() { lastVSID_.clear(); lastVShader_ = nullptr; lastFShader_ = nullptr; - globalDirty_ = 0xFFFFFFFF; } void ShaderManagerVulkan::DirtyLastShader() { // disables vertex arrays @@ -485,8 +478,8 @@ void ShaderManagerVulkan::UpdateUniforms() { void ShaderManagerVulkan::GetShaders(int prim, u32 vertType, VulkanVertexShader **vshader, VulkanFragmentShader **fshader, bool useHWTransform) { ShaderID VSID; - ComputeVertexShaderID(&VSID, vertType, useHWTransform); ShaderID FSID; + ComputeVertexShaderID(&VSID, vertType, useHWTransform); ComputeFragmentShaderID(&FSID); // Just update uniforms if this is the same shader as last time. diff --git a/GPU/Vulkan/StateMappingVulkan.cpp b/GPU/Vulkan/StateMappingVulkan.cpp index acd959c8e2..18e0a2e14b 100644 --- a/GPU/Vulkan/StateMappingVulkan.cpp +++ b/GPU/Vulkan/StateMappingVulkan.cpp @@ -188,9 +188,6 @@ void ConvertStateToVulkanKey(FramebufferManagerVulkan &fbManager, int prim, Vulk bool wantCull = !gstate.isModeThrough() && prim != GE_PRIM_RECTANGLES && gstate.isCullEnabled(); key.cullMode = wantCull ? (gstate.getCullMode() ? VK_CULL_MODE_FRONT_BIT : VK_CULL_MODE_BACK_BIT) : VK_CULL_MODE_NONE; - // TODO: Remove (For debugging) - key.cullMode = VK_CULL_MODE_NONE; - // Depth Test if (gstate.isDepthTestEnabled()) { key.depthTestEnable = true; diff --git a/GPU/Vulkan/TextureCacheVulkan.cpp b/GPU/Vulkan/TextureCacheVulkan.cpp index 4e52597a67..ecc44dcf3a 100644 --- a/GPU/Vulkan/TextureCacheVulkan.cpp +++ b/GPU/Vulkan/TextureCacheVulkan.cpp @@ -93,7 +93,7 @@ VkSampler SamplerCache::GetOrCreateSampler(const SamplerCacheKey &key) { samp.minFilter = key.minFilt ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; // TODO: Aniso samp.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; // key.4) ? ((key.magFilt & 2) ? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST) : VK_SAMPLER_MIPMAP_MODE_BASE; samp.maxAnisotropy = 1.0f; - samp.maxLod = 1000.0f; + samp.maxLod = 0.0f; // 1000.0f; samp.minLod = 0.0f; samp.unnormalizedCoordinates = false; samp.mipLodBias = 0.0f;