#include "main/accum.h"
#include "main/api_exec.h"
#include "main/context.h"
+#include "main/debug_output.h"
#include "main/glthread.h"
#include "main/samplerobj.h"
#include "main/shaderobj.h"
if (new_state & _NEW_FOG)
st->dirty |= ST_NEW_FS_STATE;
-
- if (new_state & _NEW_FRAG_CLAMP) {
- if (st->clamp_frag_color_in_shader)
- st->dirty |= ST_NEW_FS_STATE;
- else
- st->dirty |= ST_NEW_RASTERIZER;
- }
}
if (new_state & (_NEW_LIGHT |
f->NewClipControl = ST_NEW_VIEWPORT | ST_NEW_RASTERIZER;
f->NewClipPlane = ST_NEW_CLIP_STATE;
+ if (st->clamp_frag_color_in_shader) {
+ f->NewFragClamp = ST_NEW_FS_STATE;
+ } else {
+ f->NewFragClamp = ST_NEW_RASTERIZER;
+ }
+
if (st->clamp_frag_depth_in_shader) {
f->NewClipControl |= ST_NEW_VS_STATE | ST_NEW_GS_STATE |
ST_NEW_TES_STATE;
}
if (st->lower_ucp)
- f->NewClipPlaneEnable = ST_NEW_VS_STATE;
+ f->NewClipPlaneEnable = ST_NEW_VS_STATE | ST_NEW_GS_STATE;
else
f->NewClipPlaneEnable = ST_NEW_RASTERIZER;
* profile, so that u_vbuf is bypassed completely if there is nothing else
* to do.
*/
- unsigned cso_flags =
- ctx->API == API_OPENGL_CORE ? CSO_NO_USER_VERTEX_BUFFERS : 0;
+ unsigned cso_flags;
+ switch (ctx->API) {
+ case API_OPENGL_CORE:
+ cso_flags = CSO_NO_USER_VERTEX_BUFFERS;
+ break;
+ case API_OPENGLES:
+ case API_OPENGLES2:
+ cso_flags = CSO_NO_64B_VERTEX_BUFFERS;
+ break;
+ default:
+ cso_flags = 0;
+ break;
+ }
+
st->cso_context = cso_create_context(pipe, cso_flags);
st_init_atoms(st);
assert(!ctx->Extensions.OES_geometry_shader || !st->lower_point_size);
assert(!ctx->Extensions.ARB_tessellation_shader || !st->lower_point_size);
- /* FIXME: add support for geometry and tessellation shaders for
- * lower_ucp
- */
- assert(!ctx->Extensions.OES_geometry_shader || !st->lower_ucp);
+ /* FIXME: add support for tessellation shaders for lower_ucp */
assert(!ctx->Extensions.ARB_tessellation_shader || !st->lower_ucp);
if (st_have_perfmon(st)) {
st->shader_has_one_variant[MESA_SHADER_GEOMETRY] =
st->has_shareable_shaders &&
!st->clamp_frag_depth_in_shader &&
- !st->clamp_vert_color_in_shader;
+ !st->clamp_vert_color_in_shader &&
+ !st->lower_ucp;
st->shader_has_one_variant[MESA_SHADER_COMPUTE] = st->has_shareable_shaders;
st->bitmap.cache.empty = true;
st_destroy_program_variants(st);
- _mesa_free_context_data(ctx);
+ /* Do not release debug_output yet because it might be in use by other threads.
+ * These threads will be terminated by _mesa_free_context_data and
+ * st_destroy_context_priv.
+ */
+ _mesa_free_context_data(ctx, false);
/* This will free the st_context too, so 'st' must not be accessed
* afterwards. */
st_destroy_context_priv(st, true);
st = NULL;
+ _mesa_destroy_debug_output(ctx);
+
free(ctx);
if (save_ctx == ctx) {