GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8BB6
GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8BB7
+GL_MESA_tile_raster_order
+ GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
+ GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9
+ GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA
+
EGL_MESA_drm_image
EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
EGL_DRM_BUFFER_USE_MESA 0x31D1
#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
#endif /* GL_WIN_specular_fog */
+/* XXX: Get a regenerated header with the enums properly present. */
+#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
+#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9
+#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA
+
+
#ifdef __cplusplus
}
#endif
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<!-- XXX: need an extension number -->
+<category name="GL_MESA_tile_rasterizer_order">
+ <enum name="TILE_RASTER_ORDER_FIXED_MESA" value="0x8BB8"/>
+ <enum name="TILE_RASTER_ORDER_INCREASING_X_MESA" value="0x8BB9"/>
+ <enum name="TILE_RASTER_ORDER_INCREASING_Y_MESA" value="0x8BBA"/>
+</category>
+
+</OpenGLAPI>
KHR_robustness.xml \
KHR_robustness_es.xml \
KHR_texture_compression_astc.xml \
+ MESA_tile_raster_order.xml \
NV_conditional_render.xml \
NV_primitive_restart.xml \
NV_texture_barrier.xml \
return GL_FALSE;
/* Miscellaneous */
+ ctx->TileRasterOrderIncreasingX = GL_TRUE;
+ ctx->TileRasterOrderIncreasingY = GL_TRUE;
ctx->NewState = _NEW_ALL;
ctx->NewDriverState = ~0;
ctx->ErrorValue = GL_NO_ERROR;
}
break;
+ case GL_TILE_RASTER_ORDER_FIXED_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order, cap);
+ if (ctx->TileRasterOrderFixed != state) {
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTileRasterOrder;
+ ctx->TileRasterOrderFixed = state;
+ }
+ break;
+
+ case GL_TILE_RASTER_ORDER_INCREASING_X_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order, cap);
+ if (ctx->TileRasterOrderIncreasingX != state) {
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTileRasterOrder;
+ ctx->TileRasterOrderIncreasingX = state;
+ }
+ break;
+
+ case GL_TILE_RASTER_ORDER_INCREASING_Y_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order, cap);
+ if (ctx->TileRasterOrderIncreasingY != state) {
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTileRasterOrder;
+ ctx->TileRasterOrderIncreasingY = state;
+ }
+ break;
+
/* GL 3.1 primitive restart. Note: this enum is different from
* GL_PRIMITIVE_RESTART_NV (which is client state).
*/
CHECK_EXTENSION(INTEL_conservative_rasterization);
return ctx->IntelConservativeRasterization;
+ case GL_TILE_RASTER_ORDER_FIXED_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order);
+ return ctx->TileRasterOrderFixed;
+
+ case GL_TILE_RASTER_ORDER_INCREASING_X_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order);
+ return ctx->TileRasterOrderIncreasingX;
+
+ case GL_TILE_RASTER_ORDER_INCREASING_Y_MESA:
+ CHECK_EXTENSION(MESA_tile_raster_order);
+ return ctx->TileRasterOrderIncreasingY;
+
default:
goto invalid_enum_error;
}
EXT(KHR_texture_compression_astc_ldr , KHR_texture_compression_astc_ldr , GLL, GLC, x , ES2, 2012)
EXT(KHR_texture_compression_astc_sliced_3d , KHR_texture_compression_astc_sliced_3d , GLL, GLC, x , ES2, 2015)
+EXT(MESA_tile_raster_order , MESA_tile_raster_order , GLL, GLC, x , ES2, 2017)
EXT(MESA_pack_invert , MESA_pack_invert , GLL, GLC, x , x , 2002)
EXT(MESA_shader_integer_functions , MESA_shader_integer_functions , GLL, GLC, x , 30, 2016)
EXT(MESA_texture_signed_rgba , EXT_texture_snorm , GLL, GLC, x , x , 2009)
GLboolean KHR_texture_compression_astc_hdr;
GLboolean KHR_texture_compression_astc_ldr;
GLboolean KHR_texture_compression_astc_sliced_3d;
+ GLboolean MESA_tile_raster_order;
GLboolean MESA_pack_invert;
GLboolean MESA_shader_framebuffer_fetch;
GLboolean MESA_shader_framebuffer_fetch_non_coherent;
/** gl_context::RasterDiscard */
uint64_t NewRasterizerDiscard;
+ /** gl_context::TileRasterOrder* */
+ uint64_t NewTileRasterOrder;
+
/**
* gl_context::UniformBufferBindings
* gl_shader_program::UniformBlocks
/** Does glVertexAttrib(0) alias glVertex()? */
bool _AttribZeroAliasesVertex;
+ /**
+ * When set, TileRasterOrderIncreasingX/Y control the order that a tiled
+ * renderer's tiles should be excecuted, to meet the requirements of
+ * GL_MESA_tile_raster_order.
+ */
+ GLboolean TileRasterOrderFixed;
+ GLboolean TileRasterOrderIncreasingX;
+ GLboolean TileRasterOrderIncreasingY;
+
/**
* \name Hooks for module contexts.
*
/* ST_NEW_RASTERIZER */
raster->rasterizer_discard = ctx->RasterDiscard;
+ if (ctx->TileRasterOrderFixed) {
+ raster->tile_raster_order_fixed = true;
+ raster->tile_raster_order_increasing_x = ctx->TileRasterOrderIncreasingX;
+ raster->tile_raster_order_increasing_y = ctx->TileRasterOrderIncreasingY;
+ }
if (st->edgeflag_culls_prims) {
/* All edge flags are FALSE. Cull the affected faces. */
f->NewArray = ST_NEW_VERTEX_ARRAYS;
f->NewRasterizerDiscard = ST_NEW_RASTERIZER;
+ f->NewTileRasterOrder = ST_NEW_RASTERIZER;
f->NewUniformBuffer = ST_NEW_UNIFORM_BUFFER;
f->NewDefaultTessLevels = ST_NEW_TESS_STATE;
{ o(AMD_seamless_cubemap_per_texture), PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE },
{ o(ATI_separate_stencil), PIPE_CAP_TWO_SIDED_STENCIL },
{ o(ATI_texture_mirror_once), PIPE_CAP_TEXTURE_MIRROR_CLAMP },
+ { o(MESA_tile_raster_order), PIPE_CAP_TILE_RASTER_ORDER },
{ o(NV_conditional_render), PIPE_CAP_CONDITIONAL_RENDER },
{ o(NV_fill_rectangle), PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE },
{ o(NV_primitive_restart), PIPE_CAP_PRIMITIVE_RESTART },