Shaders: Implement depth writing in fragment shaders.

We'll write <last color output reg + 2> to gl_FragDepth.
merge-requests/60/head
Subv 2018-08-20 21:57:56 +07:00
parent c4ce7e456a
commit e3bddf8137
1 changed files with 6 additions and 1 deletions

@ -918,7 +918,6 @@ private:
FragmentHeader header; FragmentHeader header;
std::memcpy(&header, program_code.data(), PROGRAM_HEADER_SIZE); std::memcpy(&header, program_code.data(), PROGRAM_HEADER_SIZE);
ASSERT_MSG(header.writes_depth == 0, "Depth write is unimplemented");
ASSERT_MSG(header.writes_samplemask == 0, "Samplemask write is unimplemented"); ASSERT_MSG(header.writes_samplemask == 0, "Samplemask write is unimplemented");
// Write the color outputs using the data in the shader registers, disabled // Write the color outputs using the data in the shader registers, disabled
@ -935,6 +934,12 @@ private:
} }
} }
} }
if (header.writes_depth) {
// The depth output is always 2 registers after the last color output, and current_reg
// already contains one past the last color register.
shader.AddLine("gl_FragDepth = " + regs.GetRegisterAsFloat(current_reg + 1) + ';');
}
} }
/** /**