mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Fix indexed drawing, flip rendering the right side up, enable culling
This commit is contained in:
parent
6141c3651b
commit
6b8c004561
5 changed files with 7 additions and 18 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue