Merge remote-tracking branch 'public/master' into vulkan
This commit is contained in:
@@ -140,6 +140,10 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
||||
this->Const.MaxAtomicCounterBufferSize =
|
||||
ctx->Const.MaxAtomicBufferSize;
|
||||
|
||||
/* ARB_enhanced_layouts constants */
|
||||
this->Const.MaxTransformFeedbackBuffers = ctx->Const.MaxTransformFeedbackBuffers;
|
||||
this->Const.MaxTransformFeedbackInterleavedComponents = ctx->Const.MaxTransformFeedbackInterleavedComponents;
|
||||
|
||||
/* Compute shader constants */
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(this->Const.MaxComputeWorkGroupCount); i++)
|
||||
this->Const.MaxComputeWorkGroupCount[i] = ctx->Const.MaxComputeWorkGroupCount[i];
|
||||
@@ -177,6 +181,9 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
||||
this->Const.MaxTessControlUniformComponents = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxUniformComponents;
|
||||
this->Const.MaxTessEvaluationUniformComponents = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxUniformComponents;
|
||||
|
||||
/* GL 4.5 / OES_sample_variables */
|
||||
this->Const.MaxSamples = ctx->Const.MaxSamples;
|
||||
|
||||
this->current_function = NULL;
|
||||
this->toplevel_ir = NULL;
|
||||
this->found_return = false;
|
||||
@@ -610,9 +617,12 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
||||
EXT(OES_geometry_point_size, false, true, OES_geometry_shader),
|
||||
EXT(OES_geometry_shader, false, true, OES_geometry_shader),
|
||||
EXT(OES_gpu_shader5, false, true, ARB_gpu_shader5),
|
||||
EXT(OES_sample_variables, false, true, OES_sample_variables),
|
||||
EXT(OES_shader_image_atomic, false, true, ARB_shader_image_load_store),
|
||||
EXT(OES_shader_multisample_interpolation, false, true, OES_sample_variables),
|
||||
EXT(OES_standard_derivatives, false, true, OES_standard_derivatives),
|
||||
EXT(OES_texture_3D, false, true, dummy_true),
|
||||
EXT(OES_texture_buffer, false, true, OES_texture_buffer),
|
||||
EXT(OES_texture_storage_multisample_2d_array, false, true, ARB_texture_multisample),
|
||||
|
||||
/* All other extensions go here, sorted alphabetically.
|
||||
@@ -629,6 +639,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
||||
EXT(EXT_shader_integer_mix, true, true, EXT_shader_integer_mix),
|
||||
EXT(EXT_shader_samples_identical, true, true, EXT_shader_samples_identical),
|
||||
EXT(EXT_texture_array, true, false, EXT_texture_array),
|
||||
EXT(EXT_texture_buffer, false, true, OES_texture_buffer),
|
||||
};
|
||||
|
||||
#undef EXT
|
||||
@@ -935,6 +946,13 @@ _mesa_ast_process_interface_block(YYLTYPE *locp,
|
||||
block->layout.stream = state->out_qualifier->stream;
|
||||
}
|
||||
|
||||
if (state->has_enhanced_layouts() && block->layout.flags.q.out) {
|
||||
/* Assign global layout's xfb_buffer value. */
|
||||
block->layout.flags.q.xfb_buffer = 1;
|
||||
block->layout.flags.q.explicit_xfb_buffer = 0;
|
||||
block->layout.xfb_buffer = state->out_qualifier->xfb_buffer;
|
||||
}
|
||||
|
||||
foreach_list_typed (ast_declarator_list, member, link, &block->declarations) {
|
||||
ast_type_qualifier& qualifier = member->type->qualifier;
|
||||
if ((qualifier.flags.i & interface_type_mask) == 0) {
|
||||
@@ -1206,6 +1224,7 @@ ast_expression::ast_expression(int oper,
|
||||
this->subexpressions[1] = ex1;
|
||||
this->subexpressions[2] = ex2;
|
||||
this->non_lvalue_description = NULL;
|
||||
this->is_lhs = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1583,13 +1602,12 @@ set_shader_inout_layout(struct gl_shader *shader,
|
||||
struct _mesa_glsl_parse_state *state)
|
||||
{
|
||||
/* Should have been prevented by the parser. */
|
||||
if (shader->Stage == MESA_SHADER_TESS_CTRL) {
|
||||
if (shader->Stage == MESA_SHADER_TESS_CTRL ||
|
||||
shader->Stage == MESA_SHADER_VERTEX) {
|
||||
assert(!state->in_qualifier->flags.i);
|
||||
} else if (shader->Stage == MESA_SHADER_TESS_EVAL) {
|
||||
assert(!state->out_qualifier->flags.i);
|
||||
} else if (shader->Stage != MESA_SHADER_GEOMETRY) {
|
||||
} else if (shader->Stage != MESA_SHADER_GEOMETRY &&
|
||||
shader->Stage != MESA_SHADER_TESS_EVAL) {
|
||||
assert(!state->in_qualifier->flags.i);
|
||||
assert(!state->out_qualifier->flags.i);
|
||||
}
|
||||
|
||||
if (shader->Stage != MESA_SHADER_COMPUTE) {
|
||||
@@ -1606,6 +1624,17 @@ set_shader_inout_layout(struct gl_shader *shader,
|
||||
assert(!state->fs_early_fragment_tests);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) {
|
||||
if (state->out_qualifier->out_xfb_stride[i]) {
|
||||
unsigned xfb_stride;
|
||||
if (state->out_qualifier->out_xfb_stride[i]->
|
||||
process_qualifier_constant(state, "xfb_stride", &xfb_stride,
|
||||
true)) {
|
||||
shader->TransformFeedback.BufferStride[i] = xfb_stride;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (shader->Stage) {
|
||||
case MESA_SHADER_TESS_CTRL:
|
||||
shader->TessCtrl.VerticesOut = 0;
|
||||
|
||||
Reference in New Issue
Block a user