mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 22:00:11 +01:00
r600: handle writes_memory properly
This implements proper handling for shaders with side effects. Tested-By: Gert Wollny <gw.fossdev@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
d8acf79f0c
commit
77d36cbc8d
2 changed files with 13 additions and 3 deletions
|
|
@ -3173,8 +3173,12 @@ void evergreen_update_ps_state(struct pipe_context *ctx, struct r600_pipe_shader
|
|||
db_shader_control |= S_02880C_STENCIL_EXPORT_ENABLE(stencil_export);
|
||||
db_shader_control |= S_02880C_MASK_EXPORT_ENABLE(mask_export);
|
||||
|
||||
if (shader->selector->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL])
|
||||
db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1);
|
||||
if (shader->selector->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL]) {
|
||||
db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1) |
|
||||
S_02880C_EXEC_ON_NOOP(shader->selector->info.writes_memory);
|
||||
} else if (shader->selector->info.writes_memory) {
|
||||
db_shader_control |= S_02880C_EXEC_ON_HIER_FAIL(1);
|
||||
}
|
||||
|
||||
switch (rshader->ps_conservative_z) {
|
||||
default: /* fall through */
|
||||
|
|
@ -3498,7 +3502,7 @@ void evergreen_update_db_shader_control(struct r600_context * rctx)
|
|||
* get a hang unless you flush the DB in between. For now just use
|
||||
* LATE_Z.
|
||||
*/
|
||||
if (rctx->alphatest_state.sx_alpha_test_control) {
|
||||
if (rctx->alphatest_state.sx_alpha_test_control || rctx->ps_shader->info.writes_memory) {
|
||||
db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z);
|
||||
} else {
|
||||
db_shader_control |= S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
|
||||
|
|
|
|||
|
|
@ -988,6 +988,12 @@
|
|||
#define S_02880C_DUAL_EXPORT_ENABLE(x) (((unsigned)(x) & 0x1) << 9)
|
||||
#define G_02880C_DUAL_EXPORT_ENABLE(x) (((x) >> 9) & 0x1)
|
||||
#define C_02880C_DUAL_EXPORT_ENABLE 0xFFFFFDFF
|
||||
#define S_02880C_EXEC_ON_HIER_FAIL(x) (((unsigned)(x) & 0x1) << 10)
|
||||
#define G_02880C_EXEC_ON_HIER_FAIL(x) (((x) >> 10) & 0x1)
|
||||
#define C_02880C_EXEC_ON_HIER_FAIL 0xFFFFFBFF
|
||||
#define S_02880C_EXEC_ON_NOOP(x) (((unsigned)(x) & 0x1) << 11)
|
||||
#define G_02880C_EXEC_ON_NOOP(x) (((x) >> 11) & 0x1)
|
||||
#define C_02880C_EXEC_ON_NOOP 0xFFFFF7FF
|
||||
#define S_02880C_DB_SOURCE_FORMAT(x) (((unsigned)(x) & 0x3) << 13)
|
||||
#define G_02880C_DB_SOURCE_FORMAT(x) (((x) >> 13) & 0x3)
|
||||
#define C_02880C_DB_SOURCE_FORMAT 0xFFFF9FFF
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue