* determined by calling GetFloatv with the symbolic constant
* VIEWPORT_BOUNDS_RANGE (see section 6.1)."
*/
- if (ctx->Extensions.ARB_viewport_array ||
- (ctx->Extensions.OES_viewport_array &&
- _mesa_is_gles31(ctx))) {
+ if (_mesa_has_ARB_viewport_array(ctx) ||
+ _mesa_has_OES_viewport_array(ctx)) {
*x = CLAMP(*x,
ctx->Const.ViewportBounds.Min, ctx->Const.ViewportBounds.Max);
*y = CLAMP(*y,
ctx->ViewportArray[i].Near = 0.0;
ctx->ViewportArray[i].Far = 1.0;
}
+
+ ctx->SubpixelPrecisionBias[0] = 0;
+ ctx->SubpixelPrecisionBias[1] = 0;
}
translate[2] = n;
}
}
+
+
+static void
+subpixel_precision_bias(struct gl_context *ctx, GLuint xbits, GLuint ybits)
+{
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx, "glSubpixelPrecisionBiasNV(%u, %u)\n", xbits, ybits);
+
+ ctx->SubpixelPrecisionBias[0] = xbits;
+ ctx->SubpixelPrecisionBias[1] = ybits;
+
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |=
+ ctx->DriverFlags.NewNvConservativeRasterizationParams;
+}
+
+void GLAPIENTRY
+_mesa_SubpixelPrecisionBiasNV_no_error(GLuint xbits, GLuint ybits)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx, "glSubpixelPrecisionBiasNV(%u, %u)\n", xbits, ybits);
+
+ subpixel_precision_bias(ctx, xbits, ybits);
+}
+
+void GLAPIENTRY
+_mesa_SubpixelPrecisionBiasNV(GLuint xbits, GLuint ybits)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx, "glSubpixelPrecisionBiasNV(%u, %u)\n", xbits, ybits);
+
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ if (!ctx->Extensions.NV_conservative_raster) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glSubpixelPrecisionBiasNV not supported");
+ return;
+ }
+
+ if (xbits > ctx->Const.MaxSubpixelPrecisionBiasBits) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glSubpixelPrecisionBiasNV");
+ return;
+ }
+
+ if (ybits > ctx->Const.MaxSubpixelPrecisionBiasBits) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glSubpixelPrecisionBiasNV");
+ return;
+ }
+
+ subpixel_precision_bias(ctx, xbits, ybits);
+}