diff options
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/ast_function.cpp | 2 | ||||
-rw-r--r-- | src/glsl/glsl_parser_extras.cpp | 10 | ||||
-rw-r--r-- | src/glsl/glsl_parser_extras.h | 2 | ||||
-rw-r--r-- | src/glsl/ir_variable.cpp | 20 | ||||
-rw-r--r-- | src/glsl/linker.cpp | 12 |
5 files changed, 39 insertions, 7 deletions
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp index 67147b6718f..3ba699ad971 100644 --- a/src/glsl/ast_function.cpp +++ b/src/glsl/ast_function.cpp @@ -238,7 +238,7 @@ match_function_by_name(exec_list *instructions, const char *name, ir_function_signature *sig = (ir_function_signature *) node; str = prototype_string(sig->return_type, f->name, &sig->parameters); - _mesa_glsl_error(loc, state, "%s%s\n", prefix, str); + _mesa_glsl_error(loc, state, "%s%s", prefix, str); ralloc_free(str); prefix = " "; diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp index 5bb3a6f25a3..18bff88deec 100644 --- a/src/glsl/glsl_parser_extras.cpp +++ b/src/glsl/glsl_parser_extras.cpp @@ -255,6 +255,16 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, state->AMD_conservative_depth_enable = (ext_mode != extension_disable); state->AMD_conservative_depth_warn = (ext_mode == extension_warn); unsupported = !state->extensions->AMD_conservative_depth; + } else if (strcmp(name, "GL_AMD_shader_stencil_export") == 0) { + state->AMD_shader_stencil_export_enable = (ext_mode != extension_disable); + state->AMD_shader_stencil_export_warn = (ext_mode == extension_warn); + + /* This extension is only supported in fragment shaders. + * Both the ARB and AMD variants share the same ARB flag + * in gl_extensions. + */ + unsupported = (state->target != fragment_shader) + || !state->extensions->ARB_shader_stencil_export; } else if (strcmp(name, "GL_OES_texture_3D") == 0 && state->es_shader) { state->OES_texture_3D_enable = (ext_mode != extension_disable); state->OES_texture_3D_warn = (ext_mode == extension_warn); diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h index 6df0e160ae3..f9147653f35 100644 --- a/src/glsl/glsl_parser_extras.h +++ b/src/glsl/glsl_parser_extras.h @@ -172,6 +172,8 @@ struct _mesa_glsl_parse_state { unsigned ARB_shader_stencil_export_warn:1; unsigned AMD_conservative_depth_enable:1; unsigned AMD_conservative_depth_warn:1; + unsigned AMD_shader_stencil_export_enable:1; + unsigned AMD_shader_stencil_export_warn:1; unsigned OES_texture_3D_enable:1; unsigned OES_texture_3D_warn:1; /*@}*/ diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index f3577175691..b8487694c51 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -767,6 +767,22 @@ generate_ARB_shader_stencil_export_variables(exec_list *instructions, } static void +generate_AMD_shader_stencil_export_variables(exec_list *instructions, + struct _mesa_glsl_parse_state *state, + bool warn) +{ + /* gl_FragStencilRefAMD is only available in the fragment shader. + */ + ir_variable *const fd = + add_variable(instructions, state->symbols, + "gl_FragStencilRefAMD", glsl_type::int_type, + ir_var_out, FRAG_RESULT_STENCIL); + + if (warn) + fd->warn_extension = "GL_AMD_shader_stencil_export"; +} + +static void generate_120_fs_variables(exec_list *instructions, struct _mesa_glsl_parse_state *state) { @@ -818,6 +834,10 @@ initialize_fs_variables(exec_list *instructions, if (state->ARB_shader_stencil_export_enable) generate_ARB_shader_stencil_export_variables(instructions, state, state->ARB_shader_stencil_export_warn); + + if (state->AMD_shader_stencil_export_enable) + generate_AMD_shader_stencil_export_variables(instructions, state, + state->AMD_shader_stencil_export_warn); } void diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 17492357f2d..255edc6a76f 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -510,7 +510,7 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog, */ if (input->type != output->type) { /* There is a bit of a special case for gl_TexCoord. This - * built-in is unsized by default. Appliations that variable + * built-in is unsized by default. Applications that variable * access it must redeclare it with a size. There is some * language in the GLSL spec that implies the fragment shader * and vertex shader do not have to agree on this size. Other @@ -997,7 +997,7 @@ update_array_sizes(struct gl_shader_program *prog) /* If this is a built-in uniform (i.e., it's backed by some * fixed-function state), adjust the number of state slots to * match the new array size. The number of slots per array entry - * is not known. It seems saft to assume that the total number of + * is not known. It seems safe to assume that the total number of * slots is an integer multiple of the number of array elements. * Determine the number of slots per array element by dividing by * the old (total) size. @@ -1163,7 +1163,7 @@ assign_uniform_locations(struct gl_shader_program *prog) /** - * Find a contiguous set of available bits in a bitmask + * Find a contiguous set of available bits in a bitmask. * * \param used_mask Bits representing used (1) and unused (0) locations * \param needed_count Number of contiguous bits needed. @@ -1210,7 +1210,7 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index * 1. Invalidate the location assignments for all vertex shader inputs. * * 2. Assign locations for inputs that have user-defined (via - * glBindVertexAttribLocation) locatoins. + * glBindVertexAttribLocation) locations. * * 3. Sort the attributes without assigned locations by number of slots * required in decreasing order. Fragmentation caused by attribute @@ -1349,7 +1349,7 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare); - /* VERT_ATTRIB_GENERIC0 is a psdueo-alias for VERT_ATTRIB_POS. It can only + /* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS. It can only * be explicitly assigned by via glBindAttribLocation. Mark it as reserved * to prevent it from being automatically allocated below. */ @@ -1610,7 +1610,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) break; } - /* Validate the inputs of each stage with the output of the preceeding + /* Validate the inputs of each stage with the output of the preceding * stage. */ for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) { |