summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2016-11-04 10:10:19 +1100
committerTimothy Arceri <[email protected]>2016-12-30 10:57:16 +1100
commit8417bf528eb155028d56acaa4cbe05eb3536093b (patch)
treeedcbf49a81acdabde3244f0314fb1e9ddeec8040 /src
parent3177eef39277b64af3213603b58ff934b5218e39 (diff)
mesa/glsl: move BlendSupport bitfield to gl_program
This will let us to make _CurrentFragmentProgram a gl_program pointer allowing for simpilifications to be made. We also need to add a field to gl_shader to hold it during parsing. In gl_program we put it inside a union in anticipation of moving more fields here that can be only fs or vertex stage fields. Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/glsl/glsl_parser_extras.cpp2
-rw-r--r--src/compiler/glsl/linker.cpp3
-rw-r--r--src/compiler/glsl/lower_blend_equation_advanced.cpp5
-rw-r--r--src/mesa/main/api_validate.c2
-rw-r--r--src/mesa/main/mtypes.h19
5 files changed, 20 insertions, 11 deletions
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp
index 14b71539eb7..4566aa92ecd 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -1818,7 +1818,7 @@ set_shader_inout_layout(struct gl_shader *shader,
shader->info.EarlyFragmentTests = state->fs_early_fragment_tests;
shader->info.InnerCoverage = state->fs_inner_coverage;
shader->info.PostDepthCoverage = state->fs_post_depth_coverage;
- shader->info.BlendSupport = state->fs_blend_support;
+ shader->BlendSupport = state->fs_blend_support;
break;
default:
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 209129c3ea0..3726f669730 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -1829,7 +1829,6 @@ link_fs_inout_layout_qualifiers(struct gl_shader_program *prog,
linked_shader->info.uses_gl_fragcoord = false;
linked_shader->info.origin_upper_left = false;
linked_shader->info.pixel_center_integer = false;
- linked_shader->info.BlendSupport = 0;
if (linked_shader->Stage != MESA_SHADER_FRAGMENT ||
(prog->data->Version < 150 &&
@@ -1894,7 +1893,7 @@ link_fs_inout_layout_qualifiers(struct gl_shader_program *prog,
linked_shader->Program->info.fs.post_depth_coverage |=
shader->info.PostDepthCoverage;
- linked_shader->info.BlendSupport |= shader->info.BlendSupport;
+ linked_shader->Program->sh.fs.BlendSupport |= shader->BlendSupport;
}
}
diff --git a/src/compiler/glsl/lower_blend_equation_advanced.cpp b/src/compiler/glsl/lower_blend_equation_advanced.cpp
index f8210e3aaa5..4f9cd8387ff 100644
--- a/src/compiler/glsl/lower_blend_equation_advanced.cpp
+++ b/src/compiler/glsl/lower_blend_equation_advanced.cpp
@@ -463,7 +463,7 @@ get_main(gl_linked_shader *sh)
bool
lower_blend_equation_advanced(struct gl_linked_shader *sh)
{
- if (sh->info.BlendSupport == 0)
+ if (sh->Program->sh.fs.BlendSupport == 0)
return false;
/* Lower early returns in main() so there's a single exit point
@@ -547,7 +547,8 @@ lower_blend_equation_advanced(struct gl_linked_shader *sh)
ir_factory f(&main->body, mem_ctx);
ir_variable *result_dest =
- calc_blend_result(f, mode, fb, blend_source, sh->info.BlendSupport);
+ calc_blend_result(f, mode, fb, blend_source,
+ sh->Program->sh.fs.BlendSupport);
/* Copy the result back to the original values. It would be simpler
* to demote the program's output variables, and create a new vec4
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 2f9980e7e6c..42eeeba1414 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -102,7 +102,7 @@ check_blend_func_error(struct gl_context *ctx)
const struct gl_shader_program *sh_prog =
ctx->_Shader->_CurrentFragmentProgram;
const GLbitfield blend_support = !sh_prog ? 0 :
- sh_prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->info.BlendSupport;
+ sh_prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program->sh.fs.BlendSupport;
if ((blend_support & ctx->Color._AdvancedBlendMode) == 0) {
_mesa_error(ctx, GL_INVALID_OPERATION,
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 35dd8135f26..69d2eeeaf31 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1972,6 +1972,15 @@ struct gl_program
GLuint NumSubroutineFunctions;
GLuint MaxSubroutineFunctionIndex;
struct gl_subroutine_function *SubroutineFunctions;
+
+ union {
+ struct {
+ /**
+ * A bitmask of gl_advanced_blend_mode values
+ */
+ GLbitfield BlendSupport;
+ } fs;
+ };
} sh;
/** ARB assembly-style program fields */
@@ -2279,11 +2288,6 @@ struct gl_shader_info
bool EarlyFragmentTests;
/**
- * A bitmask of gl_advanced_blend_mode values
- */
- GLbitfield BlendSupport;
-
- /**
* Compute shader state from ARB_compute_shader and
* ARB_compute_variable_group_size layout qualifiers.
*/
@@ -2436,6 +2440,11 @@ struct gl_shader
struct exec_list *ir;
struct glsl_symbol_table *symbols;
+ /**
+ * A bitmask of gl_advanced_blend_mode values
+ */
+ GLbitfield BlendSupport;
+
struct gl_shader_info info;
};