mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-14 07:08:32 +09:00
[Fix, Test] (MG_Util, MG_IntegrationTest): advertise the GL 4.3 VIEWPORT_BOUNDS_RANGE floor on a GLES driver that has no such query, instead of a range admitting no origin
This commit is contained in:
@@ -1614,7 +1614,8 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
g_syncedBackendViewport = backendViewport;
|
||||
}
|
||||
|
||||
// All 12 capability bools live after LogicOp in the struct, i.e. in the tail span.
|
||||
// Every capability bool (and the scissor-test mask below) lives after LogicOp in the
|
||||
// struct, i.e. in the tail span.
|
||||
if (tailSpanDirty) {
|
||||
#define SYNC_CAPABILITY(cap_mg, cap_gl) \
|
||||
if (forceFullPush || parameters.cap_mg##Enabled != g_syncedRenderStateParameters.cap_mg##Enabled) { \
|
||||
|
||||
@@ -446,9 +446,15 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
const IntVec2& framebufferExtent,
|
||||
VkSurfaceTransformFlagBitsKHR preTransform,
|
||||
Bool isDefaultFramebuffer) {
|
||||
// Rounded to integers on purpose: MobileGL advertises GL_VIEWPORT_SUBPIXEL_BITS = 0, so
|
||||
// the fractional rectangle glViewportIndexedf can store is exact as STATE and snapped
|
||||
// when it rasterizes.
|
||||
// Snapped to integers. The viewport is float STATE (glViewportIndexedf may set a
|
||||
// fractional origin, and GetFloati_v hands it back verbatim), but what rasterizes here is
|
||||
// the rounded rectangle - a deliberate, documented infidelity rather than a spec claim:
|
||||
// MobileGL passes the driver's VIEWPORT_SUBPIXEL_BITS through, so it does advertise
|
||||
// subpixel viewport precision it does not deliver. Nothing in KHR-GL43.viewport_array or
|
||||
// in Minecraft sets a fractional viewport (the conformance checks are all on the state
|
||||
// round trip), which is why the honest-but-lossy path was kept over widening every
|
||||
// default-framebuffer Y-flip/pre-transform helper to floats. See the KNOWN INFIDELITY
|
||||
// note in MG_IntegrationTest/Scenarios/AdvertisedLimitsScenario.cpp.
|
||||
const FloatVec4& stored = MG_State::pGLContext->GetViewportIndexed(index);
|
||||
const IntVec4 viewportState(static_cast<Int>(std::lround(stored.x())),
|
||||
static_cast<Int>(std::lround(stored.y())),
|
||||
|
||||
Reference in New Issue
Block a user