spirv: add support for AMD_shader_early_and_late_fragment_tests
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Tatsuyuki Ishi <ishitatsuyuki@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19738>
This commit is contained in:
committed by
Marge Bot
parent
ac8131b564
commit
877c10efd1
@@ -945,6 +945,18 @@ enum gl_frag_depth_layout
|
||||
FRAG_DEPTH_LAYOUT_UNCHANGED
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Layout qualifiers for AMD_shader_early_and_late_fragment_tests.
|
||||
*/
|
||||
enum gl_frag_stencil_layout
|
||||
{
|
||||
FRAG_STENCIL_LAYOUT_NONE, /**< No layout is specified. */
|
||||
FRAG_STENCIL_LAYOUT_ANY,
|
||||
FRAG_STENCIL_LAYOUT_GREATER,
|
||||
FRAG_STENCIL_LAYOUT_LESS,
|
||||
FRAG_STENCIL_LAYOUT_UNCHANGED
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Buffer access qualifiers
|
||||
*/
|
||||
|
||||
@@ -485,6 +485,13 @@ typedef struct shader_info {
|
||||
* shader.
|
||||
*/
|
||||
unsigned advanced_blend_modes;
|
||||
|
||||
/**
|
||||
* Defined by AMD_shader_early_and_late_fragment_tests.
|
||||
*/
|
||||
bool early_and_late_fragment_tests:1;
|
||||
enum gl_frag_stencil_layout stencil_front_layout:3;
|
||||
enum gl_frag_stencil_layout stencil_back_layout:3;
|
||||
} fs;
|
||||
|
||||
struct {
|
||||
|
||||
@@ -5307,6 +5307,41 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct vtn_value *entry_point,
|
||||
"SpvExecutionModeSubgroupUniformControlFlowKHR not supported.");
|
||||
break;
|
||||
|
||||
case SpvExecutionModeEarlyAndLateFragmentTestsAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.early_and_late_fragment_tests = true;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefGreaterFrontAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_front_layout = FRAG_STENCIL_LAYOUT_GREATER;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefLessFrontAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_front_layout = FRAG_STENCIL_LAYOUT_LESS;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefUnchangedFrontAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_front_layout = FRAG_STENCIL_LAYOUT_UNCHANGED;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefGreaterBackAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_back_layout = FRAG_STENCIL_LAYOUT_GREATER;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefLessBackAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_back_layout = FRAG_STENCIL_LAYOUT_LESS;
|
||||
break;
|
||||
|
||||
case SpvExecutionModeStencilRefUnchangedBackAMD:
|
||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||
b->shader->info.fs.stencil_back_layout = FRAG_STENCIL_LAYOUT_UNCHANGED;
|
||||
break;
|
||||
|
||||
default:
|
||||
vtn_fail("Unhandled execution mode: %s (%u)",
|
||||
spirv_executionmode_to_string(mode->exec_mode),
|
||||
|
||||
Reference in New Issue
Block a user