mirror of
https://github.com/elwrcl/intel-hard-graphics.git
synced 2026-10-31 19:08:03 +03:00
init
This commit is contained in:
12511 files changed
+6156641
No files matched your search
@@ -0,0 +1,103 @@
|
||||
|
||||
BasedOnStyle: InheritParentConfig
|
||||
DisableFormat: false
|
||||
|
||||
AlignConsecutiveBitFields: Consecutive
|
||||
ColumnLimit: 80
|
||||
BreakStringLiterals: false
|
||||
SpaceBeforeParens: ControlStatementsExceptControlMacros
|
||||
ForEachMacros: [
|
||||
'BITSET_FOREACH_SET',
|
||||
'bi_foreach_block',
|
||||
'bi_foreach_block_from',
|
||||
'bi_foreach_block_from_rev',
|
||||
'bi_foreach_block_rev',
|
||||
'bi_foreach_clause_in_block',
|
||||
'bi_foreach_clause_in_block_from',
|
||||
'bi_foreach_clause_in_block_from_rev',
|
||||
'bi_foreach_clause_in_block_rev',
|
||||
'bi_foreach_clause_in_block_safe',
|
||||
'bi_foreach_dest',
|
||||
'bi_foreach_instr_and_src_in_tuple',
|
||||
'bi_foreach_instr_global',
|
||||
'bi_foreach_instr_global_rev',
|
||||
'bi_foreach_instr_global_rev_safe',
|
||||
'bi_foreach_instr_global_safe',
|
||||
'bi_foreach_instr_in_block',
|
||||
'bi_foreach_instr_in_block_from',
|
||||
'bi_foreach_instr_in_block_from_rev',
|
||||
'bi_foreach_instr_in_block_rev',
|
||||
'bi_foreach_instr_in_block_safe',
|
||||
'bi_foreach_instr_in_block_safe_rev',
|
||||
'bi_foreach_instr_in_clause',
|
||||
'bi_foreach_instr_in_clause_rev',
|
||||
'bi_foreach_instr_in_tuple',
|
||||
'bi_foreach_phi_in_block',
|
||||
'bi_foreach_phi_in_block_safe',
|
||||
'bi_foreach_predecessor',
|
||||
'bi_foreach_src',
|
||||
'bi_foreach_ssa_dest',
|
||||
'bi_foreach_ssa_dest_rev',
|
||||
'bi_foreach_ssa_src',
|
||||
'bi_foreach_ssa_src_rev',
|
||||
'bi_foreach_successor',
|
||||
'cs_case',
|
||||
'cs_default',
|
||||
'cs_else',
|
||||
'cs_emit',
|
||||
'cs_exception_handler_def',
|
||||
'cs_if',
|
||||
'cs_iter_sb_update',
|
||||
'cs_iter_sb_update_case',
|
||||
'cs_match',
|
||||
'cs_single_link_list_for_each_from',
|
||||
'cs_update_compute_ctx',
|
||||
'cs_update_frag_ctx',
|
||||
'cs_update_progress_seqno',
|
||||
'cs_update_vt_ctx',
|
||||
'cs_while',
|
||||
'foreach_batch',
|
||||
'foreach_list_typed',
|
||||
'list_for_each_entry_safe',
|
||||
'mir_foreach_block',
|
||||
'mir_foreach_block_from',
|
||||
'mir_foreach_bundle_in_block',
|
||||
'mir_foreach_bundle_in_block_rev',
|
||||
'mir_foreach_instr_global',
|
||||
'mir_foreach_instr_global_safe',
|
||||
'mir_foreach_instr_in_block',
|
||||
'mir_foreach_instr_in_block_from',
|
||||
'mir_foreach_instr_in_block_from_rev',
|
||||
'mir_foreach_instr_in_block_rev',
|
||||
'mir_foreach_instr_in_block_safe',
|
||||
'mir_foreach_instr_in_block_safe_rev',
|
||||
'mir_foreach_instr_in_block_scheduled_rev',
|
||||
'mir_foreach_predecessor',
|
||||
'mir_foreach_successor',
|
||||
'mir_foreach_src',
|
||||
'nir_foreach_function_impl',
|
||||
'nir_foreach_instr',
|
||||
'nir_foreach_phi_src',
|
||||
'nir_foreach_use',
|
||||
'nir_foreach_variable_with_modes',
|
||||
'nir_foreach_shader_in_variable',
|
||||
'nodearray_dense_foreach',
|
||||
'nodearray_dense_foreach_64',
|
||||
'nodearray_sparse_foreach',
|
||||
'pan_cast_and_pack',
|
||||
'pan_cast_and_pack_nodefaults',
|
||||
'pan_pack',
|
||||
'pan_pack_nodefaults',
|
||||
'pan_section_pack',
|
||||
'pan_unpack',
|
||||
'panvk_cs_reg_upd_ctx',
|
||||
'panvk_priv_mem_readback',
|
||||
'panvk_priv_mem_readback_array',
|
||||
'panvk_priv_mem_rwm',
|
||||
'panvk_priv_mem_rwm_array',
|
||||
'panvk_priv_mem_write',
|
||||
'panvk_priv_mem_write_array',
|
||||
'panvk_priv_mem_write_desc',
|
||||
'panvk_shader_foreach_variant',
|
||||
'u_foreach_bit',
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
max_width = 80
|
||||
@@ -0,0 +1,14 @@
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "quick_gl"
|
||||
process_isolation = true
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "quick_gl"
|
||||
process_isolation = true
|
||||
include = [ "spec@.*texture" ]
|
||||
prefix = "afbcp-"
|
||||
[piglit.env]
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,5 @@
|
||||
[[deqp]]
|
||||
deqp = "/deqp-vk/external/vulkancts/modules/vulkan/deqp-vk"
|
||||
caselists = ["/deqp-vk/mustpass/vk-main.txt"]
|
||||
renderer_check = "Mali-G52"
|
||||
tests_per_group = 10000
|
||||
@@ -0,0 +1,72 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-G52"
|
||||
extensions_check = "/install/panfrost-g52-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/external/openglcts/modules/glcts"
|
||||
caselists = [
|
||||
"/deqp-gles/mustpass/gles2-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles3-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles31-khr-main.txt",
|
||||
]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
# Smoke test spilling
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
include = ["functional.shaders"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "spill-"
|
||||
fraction = 2
|
||||
[deqp.env]
|
||||
BIFROST_MESA_DEBUG = "spill"
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "afbcp-"
|
||||
include = [ "dEQP-GLES2.*texture" ]
|
||||
[deqp.env]
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,14 @@
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "quick_gl"
|
||||
process_isolation = true
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "quick_gl"
|
||||
process_isolation = true
|
||||
include = [ "spec@.*texture" ]
|
||||
prefix = "afbcp-"
|
||||
[piglit.env]
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,72 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-G57"
|
||||
extensions_check = "/install/panfrost-g57-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/external/openglcts/modules/glcts"
|
||||
caselists = [
|
||||
"/deqp-gles/mustpass/gles2-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles3-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles31-khr-main.txt",
|
||||
]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
# Smoke test spilling
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
include = ["functional.shaders"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "spill-"
|
||||
fraction = 2
|
||||
[deqp.env]
|
||||
BIFROST_MESA_DEBUG = "spill"
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "afbcp-"
|
||||
include = [ "dEQP-GLES2.*texture" ]
|
||||
[deqp.env]
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,17 @@
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "gpu"
|
||||
process_isolation = true
|
||||
[piglit.env]
|
||||
PIGLIT_NO_WINDOW = "1"
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "gpu"
|
||||
process_isolation = true
|
||||
include = [ "spec@.*texture" ]
|
||||
prefix = "afbcp-"
|
||||
[piglit.env]
|
||||
PIGLIT_NO_WINDOW = "1"
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,6 @@
|
||||
[[deqp]]
|
||||
deqp = "/deqp-vk/external/vulkancts/modules/vulkan/deqp-vk"
|
||||
caselists = ["/deqp-vk/mustpass/vk-main.txt"]
|
||||
renderer_check = "Mali-G610"
|
||||
prefix = "asan-"
|
||||
tests_per_group = 10000
|
||||
@@ -0,0 +1,5 @@
|
||||
[[deqp]]
|
||||
deqp = "/deqp-vk/external/vulkancts/modules/vulkan/deqp-vk"
|
||||
caselists = ["/deqp-vk/mustpass/vk-main.txt"]
|
||||
renderer_check = "Mali-G610"
|
||||
tests_per_group = 10000
|
||||
@@ -0,0 +1,72 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-G610"
|
||||
extensions_check = "/install/panfrost-g610-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/external/openglcts/modules/glcts"
|
||||
caselists = [
|
||||
"/deqp-gles/mustpass/gles2-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles3-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles31-khr-main.txt",
|
||||
]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
# Smoke test spilling
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
include = ["functional.shaders"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "spill-"
|
||||
fraction = 2
|
||||
[deqp.env]
|
||||
BIFROST_MESA_DEBUG = "spill"
|
||||
|
||||
# Smoke test AFBC-P
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "afbcp-"
|
||||
include = [ "dEQP-GLES2.*texture" ]
|
||||
[deqp.env]
|
||||
PAN_MESA_DEBUG = "forcepack"
|
||||
@@ -0,0 +1,44 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-G72"
|
||||
extensions_check = "/install/panfrost-g72-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/external/openglcts/modules/glcts"
|
||||
caselists = [
|
||||
"/deqp-gles/mustpass/gles2-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles3-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles31-khr-main.txt",
|
||||
]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
[[deqp]]
|
||||
deqp = "/deqp-vk/external/vulkancts/modules/vulkan/deqp-vk"
|
||||
caselists = ["/deqp-vk/mustpass/vk-main.txt"]
|
||||
renderer_check = "Mali-G725"
|
||||
tests_per_group = 10000
|
||||
@@ -0,0 +1,12 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 2.0.*git"
|
||||
renderer_check = "Mali-T720"
|
||||
extensions_check = "/install/panfrost-t720-gles2-extensions.txt"
|
||||
@@ -0,0 +1,30 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-T760"
|
||||
extensions_check = "/install/panfrost-t760-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
[[piglit]]
|
||||
piglit_folder = "/piglit"
|
||||
profile = "cl"
|
||||
process_isolation = true
|
||||
[piglit.env]
|
||||
RUSTICL_ENABLE = "panfrost"
|
||||
@@ -0,0 +1,21 @@
|
||||
# wayland
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/egl/deqp-egl-wayland"
|
||||
caselists = ["/deqp-gles/mustpass/egl-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "wayland-"
|
||||
|
||||
# x11
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/egl/deqp-egl-x11"
|
||||
caselists = ["/deqp-gles/mustpass/egl-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "x11-"
|
||||
@@ -0,0 +1,31 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1.*git"
|
||||
renderer_check = "Mali-T860"
|
||||
extensions_check = "/install/panfrost-t860-gles2-extensions.txt"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
fraction = 4
|
||||
@@ -0,0 +1,72 @@
|
||||
# Basic test set
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles2/deqp-gles2"
|
||||
caselists = ["/deqp-gles/mustpass/gles2-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
version_check = "GL ES 3.1"
|
||||
renderer_check = "ANGLE.*Mali"
|
||||
prefix = "angle-"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "angle-"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-main.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "angle-"
|
||||
|
||||
# Note that KHR-GL3* test sets include all tests from the previous
|
||||
# version, so we only need to run one test list (unlike dEQP-GLES,
|
||||
# where the test sets are separate).
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/external/openglcts/modules/glcts"
|
||||
caselists = [
|
||||
"/deqp-gles/mustpass/gles2-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles3-khr-main.txt",
|
||||
"/deqp-gles/mustpass/gles31-khr-main.txt",
|
||||
]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms0",
|
||||
]
|
||||
prefix = "angle-"
|
||||
|
||||
# 565-no-depth-no-stencil: Not supported with angle on X11?
|
||||
|
||||
# multisample
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles3/deqp-gles3"
|
||||
caselists = ["/deqp-gles/mustpass/gles3-multisample.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms4",
|
||||
]
|
||||
prefix = "angle-multisample-"
|
||||
|
||||
[[deqp]]
|
||||
deqp = "/deqp-gles/modules/gles31/deqp-gles31"
|
||||
caselists = ["/deqp-gles/mustpass/gles31-multisample.txt"]
|
||||
deqp_args = [
|
||||
"--deqp-surface-width=256", "--deqp-surface-height=256",
|
||||
"--deqp-surface-type=pbuffer", "--deqp-visibility=hidden",
|
||||
"--deqp-gl-config-name=rgba8888d24s8ms4",
|
||||
]
|
||||
prefix = "angle-multisample-"
|
||||
@@ -0,0 +1,294 @@
|
||||
.panfrost-midgard-rules:
|
||||
stage: arm
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-rules, rules]
|
||||
- !reference [.gl-rules, rules]
|
||||
- changes: &panfrost_gallium_file_list
|
||||
- src/gallium/drivers/panfrost/**/*
|
||||
- src/gallium/winsys/panfrost/**/*
|
||||
when: on_success
|
||||
- changes: &panfrost_common_file_list
|
||||
- src/panfrost/ci/gitlab-ci.yml
|
||||
- src/panfrost/ci/gitlab-ci-inc.yml
|
||||
- src/panfrost/ci/deqp-$DEQP_SUITE.toml
|
||||
- src/panfrost/ci/$GPU_VERSION-fails.txt
|
||||
- src/panfrost/ci/$GPU_VERSION-flakes.txt
|
||||
- src/panfrost/ci/$GPU_VERSION-skips.txt
|
||||
- src/panfrost/ci/$GPU_VERSION-gles2-extensions.txt
|
||||
- src/panfrost/ci/$DRIVER_NAME-flakes.txt
|
||||
- src/panfrost/ci/$DRIVER_NAME-skips.txt
|
||||
- src/panfrost/ci/$PIGLIT_TRACES_FILE
|
||||
- src/panfrost/clc/*
|
||||
- src/panfrost/compiler/*
|
||||
- src/panfrost/genxml/*
|
||||
- src/panfrost/lib/*
|
||||
- src/panfrost/lib/kmod/*
|
||||
- src/panfrost/libpan/*
|
||||
- src/panfrost/model/*
|
||||
- src/panfrost/shared/*
|
||||
when: on_success
|
||||
- changes:
|
||||
- src/panfrost/compiler/midgard/**/*
|
||||
when: on_success
|
||||
|
||||
.panfrost-midgard-manual-rules:
|
||||
stage: arm-nightly
|
||||
extends: .no-auto-retry
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-manual-rules, rules]
|
||||
- !reference [.gl-manual-rules, rules]
|
||||
- changes: *panfrost_gallium_file_list
|
||||
when: manual
|
||||
- changes: *panfrost_common_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
- src/panfrost/compiler/midgard/**/*
|
||||
when: manual
|
||||
|
||||
.panfrost-bifrost-gl-rules:
|
||||
stage: arm
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-rules, rules]
|
||||
- !reference [.gl-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: on_success
|
||||
- changes:
|
||||
*panfrost_gallium_file_list
|
||||
when: on_success
|
||||
- changes: &panfrost_bifrost_file_list
|
||||
- src/panfrost/compiler/bifrost/**/*
|
||||
when: on_success
|
||||
|
||||
.panfrost-bifrost-gl-manual-rules:
|
||||
stage: arm-nightly
|
||||
extends: .no-auto-retry
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-manual-rules, rules]
|
||||
- !reference [.gl-manual-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_gallium_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_bifrost_file_list
|
||||
when: manual
|
||||
|
||||
.panfrost-vk-rules:
|
||||
stage: arm
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-rules, rules]
|
||||
- !reference [.vulkan-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: on_success
|
||||
- changes: &panfrost_vulkan_file_list
|
||||
- src/panfrost/vulkan/**/*
|
||||
when: on_success
|
||||
- changes: *panfrost_bifrost_file_list
|
||||
when: on_success
|
||||
|
||||
.panfrost-vk-manual-rules:
|
||||
stage: arm-nightly
|
||||
extends: .no-auto-retry
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-manual-rules, rules]
|
||||
- !reference [.vulkan-manual-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_vulkan_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_bifrost_file_list
|
||||
when: manual
|
||||
|
||||
.panfrost-valhall-gl-rules:
|
||||
stage: arm
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-rules, rules]
|
||||
- !reference [.gl-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: on_success
|
||||
- changes:
|
||||
*panfrost_gallium_file_list
|
||||
when: on_success
|
||||
- changes: &panfrost_valhall_file_list
|
||||
- src/panfrost/compiler/bifrost/**/*
|
||||
when: on_success
|
||||
|
||||
.panfrost-valhall-gl-manual-rules:
|
||||
stage: arm-nightly
|
||||
extends: .no-auto-retry
|
||||
rules:
|
||||
- !reference [.test, rules]
|
||||
- !reference [.collabora-farm-manual-rules, rules]
|
||||
- !reference [.gl-manual-rules, rules]
|
||||
- changes:
|
||||
*panfrost_common_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_gallium_file_list
|
||||
when: manual
|
||||
- changes:
|
||||
*panfrost_valhall_file_list
|
||||
when: manual
|
||||
|
||||
.panfrost-test:
|
||||
variables:
|
||||
FLAKES_CHANNEL: "#panfrost-ci"
|
||||
PAN_MESA_DEBUG: sync
|
||||
HWCI_FREQ_MAX: "true"
|
||||
|
||||
.panfrost-traces:
|
||||
variables:
|
||||
PAN_MESA_DEBUG: "deqp,sync"
|
||||
MESA_GLES_VERSION_OVERRIDE: "3.1"
|
||||
MESA_GL_VERSION_OVERRIDE: "3.3"
|
||||
MESA_GLSL_VERSION_OVERRIDE: 330
|
||||
EGL_PLATFORM: surfaceless
|
||||
PIGLIT_TRACES_FILE: traces-panfrost.yml
|
||||
|
||||
# https://lava.collabora.dev/scheduler/device_type/meson-g12b-a311d-khadas-vim3
|
||||
.lava-meson-g12b-a311d-khadas-vim3:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: meson-g12b-a311d-khadas-vim3
|
||||
DTB: $DEVICE_TYPE
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g52
|
||||
# FDO_CI_CONCURRENT: ?
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-meson-g12b-a311d-khadas-vim3
|
||||
VK_DRIVER: panfrost
|
||||
KERNEL_TAG: "v6.18-pan-mesa-952e"
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/mt8183-kukui-jacuzzi-juniper-sku16
|
||||
.lava-mt8183-kukui-jacuzzi-juniper-sku16:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: mt8183-kukui-jacuzzi-juniper-sku16
|
||||
DTB: $DEVICE_TYPE
|
||||
BOOT_METHOD: depthcharge
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g72
|
||||
# FDO_CI_CONCURRENT: ?
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-mt8183-kukui-jacuzzi-juniper-sku16
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/mt8186-corsola-steelix-sku131072
|
||||
.lava-mt8186-corsola-steelix-sku131072:arm64:
|
||||
variables:
|
||||
BOOT_METHOD: depthcharge
|
||||
DEVICE_TYPE: mt8186-corsola-steelix-sku131072
|
||||
DTB: $DEVICE_TYPE
|
||||
FDO_CI_CONCURRENT: 8
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g52
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-mt8186-corsola-steelix-sku131072
|
||||
VK_DRIVER: panfrost
|
||||
KERNEL_TAG: "v6.18-pan-mesa-952e"
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/mt8192-asurada-spherion-r0
|
||||
.lava-mt8192-asurada-spherion-r0:arm64:
|
||||
variables:
|
||||
BOOT_METHOD: depthcharge
|
||||
DEVICE_TYPE: mt8192-asurada-spherion-r0
|
||||
DTB: $DEVICE_TYPE
|
||||
# FDO_CI_CONCURRENT: ?
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g57
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-mt8192-asurada-spherion-r0
|
||||
# Force fixed 6.6 kernel, we're not reliably getting a GPU on 6.13
|
||||
KERNEL_TAG: "v6.6.21-mesa-1978"
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/mt8195-cherry-tomato-r2
|
||||
.lava-mt8195-cherry-tomato-r2:arm64:
|
||||
variables:
|
||||
BOOT_METHOD: depthcharge
|
||||
DEVICE_TYPE: mt8195-cherry-tomato-r2
|
||||
DTB: $DEVICE_TYPE
|
||||
FDO_CI_CONCURRENT: 8
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g57
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-mt8195-cherry-tomato-r2
|
||||
|
||||
.lava-rk3288-veyron-jaq:arm32:
|
||||
variables:
|
||||
BOOT_METHOD: depthcharge
|
||||
DEVICE_TYPE: rk3288-veyron-jaq
|
||||
DEQP_SUITE: panfrost-t760
|
||||
DTB: rk3288-veyron-jaq
|
||||
FDO_CI_CONCURRENT: 6
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-t760
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-rk3288-veyron-jaq
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/rk3399-rock-pi-4b
|
||||
.lava-rk3399-rock-pi-4b:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: rk3399-rock-pi-4b
|
||||
DTB: $DEVICE_TYPE
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-t860
|
||||
# FDO_CI_CONCURRENT: ?
|
||||
BOOT_METHOD: u-boot
|
||||
KERNEL_IMAGE_TYPE: "image"
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-rk3399-rock-pi-4b
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/rk3588-rock-5b
|
||||
.lava-rk3588-rock-5b:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: rk3588-rock-5b
|
||||
DTB: $DEVICE_TYPE
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g610
|
||||
FDO_CI_CONCURRENT: 6
|
||||
HWCI_KERNEL_MODULES: panthor
|
||||
BOOT_METHOD: u-boot
|
||||
KERNEL_IMAGE_TYPE: "image"
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-rk3588-rock-5b
|
||||
VK_DRIVER: panfrost
|
||||
LAVA_FIRMWARE: arm
|
||||
KERNEL_TAG: "v6.18-pan-mesa-952e"
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/mt8196-rauru-navi-sku0
|
||||
.lava-mt8196-rauru-navi-sku0:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: mt8196-rauru-navi-sku0
|
||||
DTB: $DEVICE_TYPE
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-g925
|
||||
FDO_CI_CONCURRENT: 9
|
||||
HWCI_KERNEL_MODULES: panthor
|
||||
BOOT_METHOD: depthcharge
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-mt8196-rauru-navi-sku0
|
||||
VK_DRIVER: panfrost
|
||||
LAVA_FIRMWARE: arm
|
||||
# Mainline kernel support for MT8196 is still incomplete
|
||||
KERNEL_TAG: "v6.18-pan-mesa-952e"
|
||||
|
||||
# Status: https://lava.collabora.dev/scheduler/device_type/sun50i-h6-pine-h64
|
||||
.lava-sun50i-h6-pine-h64:arm64:
|
||||
variables:
|
||||
DEVICE_TYPE: sun50i-h6-pine-h64
|
||||
DTB: sun50i-h6-pine-h64
|
||||
FARM: collabora
|
||||
GPU_VERSION: panfrost-t720
|
||||
DEQP_SUITE: panfrost-t720
|
||||
FDO_CI_CONCURRENT: 6
|
||||
HWCI_FREQ_MAX: "true"
|
||||
RUNNER_TAG: mesa-ci-x86-64-lava-sun50i-h6-pine-h64
|
||||
@@ -0,0 +1,246 @@
|
||||
include:
|
||||
- local: src/panfrost/ci/gitlab-ci-inc.yml
|
||||
|
||||
# We only have two machines and these boards are EOL.
|
||||
# Put it in nightly until we can move to different boards.
|
||||
panfrost-t720-gles2:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-sun50i-h6-pine-h64:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
|
||||
# We only have two machines, which we share with KernelCI.
|
||||
# Keep the second t760 job manual.
|
||||
panfrost-t760-gles:arm32:
|
||||
extends:
|
||||
- .lava-arm32-test-gl
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3288-veyron-jaq:arm32
|
||||
timeout: 1h 30m
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
|
||||
panfrost-t760-traces:arm32:
|
||||
extends:
|
||||
- .lava-arm32-piglit-traces
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3288-veyron-jaq:arm32
|
||||
- .panfrost-traces
|
||||
|
||||
panfrost-t860-cl:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .test-piglit
|
||||
- .lava-rk3399-rock-pi-4b:arm64
|
||||
rules:
|
||||
- !reference [.panfrost-midgard-manual-rules, rules]
|
||||
- !reference [.rusticl-manual-rules, rules]
|
||||
variables:
|
||||
HWCI_START_WESTON: 1
|
||||
DEQP_SUITE: panfrost-t860-cl
|
||||
|
||||
panfrost-t860-gl:arm64:
|
||||
parallel: 3
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3399-rock-pi-4b:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
FDO_CI_CONCURRENT: 6
|
||||
DEQP_SUITE: panfrost-t860
|
||||
|
||||
panfrost-t860-egl:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3399-rock-pi-4b:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
HWCI_START_WESTON: 1
|
||||
DEQP_SUITE: panfrost-t860-egl
|
||||
|
||||
panfrost-t860-traces:arm64:
|
||||
extends:
|
||||
- .lava-arm64-piglit-traces
|
||||
- .panfrost-midgard-manual-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3399-rock-pi-4b:arm64
|
||||
- .panfrost-traces
|
||||
|
||||
panfrost-g52-gl:arm64:
|
||||
parallel: 4
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-bifrost-gl-rules
|
||||
- .panfrost-test
|
||||
- .lava-meson-g12b-a311d-khadas-vim3:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
FDO_CI_CONCURRENT: 6
|
||||
DEQP_SUITE: panfrost-g52
|
||||
|
||||
panfrost-g52-vk:arm64:
|
||||
parallel: 8
|
||||
extends:
|
||||
- .lava-arm64-test-vk
|
||||
- .panfrost-test
|
||||
- .lava-mt8186-corsola-steelix-sku131072:arm64
|
||||
- .panfrost-vk-rules
|
||||
variables:
|
||||
DRIVER_NAME: panvk
|
||||
MESA_VK_IGNORE_CONFORMANCE_WARNING: 1
|
||||
PAN_I_WANT_A_BROKEN_VULKAN_DRIVER: 1
|
||||
PANVK_DEBUG: "sync,coherent_before_cached"
|
||||
DEQP_SUITE: panfrost-g52-vk
|
||||
HWCI_START_WESTON: 1
|
||||
|
||||
panfrost-g52-piglit:arm64:
|
||||
parallel: 2
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-bifrost-gl-manual-rules
|
||||
- .panfrost-test
|
||||
- .test-piglit
|
||||
- .lava-meson-g12b-a311d-khadas-vim3:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
HWCI_START_WESTON: 1
|
||||
DEQP_SUITE: panfrost-g52-piglit
|
||||
|
||||
panfrost-g72-gl:arm64:
|
||||
parallel: 3
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-bifrost-gl-rules
|
||||
- .panfrost-test
|
||||
- .lava-mt8183-kukui-jacuzzi-juniper-sku16:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
DEQP_SUITE: panfrost-g72
|
||||
|
||||
panfrost-g57-gl:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-bifrost-gl-rules
|
||||
- .panfrost-test
|
||||
- .lava-mt8195-cherry-tomato-r2:arm64
|
||||
parallel: 3
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
DEQP_SUITE: panfrost-g57
|
||||
# Oversubscribing by one thread helps deqp, but hurts piglit
|
||||
FDO_CI_CONCURRENT: 9
|
||||
|
||||
panfrost-g57-piglit:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-bifrost-gl-rules
|
||||
- .panfrost-test
|
||||
- .test-piglit
|
||||
- .lava-mt8195-cherry-tomato-r2:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
HWCI_START_WESTON: 1
|
||||
DEQP_SUITE: panfrost-g57-piglit
|
||||
# Undersubscribing by one thread prevents test timeouts and speeds up
|
||||
# the piglit job overall
|
||||
FDO_CI_CONCURRENT: 7
|
||||
|
||||
panfrost-g610-gl:arm64:
|
||||
parallel: 2
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-valhall-gl-rules
|
||||
- .panfrost-test
|
||||
- .lava-rk3588-rock-5b:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
DEQP_SUITE: panfrost-g610
|
||||
LAVA_TAGS: 4gb
|
||||
|
||||
panfrost-g610-piglit:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-valhall-gl-rules
|
||||
- .panfrost-test
|
||||
- .test-piglit
|
||||
- .lava-rk3588-rock-5b:arm64
|
||||
variables:
|
||||
DRIVER_NAME: panfrost
|
||||
DEQP_SUITE: panfrost-g610-piglit
|
||||
HWCI_START_WESTON: 1
|
||||
LAVA_TAGS: 4gb
|
||||
|
||||
panfrost-g610-vk:arm64:
|
||||
parallel: 4
|
||||
extends:
|
||||
- .lava-arm64-test-vk
|
||||
- .panfrost-test
|
||||
- .lava-rk3588-rock-5b:arm64
|
||||
- .panfrost-vk-rules
|
||||
variables:
|
||||
DRIVER_NAME: panvk
|
||||
MESA_VK_IGNORE_CONFORMANCE_WARNING: 1
|
||||
PANVK_DEBUG: "sync,cs,coherent_before_cached"
|
||||
DEQP_SUITE: panfrost-g610-vk
|
||||
DEQP_FRACTION: 3
|
||||
HWCI_START_WESTON: 1
|
||||
# We get "weston: ../xwayland/window-manager.c:1291: weston_wm_handle_map_request: Assertion `!window->shsurf' failed" (resulting in x11 tests all UnexpectedSkipping) if we go too wide since VKCTS 1.4.5.3
|
||||
# We see a lot of "dEQP error: MESA: error: failed to allocate a panthor_kmod_bo object" both before and after the uprev.
|
||||
FDO_CI_CONCURRENT: 4
|
||||
|
||||
LAVA_TAGS: at-least-8gb
|
||||
|
||||
panfrost-g610-vk-asan:arm64:
|
||||
parallel: 5
|
||||
extends:
|
||||
- .lava-arm64-test-asan-vk
|
||||
- .panfrost-test
|
||||
- .lava-rk3588-rock-5b:arm64
|
||||
- .panfrost-vk-manual-rules
|
||||
timeout: 1h 35m
|
||||
variables:
|
||||
DRIVER_NAME: panvk
|
||||
FDO_CI_CONCURRENT: 2 # We get OOMkills if we go too wide with asan enabled
|
||||
MESA_VK_IGNORE_CONFORMANCE_WARNING: 1
|
||||
PANVK_DEBUG: "sync,cs,coherent_before_cached"
|
||||
DEQP_SUITE: panfrost-g610-vk-asan
|
||||
LAVA_TAGS: at-least-8gb
|
||||
|
||||
panfrost-g925-vk:arm64:
|
||||
parallel: 4
|
||||
extends:
|
||||
- .lava-arm64-test-vk
|
||||
- .panfrost-test
|
||||
- .lava-mt8196-rauru-navi-sku0:arm64
|
||||
- .panfrost-vk-rules
|
||||
variables:
|
||||
DRIVER_NAME: panvk
|
||||
MESA_VK_IGNORE_CONFORMANCE_WARNING: 1
|
||||
PANVK_DEBUG: "sync,cs,coherent_before_cached"
|
||||
DEQP_SUITE: panfrost-g925-vk
|
||||
HWCI_START_WESTON: 1
|
||||
FDO_CI_CONCURRENT: 8 # We get OOMkills if we go too wide since VKCTS 1.4.5.3
|
||||
|
||||
panfrost-g925-angle:arm64:
|
||||
extends:
|
||||
- .lava-arm64-test-gl
|
||||
- .panfrost-test
|
||||
- .test-angle
|
||||
- .lava-mt8196-rauru-navi-sku0:arm64
|
||||
- .panfrost-vk-rules
|
||||
variables:
|
||||
MESA_VK_IGNORE_CONFORMANCE_WARNING: 1
|
||||
DEQP_SUITE: panvk-angle
|
||||
# Disable max-fails feature in deqp-runner since it seems to be broken in this specific job
|
||||
DEQP_RUNNER_MAX_FAILS: null
|
||||
@@ -0,0 +1 @@
|
||||
spec@!opengl 1.2@tex3d-maxsize
|
||||
@@ -0,0 +1,340 @@
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-divisor-zero,Fail
|
||||
glx@glx-make-current,Fail
|
||||
glx@glx-multi-window-single-context,Fail
|
||||
glx@glx-swap-pixmap-bad,Fail
|
||||
shaders@glsl-max-varyings,Fail
|
||||
shaders@glsl-max-varyings >max_varying_components,Fail
|
||||
shaders@point-vertex-id divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid,Fail
|
||||
shaders@point-vertex-id gl_vertexid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid,Fail
|
||||
spec@arb_base_instance@arb_base_instance-drawarrays,Fail
|
||||
spec@arb_point_sprite@arb_point_sprite-mipmap,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drect,Crash
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drectshadow,Crash
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect,Crash
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect_projvec4,Crash
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drectshadow,Crash
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2UI,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB4,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB9_E5,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA4,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_SRGB8_ALPHA8,Fail
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drect,Crash
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drectshadow,Crash
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect,Crash
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect_projvec4,Crash
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drectshadow,Crash
|
||||
spec@arb_transform_feedback_instanced@draw-auto instanced,Fail
|
||||
spec@egl 1.4@eglterminate then unbind context,Fail
|
||||
spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
|
||||
spec@egl_khr_surfaceless_context@viewport,Fail
|
||||
spec@egl_mesa_configless_context@basic,Fail
|
||||
spec@ext_base_instance@arb_base_instance-drawarrays_gles3,Fail
|
||||
spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail
|
||||
spec@ext_transform_feedback2@draw-auto,Fail
|
||||
spec@ext_transform_feedback@builtin-varyings gl_clipdistance,Fail
|
||||
spec@ext_transform_feedback@change-size base-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size offset-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size range-grow,Fail
|
||||
spec@ext_transform_feedback@change-size range-shrink,Fail
|
||||
spec@ext_transform_feedback@interleaved-attribs,Fail
|
||||
spec@ext_transform_feedback@intervening-read output,Fail
|
||||
spec@ext_transform_feedback@intervening-read prims_written,Fail
|
||||
spec@ext_transform_feedback@max-varyings,Fail
|
||||
spec@ext_transform_feedback@order elements lines,Fail
|
||||
spec@ext_transform_feedback@order elements points,Fail
|
||||
spec@ext_transform_feedback@order elements triangles,Fail
|
||||
spec@ext_transform_feedback@overflow-edge-cases,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange,Fail
|
||||
spec@ext_transform_feedback@separate-attribs,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quads flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation quads flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation quads monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quads smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip wireframe,Fail
|
||||
spec@ext_transform_feedback@tessellation quads wireframe,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan wireframe,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip wireframe,Fail
|
||||
[email protected]@execution@varying-packing@simple float array,Fail
|
||||
[email protected]@execution@varying-packing@simple float arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple float separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x3 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x3 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x3 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x4 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x4 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat2x4 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x2 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x2 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x2 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x4 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x4 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat3x4 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x2 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x2 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x2 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x3 array,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x3 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple mat4x3 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple vec2 array,Fail
|
||||
[email protected]@execution@varying-packing@simple vec2 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple vec2 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple vec3 array,Fail
|
||||
[email protected]@execution@varying-packing@simple vec3 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple vec3 separate,Fail
|
||||
[email protected]@execution@varying-packing@simple vec4 array,Fail
|
||||
[email protected]@execution@varying-packing@simple vec4 arrays_of_arrays,Fail
|
||||
[email protected]@execution@varying-packing@simple vec4 separate,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drect,Crash
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drectshadow,Crash
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 2x,Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 3x,Fail
|
||||
spec@!opengl 1.1@linestipple,Fail
|
||||
spec@!opengl 1.1@linestipple@Line loop,Fail
|
||||
spec@!opengl 1.1@linestipple@Line strip,Fail
|
||||
spec@!opengl 1.1@linestipple@Restarting lines within a single Begin-End block,Fail
|
||||
spec@!opengl 1.1@line-smooth-stipple,Fail
|
||||
spec@!opengl 1.1@longprim,Crash
|
||||
spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
spec@!opengl 1.1@polygon-mode,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 2.1@pbo,Fail
|
||||
spec@!opengl 2.1@pbo@test_polygon_stip,Fail
|
||||
spec@!opengl 2.1@polygon-stipple-fs,Fail
|
||||
spec@!opengl 3.0@gl_vertexid used with glmultidrawarrays,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb flush,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb generated,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb written,Fail
|
||||
spec@!opengl es [email protected],Fail
|
||||
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drect,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drectshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect_projvec4,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drectshadow,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2UI,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB4,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB9_E5,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA4,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_SRGB8_ALPHA8,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drect,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drectshadow,Fail
|
||||
afbcp-spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drect,Fail
|
||||
afbcp-spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drectshadow,Fail
|
||||
afbcp-spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect,Crash
|
||||
afbcp-spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect_projvec4,Crash
|
||||
afbcp-spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drectshadow,Crash
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
afbcp-spec@arb_texture_view@tex-view,Fail
|
||||
glx@glx-copy-sub-buffer,Fail
|
||||
spec@!opengl 1.1@large-tex,Fail
|
||||
spec@arb_texture_view@tex-view,Fail
|
||||
|
||||
# Piglit tests require too much precision in alpha-to-coverage higher sample-counts
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 8,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 8,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 6,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 8,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 6 color,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 8 color,Fail
|
||||
|
||||
# physical device and device needs more robustness in allocation handling
|
||||
dEQP-VK.api.object_management.max_concurrent.device,Fail
|
||||
dEQP-VK.api.object_management.max_concurrent.device_group,Fail
|
||||
|
||||
# CTS bug: https://gerrit.khronos.org/c/vk-gl-cts/+/19823
|
||||
dEQP-VK.api.device_init.create_device_global_priority.basic,Fail
|
||||
dEQP-VK.api.device_init.create_device_global_priority_khr.basic,Fail
|
||||
dEQP-VK.api.device_init.create_device_global_priority_query.basic,Fail
|
||||
dEQP-VK.api.device_init.create_device_global_priority_query_khr.basic,Fail
|
||||
|
||||
# New failures with VKCTS 1.4.4.0
|
||||
dEQP-VK.pipeline.fast_linked_library.vertex_input.misc.unbound_input,Crash
|
||||
dEQP-VK.pipeline.fast_linked_library.vertex_input.misc.unbound_input_dynamic,Crash
|
||||
dEQP-VK.pipeline.monolithic.vertex_input.misc.unbound_input,Crash
|
||||
dEQP-VK.pipeline.monolithic.vertex_input.misc.unbound_input_dynamic,Crash
|
||||
|
||||
# Regressions from https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39987
|
||||
# ../src/panfrost/compiler/bifrost/bifrost/bi_pack.c:187: bi_pack_registers: Assertion `!(mode & 0x8)' failed.
|
||||
dEQP-VK.robustness.image_robustness.bind.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube.comp,Crash
|
||||
dEQP-VK.robustness.image_robustness.bind.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube.frag,Crash
|
||||
dEQP-VK.robustness.image_robustness.push.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube_array.comp,Crash
|
||||
dEQP-VK.robustness.image_robustness.push.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube_array.frag,Crash
|
||||
dEQP-VK.robustness.image_robustness.bind.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube_array.comp,Crash
|
||||
dEQP-VK.robustness.image_robustness.bind.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube_array.frag,Crash
|
||||
dEQP-VK.robustness.image_robustness.push.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube.comp,Crash
|
||||
dEQP-VK.robustness.image_robustness.push.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_1.cube.frag,Crash
|
||||
|
||||
# VKCTS 1.4.4.2 -> 1.4.5.3 uprev
|
||||
dEQP-VK.glsl.texture_functions.query.texturequerylod.sampler2d_fixed_trilinear_fragment,Fail
|
||||
dEQP-VK.glsl.texture_functions.query.texturequerylod.sampler2d_fixed_trilinearnon_zero_base_level_fragment,Fail
|
||||
dEQP-VK.glsl.texture_functions.query.texturequerylod.sampler2d_float_trilinear_fragment,Fail
|
||||
dEQP-VK.glsl.texture_functions.query.texturequerylod.sampler2d_float_trilinearnon_zero_base_level_fragment,Fail
|
||||
dEQP-VK.image.host_image_copy.properties.properties,Fail
|
||||
dEQP-VK.pipeline.fast_linked_library.vertex_input.misc.unbound_input_dynamic_integer,Crash
|
||||
dEQP-VK.pipeline.fast_linked_library.vertex_input.misc.unbound_input_integer,Crash
|
||||
dEQP-VK.pipeline.monolithic.vertex_input.misc.unbound_input_dynamic_integer,Crash
|
||||
dEQP-VK.pipeline.monolithic.vertex_input.misc.unbound_input_integer,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.acquire_drm_display_invalid_fd,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.acquire_drm_display_not_master,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.acquire_drm_display_unowned_connector_id,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.acquire_drm_display,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.get_drm_display_invalid_connector_id,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.get_drm_display_invalid_fd,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.get_drm_display_not_master,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.get_drm_display_unowned_connector_id,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.get_drm_display,Crash
|
||||
dEQP-VK.wsi.acquire_drm_display.release_display,Crash
|
||||
@@ -0,0 +1,87 @@
|
||||
glx@glx_arb_sync_control@waitformsc
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-divisor-zero
|
||||
glx@glx-multithread-texture
|
||||
glx@glx-multithread-shader-compile
|
||||
spec@arb_texture_gather@texturegather@fs-r-none-float-cube
|
||||
spec@arb_texture_gather@texturegather@fs-r-none-float-cubearray
|
||||
spec@arb_texture_gather@texturegatheroffset@vs-rgba-zero-unorm-2darray
|
||||
spec@ext_framebuffer_object@fbo-flushing-2
|
||||
spec@!opengl 1.1@teximage-colors
|
||||
spec@!opengl 1.1@teximage-colors gl_luminance8_alpha8
|
||||
spec@!opengl 1.1@teximage-colors gl_rgb8_snorm
|
||||
spec@!opengl 2.0@vertex-program-two-side back back2
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageLoad
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageStore
|
||||
spec@egl_nok_texture_from_pixmap@basic
|
||||
spec@!opengl 1.1@depthstencil-default_fb-blit
|
||||
[email protected]@execution@texturesize@vs-texturesize-isamplercube
|
||||
namespace pollution@renderbuffer with glgetteximage-compressed
|
||||
|
||||
afbcp-glx@glx-multithread-texture
|
||||
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-r-none-float-cube
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-r-none-float-cubearray
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-r-none-unorm-2darray
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-rg-none-int-cubearray
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-rgb-blue-int-2d
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-rgb-green-unorm-2d
|
||||
afbcp-spec@arb_texture_gather@texturegather@vs-rg-green-float-cubearray
|
||||
afbcp-spec@arb_texture_gather@texturegatheroffset@fs-rgba-green-float-2d
|
||||
afbcp-spec@arb_texture_gather@texturegatheroffset@vs-rgba-zero-unorm-2darray
|
||||
|
||||
afbcp-spec@egl_nok_texture_from_pixmap@basic
|
||||
[email protected]@execution@texturesize@vs-texturesize-isamplercube
|
||||
|
||||
# first seen 2023-05-13
|
||||
spec@egl 1.4@largest possible eglcreatepbuffersurface and then glclear
|
||||
afbcp-spec@egl 1.4@largest possible eglcreatepbuffersurface and then glclear
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
glx@glx-multithread-clearbuffer
|
||||
afbcp-glx@glx-multithread-clearbuffer
|
||||
afbcp-spec@arb_texture_multisample@texelfetch@6-vs-isampler2dmsarray
|
||||
glx@glx-visuals-depth
|
||||
|
||||
# Cause a "gpu sched timeout" (fixed by sched increase to 10s)
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_vertex_buffer.1048576_vertex_buffer_stride_2
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_texel_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_index_buffer.1048576
|
||||
|
||||
# Sometime timeout
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_storage_buffer.1048576
|
||||
|
||||
# The simulate_oom WSI tests are broken in CI
|
||||
dEQP-VK.wsi.*.swapchain.simulate_oom.*
|
||||
|
||||
# These intermittently crash on mt8186, but they passed on meson-g12b-a311d-khadas-vim3
|
||||
dEQP-VK.texture.explicit_lod.2d.sizes.128x128_*
|
||||
|
||||
# New flakes in 1.4.3.3
|
||||
dEQP-VK.dynamic_rendering.graphics_pipeline_library.suballocation.attachment.8.615
|
||||
dEQP-VK.renderpass.dedicated_allocation.attachment.8.753
|
||||
dEQP-VK.renderpass2.dedicated_allocation.attachment.8.603
|
||||
dEQP-VK.renderpasses.dynamic_rendering.complete_secondary_cmd_buff.suballocation.attachment.8.615
|
||||
dEQP-VK.renderpasses.renderpass1.dedicated_allocation.attachment.8.644
|
||||
dEQP-VK.renderpasses.renderpass1.suballocation.attachment.8.615
|
||||
dEQP-VK.renderpasses.renderpass1.suballocation.multisample_resolve.r16g16b16a16_sint.samples_8_baseLayer1
|
||||
dEQP-VK.renderpasses.renderpass2.suballocation.attachment.8.753
|
||||
|
||||
# New flakes with VKCTS 1.4.4.0
|
||||
dEQP-VK.binding_model.descriptor_buffer.sparse_residency_buffer.push_descriptor.graphics_geom_sets1_push_set0_single_buffer_commands_2
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2x4_to_mat3x2_vertex
|
||||
dEQP-VK.glsl.operator.binary_operator.div.mediump_float_vec3_vertex
|
||||
|
||||
# Nightly run expectations update
|
||||
glx@glx-visuals-stencil
|
||||
|
||||
# New timeout flakes since wsi maintenance1 support
|
||||
dEQP-VK.wsi.xcb.maintenance1.release_images.mailbox.no_scaling.basic
|
||||
|
||||
# passes every now and then
|
||||
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread
|
||||
afbcp-spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread
|
||||
|
||||
# Job timeout
|
||||
dEQP-VK.graphicsfuzz.spv-composites
|
||||
@@ -0,0 +1,142 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_base_instance
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_gpu_shader5
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_render_snorm
|
||||
GL_EXT_robustness
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_clock
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shader_pixel_local_storage
|
||||
GL_EXT_shader_realtime_clock
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_filter_anisotropic
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_robust_buffer_access_behavior
|
||||
GL_KHR_robustness
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_gpu_shader5
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_sample_shading
|
||||
GL_OES_sample_variables
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_shader_multisample_interpolation
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,70 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Huge render, which eventually times out
|
||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.all
|
||||
|
||||
# These Piglits cause crashes, at least when run with PAN_MESA_DEBUG=sync. For
|
||||
# many, the crashes are due to faults. Although Piglits are nominally
|
||||
# process-isolated, faults can leak across processes to subpar recovery, meaning
|
||||
# these crashes are liable to cause robust passing tests to flakes.
|
||||
# So, skip any tests known to crash to make sure the coverage is solid.
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drect
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drectshadow
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drect_projvec4
|
||||
spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drectshadow
|
||||
spec@ext_transform_feedback@immediate-reuse-index-buffer
|
||||
spec@ext_transform_feedback@immediate-reuse-uniform-buffer
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drect
|
||||
[email protected]@execution@tex-miplevel-selection texture() 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2drect
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2drect
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection textureoffset 2drect
|
||||
[email protected]@execution@tex-miplevel-selection textureoffset 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection textureproj 2drect
|
||||
[email protected]@execution@tex-miplevel-selection textureproj 2drect_projvec4
|
||||
[email protected]@execution@tex-miplevel-selection textureproj 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2drect
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2drect_projvec4
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2drect
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2drect_projvec4
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2drectshadow
|
||||
[email protected]@execution@tex-miplevel-selection textureprojoffset 2drect
|
||||
[email protected]@execution@tex-miplevel-selection textureprojoffset 2drect_projvec4
|
||||
[email protected]@execution@tex-miplevel-selection textureprojoffset 2drectshadow
|
||||
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-return
|
||||
|
||||
# New with VK_KHR_zero_initialize_workgroup_memory
|
||||
# Generate a INSTR_BARRIER_FAULT
|
||||
# Possible issue with barrier lowering with mem_modes=shared?
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.1
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.128
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.16
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.2
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.4
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.64
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.types.f32mat3x3
|
||||
dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.types.f32mat4x4
|
||||
|
||||
# tests are broken with Vulkan 1.0: https://gerrit.khronos.org/c/vk-gl-cts/+/19823
|
||||
dEQP-VK.wsi.direct_drm.*
|
||||
|
||||
# more tests broken on Vulkan 1.0: https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/6409
|
||||
dEQP-VK.wsi.*.maintenance1.*.bind_image*
|
||||
|
||||
# Almost all crashes
|
||||
dEQP-VK.wsi.*present_timing.*
|
||||
|
||||
# https://gitlab.freedesktop.org/mesa/mesa/-/issues/15116
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_modes.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.deferred_alloc.fifo.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_fence.fifo.*
|
||||
|
||||
# Intermittent timeouts
|
||||
dEQP-VK.wsi.wayland.swapchain.render.10swapchains.*
|
||||
@@ -0,0 +1,20 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
afbcp-spec@arb_texture_multisample@texelfetch fs sampler2dms 4 1x130-501x130
|
||||
afbcp-spec@arb_texture_multisample@texelfetch fs sampler2dms 4 1x71-501x71
|
||||
dEQP-VK.api.external.fence.sync_fd.export_multiple_times_temporary
|
||||
dEQP-VK.api.external.semaphore.sync_fd.export_multiple_times_temporary
|
||||
dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_extent
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-return swap_interval 0
|
||||
spec@!opengl 1.1@copypixels-draw-sync
|
||||
spec@!opengl 1.1@copypixels-sync
|
||||
spec@!opengl 1.1@draw-sync
|
||||
spec@arb_texture_multisample@texelfetch fs sampler2dms 4 1x130-501x130
|
||||
spec@arb_texture_multisample@texelfetch fs sampler2dms 4 1x71-501x71
|
||||
spec@arb_texture_multisample@texelfetch fs sampler2dmsarray 4 98x1x9-98x129x9
|
||||
spec@egl_khr_gl_colorspace@linear
|
||||
spec@ext_framebuffer_blit@fbo-blit-check-limits
|
||||
[email protected]@execution@texelfetch fs sampler2d 1x281-501x281
|
||||
spec@arb_point_parameters@arb_point_parameters-point-attenuation
|
||||
@@ -0,0 +1,445 @@
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-divisor-zero,Fail
|
||||
glx@glx-copy-sub-buffer,Fail
|
||||
glx@glx-make-current,Fail
|
||||
glx@glx-multi-window-single-context,Fail
|
||||
glx@glx-swap-pixmap-bad,Fail
|
||||
glx@glx-visuals-stencil -pixmap,Crash
|
||||
shaders@point-vertex-id divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid,Fail
|
||||
shaders@point-vertex-id gl_vertexid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid,Fail
|
||||
spec@arb_point_sprite@arb_point_sprite-mipmap,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2UI,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16_SNORM,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB4,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB9_E5,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32F,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA4,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8I,Fail
|
||||
spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_SRGB8_ALPHA8,Fail
|
||||
spec@arb_transform_feedback_instanced@draw-auto instanced,Fail
|
||||
spec@egl 1.4@eglterminate then unbind context,Fail
|
||||
spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
|
||||
spec@egl_khr_surfaceless_context@viewport,Fail
|
||||
spec@egl_mesa_configless_context@basic,Fail
|
||||
spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail
|
||||
spec@ext_transform_feedback2@draw-auto,Fail
|
||||
spec@ext_transform_feedback@builtin-varyings gl_clipdistance,Fail
|
||||
spec@ext_transform_feedback@change-size base-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size offset-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size range-grow,Fail
|
||||
spec@ext_transform_feedback@change-size range-shrink,Fail
|
||||
spec@ext_transform_feedback@interleaved-attribs,Fail
|
||||
spec@ext_transform_feedback@intervening-read output,Fail
|
||||
spec@ext_transform_feedback@intervening-read prims_written,Fail
|
||||
spec@ext_transform_feedback@order elements lines,Fail
|
||||
spec@ext_transform_feedback@order elements points,Fail
|
||||
spec@ext_transform_feedback@order elements triangles,Fail
|
||||
spec@ext_transform_feedback@overflow-edge-cases,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quads monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quads smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan wireframe,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip wireframe,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 2x,Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 3x,Fail
|
||||
spec@!opengl 1.1@linestipple,Fail
|
||||
spec@!opengl 1.1@linestipple@Line loop,Fail
|
||||
spec@!opengl 1.1@linestipple@Line strip,Fail
|
||||
spec@!opengl 1.1@linestipple@Restarting lines within a single Begin-End block,Fail
|
||||
spec@!opengl 1.1@line-smooth-stipple,Fail
|
||||
spec@!opengl 1.1@longprim,Crash
|
||||
spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
spec@!opengl 1.1@polygon-mode,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 2.1@pbo,Fail
|
||||
spec@!opengl 2.1@pbo@test_polygon_stip,Fail
|
||||
spec@!opengl 2.1@polygon-stipple-fs,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb flush,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb generated,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb written,Fail
|
||||
spec@!opengl es [email protected],Fail
|
||||
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 3d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d_projvec4,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d_projvec4,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 3d,Fail
|
||||
spec@arb_timer_query@query gl_timestamp,Fail
|
||||
spec@arb_timer_query@timestamp-get,Fail
|
||||
spec@ext_disjoint_timer_query@simple,Fail
|
||||
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread,Crash
|
||||
spec@ext_timer_query@time-elapsed,Fail
|
||||
spec@ext_transform_feedback@max-varyings,Fail
|
||||
spec@ext_transform_feedback@max-varyings@max-varying-single-dimension-array,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 3d,Fail
|
||||
|
||||
afbcp-glx@glx_arb_sync_control@swapbuffersmsc-divisor-zero,Fail
|
||||
afbcp-glx@glx-make-current,Fail
|
||||
afbcp-glx@glx-multi-window-single-context,Fail
|
||||
afbcp-glx@glx-swap-pixmap-bad,Fail
|
||||
afbcp-glx@glx-visuals-depth -pixmap,Crash
|
||||
afbcp-glx@glx-visuals-stencil -pixmap,Crash
|
||||
afbcp-shaders@point-vertex-id divisor,Fail
|
||||
afbcp-shaders@point-vertex-id gl_instanceid divisor,Fail
|
||||
afbcp-shaders@point-vertex-id gl_instanceid,Fail
|
||||
afbcp-shaders@point-vertex-id gl_vertexid divisor,Fail
|
||||
afbcp-shaders@point-vertex-id gl_vertexid,Fail
|
||||
afbcp-shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail
|
||||
afbcp-shaders@point-vertex-id gl_vertexid gl_instanceid,Fail
|
||||
afbcp-spec@arb_point_sprite@arb_point_sprite-mipmap,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_R8_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RG8_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10_A2UI,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB10,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB16_SNORM,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB4,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGB9_E5,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA16I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32F,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA32I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA4,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_RGBA8I,Fail
|
||||
afbcp-spec@arb_texture_multisample@arb_texture_multisample-dsa-texelfetch@Texture type: GL_SRGB8_ALPHA8,Fail
|
||||
afbcp-spec@arb_transform_feedback_instanced@draw-auto instanced,Fail
|
||||
afbcp-spec@egl 1.4@eglterminate then unbind context,Fail
|
||||
afbcp-spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
|
||||
afbcp-spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_rgba,Fail
|
||||
afbcp-spec@egl_khr_surfaceless_context@viewport,Fail
|
||||
afbcp-spec@egl_mesa_configless_context@basic,Fail
|
||||
afbcp-spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail
|
||||
afbcp-spec@ext_transform_feedback2@draw-auto,Fail
|
||||
afbcp-spec@ext_transform_feedback@builtin-varyings gl_clipdistance,Fail
|
||||
afbcp-spec@ext_transform_feedback@change-size base-shrink,Fail
|
||||
afbcp-spec@ext_transform_feedback@change-size offset-shrink,Fail
|
||||
afbcp-spec@ext_transform_feedback@change-size range-grow,Fail
|
||||
afbcp-spec@ext_transform_feedback@change-size range-shrink,Fail
|
||||
afbcp-spec@ext_transform_feedback@immediate-reuse-index-buffer,Crash
|
||||
afbcp-spec@ext_transform_feedback@immediate-reuse-uniform-buffer,Crash
|
||||
afbcp-spec@ext_transform_feedback@interleaved-attribs,Fail
|
||||
afbcp-spec@ext_transform_feedback@intervening-read output,Fail
|
||||
afbcp-spec@ext_transform_feedback@intervening-read prims_written,Fail
|
||||
afbcp-spec@ext_transform_feedback@order elements lines,Fail
|
||||
afbcp-spec@ext_transform_feedback@order elements points,Fail
|
||||
afbcp-spec@ext_transform_feedback@order elements triangles,Fail
|
||||
afbcp-spec@ext_transform_feedback@overflow-edge-cases,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferbase-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferbase,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferoffset-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferoffset,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferrange-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-readback-bufferrange,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferbase-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferbase,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferoffset-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferoffset,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferrange-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@position-render-bufferrange,Fail
|
||||
afbcp-spec@ext_transform_feedback@query-primitives_written-bufferrange-discard,Fail
|
||||
afbcp-spec@ext_transform_feedback@query-primitives_written-bufferrange,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_loop flat_first,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_loop flat_last,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_loop monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_loop smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_strip flat_first,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_strip flat_last,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_strip monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation line_strip smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation polygon monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation polygon smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation quads monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation quads smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation quad_strip monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation quad_strip smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_fan flat_first,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_fan flat_last,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_fan monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_fan smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_fan wireframe,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_strip flat_first,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_strip flat_last,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_strip monochrome,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_strip smooth,Fail
|
||||
afbcp-spec@ext_transform_feedback@tessellation triangle_strip wireframe,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl 1.0@rasterpos,Crash
|
||||
afbcp-spec@!opengl 1.1@linestipple@Factor 2x,Fail
|
||||
afbcp-spec@!opengl 1.1@linestipple@Factor 3x,Fail
|
||||
afbcp-spec@!opengl 1.1@linestipple,Fail
|
||||
afbcp-spec@!opengl 1.1@linestipple@Line loop,Fail
|
||||
afbcp-spec@!opengl 1.1@linestipple@Line strip,Fail
|
||||
afbcp-spec@!opengl 1.1@linestipple@Restarting lines within a single Begin-End block,Fail
|
||||
afbcp-spec@!opengl 1.1@line-smooth-stipple,Fail
|
||||
afbcp-spec@!opengl 1.1@longprim,Crash
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
afbcp-spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl [email protected],Fail
|
||||
afbcp-spec@!opengl 2.1@pbo,Fail
|
||||
afbcp-spec@!opengl 2.1@pbo@test_polygon_stip,Fail
|
||||
afbcp-spec@!opengl 2.1@polygon-stipple-fs,Fail
|
||||
afbcp-spec@!opengl 3.1@primitive-restart-xfb flush,Fail
|
||||
afbcp-spec@!opengl 3.1@primitive-restart-xfb generated,Fail
|
||||
afbcp-spec@!opengl 3.1@primitive-restart-xfb written,Fail
|
||||
afbcp-spec@!opengl es [email protected],Fail
|
||||
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 3d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d_projvec4,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d_projvec4,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 3d,Fail
|
||||
afbcp-spec@arb_timer_query@query gl_timestamp,Fail
|
||||
afbcp-spec@arb_timer_query@timestamp-get,Fail
|
||||
afbcp-spec@ext_disjoint_timer_query@simple,Fail
|
||||
afbcp-spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread,Crash
|
||||
afbcp-spec@ext_timer_query@time-elapsed,Fail
|
||||
afbcp-spec@ext_transform_feedback@max-varyings,Fail
|
||||
afbcp-spec@ext_transform_feedback@max-varyings@max-varying-single-dimension-array,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 3d,Fail
|
||||
|
||||
# Piglit tests require too much precision in alpha-to-coverage higher sample-counts
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 8,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 8,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 6,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 8,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 6 color,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 8 color,Fail
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
afbcp-spec@arb_texture_view@tex-view,Fail
|
||||
spec@!opengl 1.1@large-tex,Fail
|
||||
spec@arb_texture_view@tex-view,Fail
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
glx@glx_arb_sync_control@waitformsc
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-divisor-zero
|
||||
glx@glx-multithread-texture
|
||||
glx@glx-multithread-shader-compile
|
||||
spec@arb_texture_gather@texturegather@fs-r-none-float-cube
|
||||
spec@arb_texture_gather@texturegather@fs-r-none-float-cubearray
|
||||
spec@arb_texture_gather@texturegatheroffset@vs-rgba-zero-unorm-2darray
|
||||
spec@ext_framebuffer_object@fbo-flushing-2
|
||||
spec@ext_transform_feedback@immediate-reuse-index-buffer
|
||||
spec@ext_transform_feedback@immediate-reuse-uniform-buffer
|
||||
spec@!opengl 1.1@teximage-colors
|
||||
spec@!opengl 1.1@teximage-colors gl_luminance8_alpha8
|
||||
spec@!opengl 1.1@teximage-colors gl_rgb8_snorm
|
||||
spec@!opengl 2.0@vertex-program-two-side back back2
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageLoad
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageStore
|
||||
spec@egl_nok_texture_from_pixmap@basic
|
||||
spec@!opengl 1.1@depthstencil-default_fb-blit
|
||||
[email protected]@execution@texturesize@vs-texturesize-isamplercube
|
||||
namespace pollution@renderbuffer with glgetteximage-compressed
|
||||
|
||||
afbcp-glx@glx-multithread-texture
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-r-none-float-cube
|
||||
afbcp-spec@arb_texture_gather@texturegather@fs-r-none-float-cubearray
|
||||
afbcp-spec@arb_texture_gather@texturegatheroffset@vs-rgba-zero-unorm-2darray
|
||||
afbcp-spec@egl_nok_texture_from_pixmap@basic
|
||||
[email protected]@execution@texturesize@vs-texturesize-isamplercube
|
||||
|
||||
# first seen 2023-05-13
|
||||
spec@egl 1.4@largest possible eglcreatepbuffersurface and then glclear
|
||||
afbcp-spec@egl 1.4@largest possible eglcreatepbuffersurface and then glclear
|
||||
|
||||
# Initial flakes on mt8195-cherry-tomato-r2
|
||||
glx@glx-visuals-stencil
|
||||
afbcp-glx@glx-visuals-stencil
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
afbcp-spec@ext_texture_srgb@multisample-formats 2 gl_ext_texture_srgb
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3
|
||||
spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageStore
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_gpu_shader5
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_render_snorm
|
||||
GL_EXT_robustness
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_clock
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shader_pixel_local_storage
|
||||
GL_EXT_shader_realtime_clock
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_astc_decode_mode
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_filter_anisotropic
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_query_lod
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_robust_buffer_access_behavior
|
||||
GL_KHR_robustness
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_gpu_shader5
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_sample_shading
|
||||
GL_OES_sample_variables
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_shader_multisample_interpolation
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,11 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# May time out
|
||||
glx@glx_arb_sync_control@swapbuffersmsc-return
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
# sometimes times out
|
||||
spec@egl_ext_surface_compression@create
|
||||
|
||||
@@ -0,0 +1,299 @@
|
||||
dEQP-VK.glsl.loops.special.do_while_dynamic_iterations.dowhile_trap_vertex,Crash
|
||||
asan-dEQP-VK.glsl.loops.special.do_while_dynamic_iterations.dowhile_trap_vertex,Crash
|
||||
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 3d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d_projvec4,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d_projvec4,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2dshadow,Fail
|
||||
afbcp-spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 3d,Fail
|
||||
afbcp-spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread,Crash
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 3d,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
afbcp-spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
glx@glx_arb_sync_control@waitformsc,Fail
|
||||
glx@glx-copy-sub-buffer,Fail
|
||||
glx@glx-make-current,Fail
|
||||
glx@glx-multi-window-single-context,Fail
|
||||
glx@glx-swap-pixmap-bad,Fail
|
||||
shaders@point-vertex-id divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_instanceid,Fail
|
||||
shaders@point-vertex-id gl_vertexid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail
|
||||
shaders@point-vertex-id gl_vertexid gl_instanceid,Fail
|
||||
spec@arb_point_sprite@arb_point_sprite-mipmap,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
|
||||
spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 3d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1d_projvec4,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 1dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2d_projvec4,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2dshadow,Fail
|
||||
spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 3d,Fail
|
||||
spec@arb_transform_feedback_instanced@draw-auto instanced,Fail
|
||||
spec@egl 1.4@egl-ext_egl_image_storage,Fail
|
||||
spec@egl 1.4@eglterminate then unbind context,Fail
|
||||
spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
|
||||
spec@egl_khr_surfaceless_context@viewport,Fail
|
||||
spec@egl_mesa_configless_context@basic,Fail
|
||||
spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy 16 srgb depthstencil,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy 16 srgb depthstencil linear,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy 16 srgb small depthstencil,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy 16 srgb small depthstencil linear,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy all_samples srgb depthstencil,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy all_samples srgb depthstencil linear,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy all_samples srgb small depthstencil,Fail
|
||||
spec@ext_framebuffer_multisample@accuracy all_samples srgb small depthstencil linear,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 16,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-dual-src-blend 8,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 16,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 6,Fail
|
||||
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 8,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 16,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 6,Fail
|
||||
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 8,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 16 color,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 6 color,Fail
|
||||
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 8 color,Fail
|
||||
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread,Crash
|
||||
spec@ext_shader_framebuffer_fetch@execution@gles3@discard-ms8,Fail
|
||||
spec@ext_shader_framebuffer_fetch_non_coherent@execution@gles3@discard-ms8,Fail
|
||||
spec@ext_transform_feedback2@draw-auto,Fail
|
||||
spec@ext_transform_feedback@builtin-varyings gl_clipdistance,Fail
|
||||
spec@ext_transform_feedback@change-size base-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size offset-shrink,Fail
|
||||
spec@ext_transform_feedback@change-size range-grow,Fail
|
||||
spec@ext_transform_feedback@change-size range-shrink,Fail
|
||||
spec@ext_transform_feedback@immediate-reuse-index-buffer,Fail
|
||||
spec@ext_transform_feedback@interleaved-attribs,Fail
|
||||
spec@ext_transform_feedback@intervening-read output,Fail
|
||||
spec@ext_transform_feedback@intervening-read prims_written,Fail
|
||||
spec@ext_transform_feedback@max-varyings,Fail
|
||||
spec@ext_transform_feedback@order elements lines,Fail
|
||||
spec@ext_transform_feedback@order elements points,Fail
|
||||
spec@ext_transform_feedback@order elements triangles,Fail
|
||||
spec@ext_transform_feedback@overflow-edge-cases,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-readback-bufferrange,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferbase,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferoffset,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@position-render-bufferrange,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange-discard,Fail
|
||||
spec@ext_transform_feedback@query-primitives_written-bufferrange,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_loop smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation line_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation polygon smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quads monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quads smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation quad_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_fan wireframe,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_first,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip flat_last,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip monochrome,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip smooth,Fail
|
||||
spec@ext_transform_feedback@tessellation triangle_strip wireframe,Fail
|
||||
[email protected]@execution@fs-underflow-mul-compare-zero,Fail
|
||||
[email protected]@execution@clipping@fs-clip-distance-interpolated,Crash
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-vertex,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-distance,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-fixed,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-none,Fail
|
||||
[email protected]@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-vertex,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darray,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2darrayshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection texturegradoffset 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgrad 3d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 1dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2d_projvec4,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 2dshadow,Fail
|
||||
[email protected]@execution@tex-miplevel-selection textureprojgradoffset 3d,Fail
|
||||
spec@intel_blackhole_render@intel_blackhole-draw_gles2,Crash
|
||||
spec@intel_blackhole_render@intel_blackhole-draw_gles3,Crash
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp,Fail
|
||||
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 1.1@line-smooth-stipple,Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 2x,Fail
|
||||
spec@!opengl 1.1@linestipple@Factor 3x,Fail
|
||||
spec@!opengl 1.1@linestipple,Fail
|
||||
spec@!opengl 1.1@linestipple@Line loop,Fail
|
||||
spec@!opengl 1.1@linestipple@Line strip,Fail
|
||||
spec@!opengl 1.1@linestipple@Restarting lines within a single Begin-End block,Fail
|
||||
spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
spec@!opengl 1.1@polygon-mode,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl [email protected],Fail
|
||||
spec@!opengl 2.1@pbo,Fail
|
||||
spec@!opengl 2.1@pbo@test_polygon_stip,Fail
|
||||
spec@!opengl 2.1@polygon-stipple-fs,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb flush,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb generated,Fail
|
||||
spec@!opengl 3.1@primitive-restart-xfb written,Fail
|
||||
spec@!opengl es [email protected],Fail
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
afbcp-spec@arb_texture_view@tex-view,Fail
|
||||
KHR-GLES31.core.draw_indirect.advanced-twoPass-transformFeedback-arrays,Fail
|
||||
spec@!opengl 1.1@large-tex,Fail
|
||||
spec@arb_texture_view@tex-view,Fail
|
||||
[email protected]@execution@glsl-packed-back-color,Fail
|
||||
@@ -0,0 +1,219 @@
|
||||
# Cause a "gpu sched timeout" (fixed by sched increase to 10s)
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_texel_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_vertex_buffer.1048576_vertex_buffer_stride_2
|
||||
dEQP-VK.memory.pipeline_barrier.transfer_dst_storage_texel_buffer.1048576
|
||||
|
||||
# Sometime timeout
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_storage_buffer.1048576
|
||||
|
||||
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.2d.astc_5x4_srgb_block.r8g8_srgb.general_general_linear
|
||||
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.2d.r16g16_sfloat.a8b8g8r8_unorm_pack32.general_general_linear
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.a2r10g10b10_sint_pack32.a2r10g10b10_unorm_pack32.optimal_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.b8g8r8a8_uint.r32_sfloat.general_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.r8g8_uint.r8g8_unorm.general_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.r8g8b8a8_uint.r8g8b8a8_srgb.general_general
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_3d.astc_10x8_srgb_block.astc_10x8_unorm_block.general_general
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_3d.eac_r11g11_unorm_block.astc_4x4_unorm_block.general_optimal
|
||||
|
||||
dEQP-VK.api.image_clearing.core.clear_color_image.2d.linear.remaining_array_layers_twostep.r16g16_sint_33x128
|
||||
dEQP-VK.api.image_clearing.core.clear_color_image.2d.optimal.remaining_array_layers.r16g16_sfloat
|
||||
dEQP-VK.api.image_clearing.dedicated_allocation.clear_color_image.2d.linear.remaining_array_layers_twostep.a2b10g10r10_sint_pack32_33x128
|
||||
|
||||
dEQP-VK.binding_model.buffer_device_address.set3.depth3.basessbo.load.nostore.single.std140.frag
|
||||
dEQP-VK.binding_model.mutable_descriptor.single.switches.acceleration_structure_khr_uniform_texel_buffer.update_write.no_source.no_source.pool_no_types.pre_update.no_array.rgen
|
||||
dEQP-VK.binding_model.shader_access.primary_cmd_buf.bind.sampler_immutable.fragment.multiple_descriptor_sets.multiple_discontiguous_descriptors.1d_array_base_slice
|
||||
dEQP-VK.binding_model.shader_access.primary_cmd_buf.bind.with_template.sampler_immutable.tess_eval.multiple_arbitrary_descriptors.2d
|
||||
dEQP-VK.binding_model.shader_access.secondary_cmd_buf.bind.sampler_immutable.vertex_fragment.single_descriptor.1d_base_mip
|
||||
|
||||
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.instanced.draw_vk_primitive_topology_point_list
|
||||
dEQP-VK.draw.renderpass.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list
|
||||
|
||||
dEQP-VK.dynamic_rendering.complete_secondary_cmd_buff.suballocation.unused_clear_attachments.stencilonly_d32s8_used
|
||||
dEQP-VK.dynamic_rendering.graphics_pipeline_library.dedicated_allocation.formats.r16g16b16a16_uint.input.dont_care.store.self_dep_draw
|
||||
|
||||
dEQP-VK.glsl.arrays.declaration.implicit_size_float_vec3_fragment
|
||||
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_bool_float_int_to_mat2x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_bool_float_int_to_mat3x2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_vec2_bool_bvec2_to_mat2x4_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bvec2_bvec2_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bvec3_float_ivec2_to_mat3x2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.float_bvec4_ivec4_bool_bool_int_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.int_int_int_int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.int_ivec2_int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.ivec4_ivec4_ivec4_to_mat3x4_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec2_bvec2_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec3_ivec3_to_mat3x2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec3_vec3_vec2_to_mat4x2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2_to_mat2x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2x4_to_mat2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat4_to_mat2x4_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.bool_to_mat4x3_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.uint_to_mat3x2_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.uint_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.bool_to_ivec4_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.int_to_uvec2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.int_to_vec2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_vec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_bool_to_bvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_to_uvec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_to_vec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_ivec2_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bvec2_int_to_bvec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bvec2_int_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.float_float_float_to_bvec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_int_int_to_uvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_int_int_to_uvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_to_bvec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_to_ivec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_ivec2_int_to_bvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_uint_to_ivec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_uvec2_bool_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_bvec2_to_ivec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_vec2_to_uvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_vec2_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec3_float_to_bvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_scalar.ivec2_to_int_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_scalar.ivec4_to_uint_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec3_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec4_to_ivec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec4_to_vec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec3_to_uvec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_vec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.uvec4_to_bvec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.uvec4_to_uvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec2_to_vec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec3_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec3_to_vec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec4_to_ivec2_fragment
|
||||
|
||||
dEQP-VK.glsl.derivate.fwidthcoarse.texture.float.vec2_highp
|
||||
|
||||
dEQP-VK.glsl.functions.control_flow.simple_return_fragment
|
||||
dEQP-VK.glsl.functions.datatypes.mat3x4_fragment
|
||||
dEQP-VK.glsl.functions.declarations.void_vs_no_void_vertex
|
||||
dEQP-VK.glsl.functions.qualifiers.in_highp_float_vertex
|
||||
dEQP-VK.glsl.functions.qualifiers.inout_lowp_float_vertex
|
||||
|
||||
dEQP-VK.glsl.indexing.matrix_subscript.mat4_static_loop_write_dynamic_loop_read_fragment
|
||||
|
||||
dEQP-VK.glsl.linkage.varying.basic_types.mat2
|
||||
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec2_s_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_bbb_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_r_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_xyz_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec4_wx_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec2_rr_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec2_x_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_bgr_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_ppt_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_rgb_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_rrr_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xyyx_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xz_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xzx_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_yxy_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_qpts_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_qqqt_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_s_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_ttq_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_wwwy_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec2_s_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec2_xyxx_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec3_grg_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec3_zzz_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_aaa_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_aaag_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qp_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qppq_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qpts_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stpq_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stss_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stss_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_www_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_x_fragment
|
||||
|
||||
dEQP-VK.glsl.arrays.constructor.int4_fragment
|
||||
dEQP-VK.glsl.arrays.declaration.implicit_size_int_ivec3_fragment
|
||||
|
||||
dEQP-VK.image.store.with_format.2d_array.r8_snorm_single_layer
|
||||
dEQP-VK.image.subresource_layout.2d.4_levels.r8g8b8a8_uint_offset
|
||||
dEQP-VK.image.texel_view_compatible.graphic.extended.1d_image.texture_read.astc_5x4_unorm_block.r32g32b32a32_sint
|
||||
dEQP-VK.image.texel_view_compatible.graphic.extended.1d_image.texture_read.etc2_r8g8b8a1_srgb_block.r32g32_sint
|
||||
|
||||
dEQP-VK.pipeline.fast_linked_library.stencil.format.d24_unorm_s8_uint.states.fail_decc.pass_inv.dfail_inv.comp_equal
|
||||
|
||||
dEQP-VK.pipeline.monolithic.image.suballocation.sampling_type.combined.view_type.cube.format.r32_sint.count_4.size.13x13
|
||||
dEQP-VK.pipeline.monolithic.sampler.view_type.1d_array.format.r5g6b5_unorm_pack16.address_modes.all_mode_clamp_to_border_custom_1000
|
||||
|
||||
dEQP-VK.pipeline.pipeline_library.blend.format.a2b10g10r10_unorm_pack32.states.color_sas_sa_min_alpha_sa_sas_sub-color_1mda_dc_max_alpha_1mdc_sa_add-color_1mdc_cc_min_alpha_1mcc_dc_max-color_da_z_rsub_alpha_1mda_cc_sub
|
||||
dEQP-VK.pipeline.pipeline_library.depth.nocolor.format.d24_unorm_s8_uint.compare_ops.triangle_list_always_greater_less_always
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.format.d24_unorm_s8_uint.states.fail_keep.pass_wrap.dfail_keep.comp_not_equal
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_decw.pass_incc.dfail_zero.comp_greater_or_equal
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_incc.pass_decc.dfail_zero.comp_never
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_incc.pass_repl.dfail_repl.comp_less
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_wrap.pass_inv.dfail_wrap.comp_less
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_zero.pass_inv.dfail_inv.comp_greater_or_equal
|
||||
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16_unorm.input.load.store.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16_uint.input.load.dont_care.draw
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16b16a16_sfloat.input.load.dont_care.clear_draw
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16b16a16_uint.input.load.store.clear_draw_use_input_aspect
|
||||
|
||||
dEQP-VK.renderpass.suballocation.formats.d16_unorm.input.clear.store.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.formats.r32_sint.input.load.store.clear_draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.formats.r32g32_uint.input.load.dont_care.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.subpass_dependencies.external_subpass.render_size_64_64.render_passes_2
|
||||
|
||||
dEQP-VK.renderpass2.suballocation.formats.a8b8g8r8_sint_pack32.input.load.dont_care.draw
|
||||
dEQP-VK.renderpass2.suballocation.formats.a8b8g8r8_srgb_pack32.input.load.store.clear_draw
|
||||
|
||||
dEQP-VK.spirv_assembly.type.vec2.i64.shift_left_logical_shift8_comp
|
||||
dEQP-VK.spirv_assembly.type.vec2.u32.inotequal_comp
|
||||
|
||||
dEQP-VK.ssbo.readonly.layout.single_struct.single_buffer.std140_instance_array
|
||||
|
||||
dEQP-VK.synchronization.op.single_queue.barrier.write_ssbo_compute_indirect_read_ubo_fragment.buffer_16384
|
||||
dEQP-VK.synchronization.op.single_queue.binary_semaphore.write_clear_color_image_read_image_compute_indirect.image_128x128_r32g32b32a32_sfloat
|
||||
dEQP-VK.synchronization.op.single_queue.event.write_clear_color_image_read_image_compute_indirect.image_64x64x8_r32_sfloat
|
||||
dEQP-VK.synchronization.signal_order.shared_binary_semaphore.write_ssbo_tess_control_read_ssbo_fragment.buffer_16384_opaque_fd
|
||||
dEQP-VK.synchronization.signal_order.shared_timeline_semaphore.write_image_compute_read_copy_image.image_128x128_r8_unorm_opaque_fd
|
||||
dEQP-VK.synchronization.timeline_semaphore.device_host.write_blit_image_read_image_compute_indirect.image_128x128_r16_uint
|
||||
|
||||
dEQP-VK.synchronization2.cross_instance.suballocated.write_image_compute_indirect_read_copy_image.image_128x128_r16_uint_binary_semaphore_fence_fd
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ssbo_fragment.buffer_16384_specialized_access_flag
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_copy_image_read_blit_image.image_128x128_r16_uint
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_image_compute_read_image_compute_indirect.image_64x64x8_r32_sfloat
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ssbo_fragment.buffer_16384_specialized_access_flag
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ubo_fragment.buffer_16384
|
||||
dEQP-VK.synchronization2.op.single_queue.event.write_clear_color_image_read_image_compute_indirect.image_128_r32_uint
|
||||
dEQP-VK.synchronization2.signal_order.shared_binary_semaphore.write_copy_buffer_read_ssbo_compute_indirect.buffer_262144_opaque_fd
|
||||
dEQP-VK.synchronization2.signal_order.shared_timeline_semaphore.write_ssbo_compute_indirect_read_ssbo_compute_indirect.buffer_262144_opaque_fd
|
||||
|
||||
dEQP-VK.texture.explicit_lod.2d.sizes.128x128_linear_linear_mipmap_linear_clamp
|
||||
dEQP-VK.texture.filtering.3d.combinations.nearest.linear.clamp_to_edge.repeat.clamp_to_border
|
||||
dEQP-VK.texture.shadow.1d_array.linear_mipmap_linear.equal_x8_d24_unorm_pack32
|
||||
dEQP-VK.texture.shadow.cube.linear_mipmap_nearest.equal_d24_unorm_s8_uint
|
||||
|
||||
# No clue what's happening to these on CI lately
|
||||
dEQP-VK.wsi.*.swapchain.simulate_oom.*
|
||||
|
||||
# With linux kernel 6.13-rc4 uprev
|
||||
dEQP-GLES31.functional.copy_image.compressed.viewclass_astc_8x6_rgba.rgba_astc_8x6_khr_srgb8_alpha8_astc_8x6_khr.texture3d_to_cubemap
|
||||
|
||||
glx@glx-visuals-depth
|
||||
spec@!opengl 1.1@longprim
|
||||
spec@!opengl 1.1@teximage-colors gl_alpha12
|
||||
spec@ext_framebuffer_multisample@accuracy all_samples color small depthstencil
|
||||
|
||||
# Flaking since May 4, 2026.
|
||||
# https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15383#note_3456035
|
||||
KHR-GLES31.core.draw_indirect.advanced-twoPass-transformFeedback-arrays
|
||||
@@ -0,0 +1,143 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_gpu_shader5
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_render_snorm
|
||||
GL_EXT_robustness
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_clock
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shader_pixel_local_storage
|
||||
GL_EXT_shader_realtime_clock
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_astc_decode_mode
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_filter_anisotropic
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_query_lod
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_robust_buffer_access_behavior
|
||||
GL_KHR_robustness
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_gpu_shader5
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_sample_shading
|
||||
GL_OES_sample_variables
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_shader_multisample_interpolation
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,14 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# tests leak on separate render+display devices:
|
||||
# https://gerrit.khronos.org/c/vk-gl-cts/+/19625
|
||||
asan-dEQP-VK.image.swapchain_mutable.direct_drm.*
|
||||
asan-dEQP-VK.wsi.acquire_drm_display.*
|
||||
asan-dEQP-VK.wsi.direct_drm.*
|
||||
|
||||
# https://gitlab.freedesktop.org/mesa/mesa/-/issues/15116
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_modes.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.deferred_alloc.fifo.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_fence.fifo.*
|
||||
@@ -0,0 +1,7 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
dEQP-VK.api.external.fence.sync_fd.export_multiple_times_temporary
|
||||
dEQP-VK.api.external.semaphore.sync_fd.export_multiple_times_temporary
|
||||
dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_extent
|
||||
Whitespace-only changes.
@@ -0,0 +1,13 @@
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_repeat
|
||||
dEQP-GLES3.functional.shaders.fragdepth.*
|
||||
dEQP-GLES31.functional.draw_base_vertex.*
|
||||
dEQP-GLES31.functional.shaders.sample_variables.sample_mask.*
|
||||
dEQP-GLES31.functional.texture.gather.*repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hardlight
|
||||
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
@@ -0,0 +1,142 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_base_instance
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_gpu_shader5
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_render_snorm
|
||||
GL_EXT_robustness
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_clock
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shader_pixel_local_storage
|
||||
GL_EXT_shader_realtime_clock
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_filter_anisotropic
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_robust_buffer_access_behavior
|
||||
GL_KHR_robustness
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_gpu_shader5
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_sample_shading
|
||||
GL_OES_sample_variables
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_shader_multisample_interpolation
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,9 @@
|
||||
# Warning!
|
||||
# --------
|
||||
# G720 results aren't regularly updated, this is just kept around as a "best
|
||||
# effort" reference of what we expect the results to be.
|
||||
|
||||
# uprev Piglit in Mesa
|
||||
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount-multithread,Crash
|
||||
|
||||
dEQP-VK.glsl.loops.special.do_while_dynamic_iterations.dowhile_trap_vertex,Crash
|
||||
@@ -0,0 +1,215 @@
|
||||
# Warning!
|
||||
# --------
|
||||
# G720 results aren't regularly updated, this is just kept around as a "best
|
||||
# effort" reference of what we expect the results to be.
|
||||
|
||||
# Cause a "gpu sched timeout" (fixed by sched increase to 10s)
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_texel_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_vertex_buffer.1048576_vertex_buffer_stride_2
|
||||
dEQP-VK.memory.pipeline_barrier.transfer_dst_storage_texel_buffer.1048576
|
||||
|
||||
# Sometime timeout
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_storage_buffer.1048576
|
||||
|
||||
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.2d.astc_5x4_srgb_block.r8g8_srgb.general_general_linear
|
||||
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.2d.r16g16_sfloat.a8b8g8r8_unorm_pack32.general_general_linear
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.a2r10g10b10_sint_pack32.a2r10g10b10_unorm_pack32.optimal_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.b8g8r8a8_uint.r32_sfloat.general_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.r8g8_uint.r8g8_unorm.general_optimal
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_2d.r8g8b8a8_uint.r8g8b8a8_srgb.general_general
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_3d.astc_10x8_srgb_block.astc_10x8_unorm_block.general_general
|
||||
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.2d_to_3d.eac_r11g11_unorm_block.astc_4x4_unorm_block.general_optimal
|
||||
|
||||
dEQP-VK.api.image_clearing.core.clear_color_image.2d.linear.remaining_array_layers_twostep.r16g16_sint_33x128
|
||||
dEQP-VK.api.image_clearing.core.clear_color_image.2d.optimal.remaining_array_layers.r16g16_sfloat
|
||||
dEQP-VK.api.image_clearing.dedicated_allocation.clear_color_image.2d.linear.remaining_array_layers_twostep.a2b10g10r10_sint_pack32_33x128
|
||||
|
||||
dEQP-VK.binding_model.buffer_device_address.set3.depth3.basessbo.load.nostore.single.std140.frag
|
||||
dEQP-VK.binding_model.mutable_descriptor.single.switches.acceleration_structure_khr_uniform_texel_buffer.update_write.no_source.no_source.pool_no_types.pre_update.no_array.rgen
|
||||
dEQP-VK.binding_model.shader_access.primary_cmd_buf.bind.sampler_immutable.fragment.multiple_descriptor_sets.multiple_discontiguous_descriptors.1d_array_base_slice
|
||||
dEQP-VK.binding_model.shader_access.primary_cmd_buf.bind.with_template.sampler_immutable.tess_eval.multiple_arbitrary_descriptors.2d
|
||||
dEQP-VK.binding_model.shader_access.secondary_cmd_buf.bind.sampler_immutable.vertex_fragment.single_descriptor.1d_base_mip
|
||||
|
||||
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.instanced.draw_vk_primitive_topology_point_list
|
||||
dEQP-VK.draw.renderpass.instanced.draw_indexed_indirect_vk_primitive_topology_triangle_list
|
||||
|
||||
dEQP-VK.dynamic_rendering.complete_secondary_cmd_buff.suballocation.unused_clear_attachments.stencilonly_d32s8_used
|
||||
dEQP-VK.dynamic_rendering.graphics_pipeline_library.dedicated_allocation.formats.r16g16b16a16_uint.input.dont_care.store.self_dep_draw
|
||||
|
||||
dEQP-VK.glsl.arrays.declaration.implicit_size_float_vec3_fragment
|
||||
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_bool_float_int_to_mat2x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_bool_float_int_to_mat3x2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bool_float_int_vec2_bool_bvec2_to_mat2x4_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bvec2_bvec2_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.bvec3_float_ivec2_to_mat3x2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.float_bvec4_ivec4_bool_bool_int_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.int_int_int_int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.int_ivec2_int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.ivec4_ivec4_ivec4_to_mat3x4_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec2_bvec2_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec3_ivec3_to_mat3x2_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_combine.vec3_vec3_vec2_to_mat4x2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2_to_mat2x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat2x4_to_mat2_vertex
|
||||
dEQP-VK.glsl.conversions.matrix_to_matrix.mat4_to_mat2x4_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.bool_to_mat4x3_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.int_to_mat2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.uint_to_mat3x2_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_matrix.uint_to_mat4x3_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.bool_to_ivec4_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.int_to_uvec2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.int_to_vec2_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.scalar_to_vector.uint_to_vec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_bool_to_bvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_to_uvec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_int_to_vec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bool_float_ivec2_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.bvec2_int_to_bvec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.bvec2_int_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.float_float_float_to_bvec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_int_int_to_uvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_int_int_to_uvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_to_bvec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_int_to_ivec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_ivec2_int_to_bvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_uint_to_ivec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.int_uvec2_bool_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_bvec2_to_ivec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_vec2_to_uvec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec2_vec2_to_vec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_combine.vec3_float_to_bvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_scalar.ivec2_to_int_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_scalar.ivec4_to_uint_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec3_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec4_to_ivec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.bvec4_to_vec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec3_to_uvec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_vec3_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.ivec4_to_vec4_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.uvec4_to_bvec2_fragment
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.uvec4_to_uvec4_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec2_to_vec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec3_to_ivec3_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec3_to_vec2_vertex
|
||||
dEQP-VK.glsl.conversions.vector_to_vector.vec4_to_ivec2_fragment
|
||||
|
||||
dEQP-VK.glsl.derivate.fwidthcoarse.texture.float.vec2_highp
|
||||
|
||||
dEQP-VK.glsl.functions.control_flow.simple_return_fragment
|
||||
dEQP-VK.glsl.functions.datatypes.mat3x4_fragment
|
||||
dEQP-VK.glsl.functions.declarations.void_vs_no_void_vertex
|
||||
dEQP-VK.glsl.functions.qualifiers.in_highp_float_vertex
|
||||
dEQP-VK.glsl.functions.qualifiers.inout_lowp_float_vertex
|
||||
|
||||
dEQP-VK.glsl.indexing.matrix_subscript.mat4_static_loop_write_dynamic_loop_read_fragment
|
||||
|
||||
dEQP-VK.glsl.linkage.varying.basic_types.mat2
|
||||
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec2_s_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_bbb_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_r_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec3_xyz_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_bvec4_wx_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec2_rr_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec2_x_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_bgr_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_ppt_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_rgb_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_rrr_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xyyx_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xz_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_xzx_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec3_yxy_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_qpts_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_qqqt_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_s_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_ttq_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_ivec4_wwwy_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec2_s_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec2_xyxx_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec3_grg_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec3_zzz_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_aaa_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_aaag_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qp_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qppq_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_qpts_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stpq_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stss_fragment
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_stss_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_www_vertex
|
||||
dEQP-VK.glsl.swizzles.vector_swizzles.mediump_vec4_x_fragment
|
||||
|
||||
dEQP-VK.glsl.arrays.constructor.int4_fragment
|
||||
dEQP-VK.glsl.arrays.declaration.implicit_size_int_ivec3_fragment
|
||||
|
||||
dEQP-VK.image.store.with_format.2d_array.r8_snorm_single_layer
|
||||
dEQP-VK.image.subresource_layout.2d.4_levels.r8g8b8a8_uint_offset
|
||||
dEQP-VK.image.texel_view_compatible.graphic.extended.1d_image.texture_read.astc_5x4_unorm_block.r32g32b32a32_sint
|
||||
dEQP-VK.image.texel_view_compatible.graphic.extended.1d_image.texture_read.etc2_r8g8b8a1_srgb_block.r32g32_sint
|
||||
|
||||
dEQP-VK.pipeline.fast_linked_library.stencil.format.d24_unorm_s8_uint.states.fail_decc.pass_inv.dfail_inv.comp_equal
|
||||
|
||||
dEQP-VK.pipeline.monolithic.image.suballocation.sampling_type.combined.view_type.cube.format.r32_sint.count_4.size.13x13
|
||||
dEQP-VK.pipeline.monolithic.sampler.view_type.1d_array.format.r5g6b5_unorm_pack16.address_modes.all_mode_clamp_to_border_custom_1000
|
||||
|
||||
dEQP-VK.pipeline.pipeline_library.blend.format.a2b10g10r10_unorm_pack32.states.color_sas_sa_min_alpha_sa_sas_sub-color_1mda_dc_max_alpha_1mdc_sa_add-color_1mdc_cc_min_alpha_1mcc_dc_max-color_da_z_rsub_alpha_1mda_cc_sub
|
||||
dEQP-VK.pipeline.pipeline_library.depth.nocolor.format.d24_unorm_s8_uint.compare_ops.triangle_list_always_greater_less_always
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.format.d24_unorm_s8_uint.states.fail_keep.pass_wrap.dfail_keep.comp_not_equal
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_decw.pass_incc.dfail_zero.comp_greater_or_equal
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_incc.pass_decc.dfail_zero.comp_never
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_incc.pass_repl.dfail_repl.comp_less
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_wrap.pass_inv.dfail_wrap.comp_less
|
||||
dEQP-VK.pipeline.pipeline_library.stencil.nocolor.format.d24_unorm_s8_uint.states.fail_zero.pass_inv.dfail_inv.comp_greater_or_equal
|
||||
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16_unorm.input.load.store.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16_uint.input.load.dont_care.draw
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16b16a16_sfloat.input.load.dont_care.clear_draw
|
||||
dEQP-VK.renderpass.dedicated_allocation.formats.r16g16b16a16_uint.input.load.store.clear_draw_use_input_aspect
|
||||
|
||||
dEQP-VK.renderpass.suballocation.formats.d16_unorm.input.clear.store.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.formats.r32_sint.input.load.store.clear_draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.formats.r32g32_uint.input.load.dont_care.draw_use_input_aspect
|
||||
dEQP-VK.renderpass.suballocation.subpass_dependencies.external_subpass.render_size_64_64.render_passes_2
|
||||
|
||||
dEQP-VK.renderpass2.suballocation.formats.a8b8g8r8_sint_pack32.input.load.dont_care.draw
|
||||
dEQP-VK.renderpass2.suballocation.formats.a8b8g8r8_srgb_pack32.input.load.store.clear_draw
|
||||
|
||||
dEQP-VK.spirv_assembly.type.vec2.i64.shift_left_logical_shift8_comp
|
||||
dEQP-VK.spirv_assembly.type.vec2.u32.inotequal_comp
|
||||
|
||||
dEQP-VK.ssbo.readonly.layout.single_struct.single_buffer.std140_instance_array
|
||||
|
||||
dEQP-VK.synchronization.op.single_queue.barrier.write_ssbo_compute_indirect_read_ubo_fragment.buffer_16384
|
||||
dEQP-VK.synchronization.op.single_queue.binary_semaphore.write_clear_color_image_read_image_compute_indirect.image_128x128_r32g32b32a32_sfloat
|
||||
dEQP-VK.synchronization.op.single_queue.event.write_clear_color_image_read_image_compute_indirect.image_64x64x8_r32_sfloat
|
||||
dEQP-VK.synchronization.signal_order.shared_binary_semaphore.write_ssbo_tess_control_read_ssbo_fragment.buffer_16384_opaque_fd
|
||||
dEQP-VK.synchronization.signal_order.shared_timeline_semaphore.write_image_compute_read_copy_image.image_128x128_r8_unorm_opaque_fd
|
||||
dEQP-VK.synchronization.timeline_semaphore.device_host.write_blit_image_read_image_compute_indirect.image_128x128_r16_uint
|
||||
|
||||
dEQP-VK.synchronization2.cross_instance.suballocated.write_image_compute_indirect_read_copy_image.image_128x128_r16_uint_binary_semaphore_fence_fd
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ssbo_fragment.buffer_16384_specialized_access_flag
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_copy_image_read_blit_image.image_128x128_r16_uint
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_image_compute_read_image_compute_indirect.image_64x64x8_r32_sfloat
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ssbo_fragment.buffer_16384_specialized_access_flag
|
||||
dEQP-VK.synchronization2.op.single_queue.barrier.write_ssbo_compute_indirect_read_ubo_fragment.buffer_16384
|
||||
dEQP-VK.synchronization2.op.single_queue.event.write_clear_color_image_read_image_compute_indirect.image_128_r32_uint
|
||||
dEQP-VK.synchronization2.signal_order.shared_binary_semaphore.write_copy_buffer_read_ssbo_compute_indirect.buffer_262144_opaque_fd
|
||||
dEQP-VK.synchronization2.signal_order.shared_timeline_semaphore.write_ssbo_compute_indirect_read_ssbo_compute_indirect.buffer_262144_opaque_fd
|
||||
|
||||
dEQP-VK.texture.explicit_lod.2d.sizes.128x128_linear_linear_mipmap_linear_clamp
|
||||
dEQP-VK.texture.filtering.3d.combinations.nearest.linear.clamp_to_edge.repeat.clamp_to_border
|
||||
dEQP-VK.texture.shadow.1d_array.linear_mipmap_linear.equal_x8_d24_unorm_pack32
|
||||
dEQP-VK.texture.shadow.cube.linear_mipmap_nearest.equal_d24_unorm_s8_uint
|
||||
|
||||
# No clue what's happening to these on CI lately
|
||||
dEQP-VK.wsi.*.swapchain.simulate_oom.*
|
||||
|
||||
# With linux kernel 6.13-rc4 uprev
|
||||
dEQP-GLES31.functional.copy_image.compressed.viewclass_astc_8x6_rgba.rgba_astc_8x6_khr_srgb8_alpha8_astc_8x6_khr.texture3d_to_cubemap
|
||||
@@ -0,0 +1,3 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
@@ -0,0 +1,776 @@
|
||||
angle-KHR-GLES31.core.shader_atomic_counters.advanced-usage-multi-stage,Fail
|
||||
angle-KHR-GLES31.core.shader_storage_buffer_object.advanced-matrix-vsfs,Fail
|
||||
angle-KHR-GLES31.core.shader_storage_buffer_object.advanced-usage-sync-vsfs,Fail
|
||||
angle-KHR-GLES31.core.texture_cube_map_array.sampling,Fail
|
||||
|
||||
# deqp calls glCompressedTexImage2D with 0x8b90 which is GL_PALETTE4_RGB8_OES
|
||||
# ANGLE now exposes paletted textures to ES2+, and there's a CTS bug caught by this
|
||||
# https://gitlab.khronos.org/opengl/API/-/issues/278
|
||||
angle-dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed,Fail
|
||||
|
||||
# These fail when we enable mediump
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_nearest_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_nearest_not_divisible,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_linear_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_linear_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_nearest_pot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.rgba8.clamp_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.rgba8.mirror_repeat_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.rgba8.repeat_mirror_nearest_npot,Fail
|
||||
angle-dEQP-GLES3.functional.texture.wrap.rgba8.repeat_repeat_nearest_npot,Fail
|
||||
|
||||
# VKCTS 1.4.4.2 -> 1.4.5.3 uprev
|
||||
dEQP-VK.wsi.xcb.present_timing.basic.timing_queue,Fail
|
||||
dEQP-VK.wsi.xcb.present_timing.query.parallel.parallel,Fail
|
||||
dEQP-VK.wsi.xlib.present_timing.basic.timing_queue,Fail
|
||||
@@ -0,0 +1,86 @@
|
||||
dEQP-VK.api.command_buffers.record_many_draws_primary_2
|
||||
dEQP-VK.api.command_buffers.record_many_draws_secondary_1
|
||||
dEQP-VK.api.command_buffers.record_many_draws_secondary_2
|
||||
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.instanced.dynamic_state_draw_indirect_vk_primitive_topology_triangle_fan_attrib_divisor_1_multiview
|
||||
dEQP-VK.image.non_uniform_offset_sample.texel_fetch_offset.single_mip_frag
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_uniform_texel_buffer.1048576
|
||||
dEQP-VK.memory.pipeline_barrier.transfer_dst_uniform_buffer.1048576
|
||||
dEQP-VK.renderpasses.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.s8_uint.depth_zero_stencil_zero_unused_resolve_testing_stencil_samplemask
|
||||
dEQP-VK.renderpasses.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint.depth_average_stencil_max_unused_resolve_testing_depth
|
||||
dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.buffer_size_2_24
|
||||
dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.non_resident_buffer_copy_src_alloc_none_16777216
|
||||
dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.non_resident_buffer_copy_src_alloc_partial_16777216
|
||||
dEQP-VK.subgroups.arithmetic.graphics.subgroupor_i16vec2
|
||||
dEQP-VK.subgroups.arithmetic.graphics.subgroupxor_uvec3
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshuffle_u16vec3
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshuffledown_uint64_t_constant
|
||||
dEQP-VK.texture.explicit_lod.2d.sizes.128x128_nearest_nearest_mipmap_nearest_clamp
|
||||
|
||||
# deqp-vk: ../src/panfrost/vulkan/panvk_image.c:346: panvk_image_get_mod_from_list: Assertion `!"Invalid modifier"' failed.
|
||||
dEQP-VK.wsi.wayland.swapchain.create.image_extent
|
||||
dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_extent
|
||||
|
||||
angle-dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_sample_coverage
|
||||
angle-dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_alpha_to_coverage
|
||||
angle-KHR-GLES31.core.compute_shader.sso-case2
|
||||
angle-KHR-GLES31.core.shader_image_load_store.basic-allTargets-atomicCS
|
||||
angle-KHR-GLES31.core.shader_image_load_store.basic-allTargets-loadStoreVS
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_2500
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_1000x1000_drawcount_1
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_1
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_8
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_2500
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_1200x1200_drawcount_1
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_1200x1200_drawcount_8
|
||||
angle-multisample-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_1500x1500_drawcount_1
|
||||
|
||||
# Appears just beforehand:
|
||||
# 19:50:56.843: [ 92.880197] panthor 48000000.gpu: [drm] *ERROR* CSG 7 update request timedout
|
||||
# 19:50:56.843: [ 92.988186] panthor 48000000.gpu: [drm] *ERROR* CSG 7 update request timedout
|
||||
# 19:50:56.843: [ 92.995306] panthor 48000000.gpu: [drm] *ERROR* CSG suspend failed, escalating to termination
|
||||
dEQP-VK.sparse_resources.buffer.ssbo.sparse_residency.non_resident_buffer_copy_src_alloc_partial_16777216
|
||||
|
||||
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.instanced.dynamic_state_draw_indexed_indirect_vk_primitive_topology_point_list_attrib_divisor_20_multiview_maintenance_5
|
||||
dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
|
||||
dEQP-VK.draw.renderpass.instanced.draw_indexed_vk_primitive_topology_triangle_fan_attrib_divisor_2_multiview_maintenance_5
|
||||
dEQP-VK.graphicsfuzz.cov-global-loop-counter-accumulate-integer-condition-large-array-elements
|
||||
dEQP-VK.graphicsfuzz.cov-variable-copy-in-function-tex-sample
|
||||
dEQP-VK.image.swapchain_mutable.wayland.2d.b8g8r8a8_unorm_r8g8b8a8_srgb_copy_copy_format_list
|
||||
dEQP-VK.memory.pipeline_barrier.host_write_vertex_buffer.1048576_vertex_buffer_stride_2
|
||||
dEQP-VK.pipeline.fast_linked_library.stencil.format.d24_unorm_s8_uint.states.fail_decw.pass_zero.dfail_wrap.comp_greater.any
|
||||
dEQP-VK.subgroups.arithmetic.graphics.subgroupexclusiveadd_u64vec2
|
||||
dEQP-VK.subgroups.arithmetic.graphics.subgroupinclusivemax_uint8_t
|
||||
dEQP-VK.subgroups.arithmetic.graphics.subgroupmin_int16_t
|
||||
dEQP-VK.subgroups.ballot_broadcast.graphics.subgroupbroadcastfirst_u8vec2
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupclusteredrotate_u16vec3_constant
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshuffledown_float_constant
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshufflexor_i8vec2_dynamically_uniform
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshufflexor_ivec2
|
||||
dEQP-VK.synchronization.op.single_queue.fence.write_blit_image_read_image_compute.image_128x128_r8g8b8a8_unorm
|
||||
dEQP-VK.synchronization.signal_order.timeline_semaphore.write_copy_image_read_image_compute.image_128x128_r16_uint
|
||||
dEQP-VK.texture.explicit_lod.2d.sizes.128x128_linear_linear_mipmap_linear_clamp
|
||||
dEQP-VK.texture.filtering.cube.formats.a1r5g5b5_unorm.linear.seamless
|
||||
dEQP-VK.wsi.wayland.maintenance1.scaling.resize_window.immediate.aspect_stretch.max_min.swapchain_smaller_taller_aspect
|
||||
dEQP-VK.wsi.wayland.present_id_wait.wait.single_no_timeout
|
||||
dEQP-VK.wsi.wayland.swapchain.create.clipped
|
||||
dEQP-VK.wsi.wayland.swapchain.render.basic
|
||||
dEQP-VK.wsi.xcb.maintenance1.deferred_alloc.immediate.bind_image
|
||||
dEQP-VK.wsi.xcb.maintenance1.present_modes.heterogenous.immediate_mailbox_immediate
|
||||
dEQP-VK.wsi.xcb.maintenance1.scaling.continuous.one_to_one.max_min.swapchain_smaller_wider_aspect
|
||||
dEQP-VK.wsi.xcb.maintenance1.scaling.demand.aspect_stretch.max_max.swapchain_smaller_wider_aspect
|
||||
dEQP-VK.wsi.xcb.maintenance1.scaling.fifo.aspect_stretch.max_center.swapchain_bigger_same_aspect
|
||||
dEQP-VK.wsi.xcb.swapchain.create.clipped
|
||||
dEQP-VK.wsi.xcb.swapchain.create.image_array_layers
|
||||
dEQP-VK.wsi.xlib.maintenance1.scaling.demand.one_to_one.center_center.swapchain_taller
|
||||
dEQP-VK.wsi.xlib.maintenance1.scaling.resize_window.mailbox.aspect_stretch.center_max.swapchain_smaller_taller_aspect
|
||||
dEQP-VK.wsi.xlib.surface.query_capabilities2
|
||||
|
||||
# Since the weston intermittently crashes on 925, these xfails from VKCTS
|
||||
# 1.4.4.2 -> 1.4.5.3 uprev will sometimes flake into being Skips.
|
||||
dEQP-VK.wsi.xcb.present_timing.basic.timing_queue
|
||||
dEQP-VK.wsi.xcb.present_timing.query.parallel.parallel
|
||||
dEQP-VK.wsi.xlib.present_timing.basic.timing_queue
|
||||
|
||||
# Various subgroups tests are intermittently failing. Just ignore them for now.
|
||||
dEQP-VK.subgroups.*
|
||||
@@ -0,0 +1,16 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Slow tests (>= 30s)
|
||||
dEQP-VK.api.external.fence.sync_fd.export_multiple_times_temporary
|
||||
dEQP-VK.api.external.semaphore.sync_fd.export_multiple_times_temporary
|
||||
|
||||
# https://gitlab.freedesktop.org/mesa/mesa/-/issues/15116
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_modes.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.deferred_alloc.fifo.*
|
||||
dEQP-VK.wsi.xlib.maintenance1.present_fence.fifo.*
|
||||
|
||||
# May time out
|
||||
dEQP-VK.wsi.wayland.maintenance1.present_modes.fifo.change_modes_multi_swapchain
|
||||
dEQP-VK.wsi.wayland.swapchain.render.10swapchains
|
||||
@@ -0,0 +1,12 @@
|
||||
dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.rgb_half_float_oes,Fail
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_bgra_depth_component16,Fail
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16,Fail
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16,Fail
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_bgra_depth_component16,Fail
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_clamp,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_mirror,Fail
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_linear_repeat,Fail
|
||||
@@ -0,0 +1,20 @@
|
||||
dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.add_one_minus_dst_alpha_one_minus_constant_color
|
||||
dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.add_one_minus_dst_alpha_one_minus_dst_color
|
||||
dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.add_src_color_one_minus_constant_alpha
|
||||
dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.subtract_src_alpha_constant_alpha
|
||||
dEQP-GLES2.functional.fragment_ops.blend.rgb_func_alpha_func.dst.one_minus_src_color_dst_alpha
|
||||
dEQP-GLES2.functional.fragment_ops.blend.rgb_func_alpha_func.src.one_minus_constant_color_one_minus_dst_alphar
|
||||
dEQP-GLES2.functional.fragment_ops.random.49
|
||||
dEQP-GLES2.functional.fragment_ops.random.54
|
||||
dEQP-GLES2.functional.fragment_ops.random.93
|
||||
|
||||
# Some of these fail almost every nightly CI job
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_bgra_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_bgra_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
|
||||
|
||||
# fails often on nightly CI
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11
|
||||
@@ -0,0 +1,90 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_sampler_objects
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,3 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
@@ -0,0 +1,201 @@
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.13,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.15,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.18,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.10,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.11,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.12,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.15,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.16,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.17,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.18,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.2,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb10_a2_2d_array,Fail
|
||||
dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba8_2d_array,Fail
|
||||
dEQP-GLES3.functional.texture.specification.texstorage3d.format.srgb8_alpha8_2d_array,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.compressed_color.gather.s_mirrored_repeat_t_clamp_to_border_npot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.compressed_color.gather.s_mirrored_repeat_t_clamp_to_border_pot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.float_depth.gather.s_mirrored_repeat_t_clamp_to_border_npot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.float_depth.gather.s_mirrored_repeat_t_clamp_to_border_pot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.snorm_color.gather.s_mirrored_repeat_t_clamp_to_border_npot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.snorm_color.gather.s_mirrored_repeat_t_clamp_to_border_pot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.unorm_color.gather.s_mirrored_repeat_t_clamp_to_border_npot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.unorm_color.gather.s_mirrored_repeat_t_clamp_to_border_pot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.unorm_depth.gather.s_mirrored_repeat_t_clamp_to_border_npot,Fail
|
||||
dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d.unorm_depth.gather.s_mirrored_repeat_t_clamp_to_border_pot,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.incomplete.mipmap_incomplete,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x,Fail
|
||||
@@ -0,0 +1,26 @@
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
|
||||
# the array tests take us down with a fault:
|
||||
# panfrost ff9a0000.gpu: js fault, js=0, status=INSTR_INVALID_PC
|
||||
# ... and the random tests presumably include some array in with them
|
||||
# flake the lot until it's been root-caused; first seen around 2025-05-07
|
||||
dEQP-GLES3.functional.fragment_out.array..*
|
||||
dEQP-GLES3.functional.fragment_out.random..*
|
||||
|
||||
# These go from Fail to Crash every now and then
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_alpha_to_coverage
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_both
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_both_inverted
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_sample_coverage
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_sample_coverage_inverted
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.stencil
|
||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.all
|
||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.size
|
||||
dEQP-GLES31.functional.texture.multisample.samples_10..*
|
||||
dEQP-GLES31.functional.texture.multisample.samples_12..*
|
||||
dEQP-GLES31.functional.texture.multisample.samples_13..*
|
||||
dEQP-GLES31.functional.texture.multisample.samples_16..*
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.15
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2
|
||||
@@ -0,0 +1,128 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,3 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
Whitespace-only changes.
@@ -0,0 +1,662 @@
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.4,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.13,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.15,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.16,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.18,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.2,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.10,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.11,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.12,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.15,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.16,Fail
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.max_required_draw_buffers.17,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_y,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.incomplete.mipmap_incomplete,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.base_level.level_1,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge,Fail
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_y,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_x,Fail
|
||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min,Fail
|
||||
|
||||
|
||||
# OpenCL below
|
||||
api@clbuildprogram,Fail
|
||||
api@clcompileprogram,Fail
|
||||
api@clgetcommandqueueinfo,Fail
|
||||
api@clgetextensionfunctionaddressforplatform,Fail
|
||||
api@clgetkernelarginfo,Fail
|
||||
api@clgetmemobjectinfo,Fail
|
||||
api@cllinkprogram,Fail
|
||||
api@clsetkernelarg,Fail
|
||||
api@clsetkernelarg@Input checks,Fail
|
||||
program@bitcoin: phatk kernel,Crash
|
||||
program@build@vector-data-types,Fail
|
||||
program@execute@amdgcn-f32-inline-immediates,Fail
|
||||
program@execute@amdgcn-f32-inline-immediates@add integer 64,Fail
|
||||
program@[email protected]_extend_inreg,Fail
|
||||
program@[email protected]_extend_inreg@SALU i16 in i64 0,Fail
|
||||
program@[email protected]_extend_inreg@SALU i32 in i64 0,Fail
|
||||
program@[email protected]_extend_inreg@SALU i8 in i64 0,Fail
|
||||
program@[email protected]_extend_inreg@VALU i16 in i64 0,Fail
|
||||
program@[email protected]_extend_inreg@VALU i32 in i64 0,Fail
|
||||
program@[email protected]_extend_inreg@VALU i8 in i64 0,Fail
|
||||
program@execute@atomic_cmpxchg-local,Fail
|
||||
program@execute@atomic_cmpxchg-local@simple int,Fail
|
||||
program@execute@atomic_cmpxchg-local@simple uint,Fail
|
||||
program@execute@atomic_int32_cmpxchg-local,Fail
|
||||
program@execute@atomic_int32_cmpxchg-local@simple int,Fail
|
||||
program@execute@atomic_int32_cmpxchg-local@simple uint,Fail
|
||||
program@execute@atomic_int32_xchg-global-return,Crash
|
||||
program@execute@atomic_xchg-global-return,Crash
|
||||
program@execute@builtin@builtin-char-abs_diff-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-char-add_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-char-mad_hi-1.0.generated,Crash
|
||||
program@execute@builtin@builtin-char-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-char-mul_hi-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-char-sub_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@nextafter float1,Fail
|
||||
program@execute@[email protected]@nextafter float16,Fail
|
||||
program@execute@[email protected]@nextafter float2,Fail
|
||||
program@execute@[email protected]@nextafter float4,Fail
|
||||
program@execute@[email protected]@nextafter float8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@sign float1,Fail
|
||||
program@execute@[email protected]@sign float16,Fail
|
||||
program@execute@[email protected]@sign float2,Fail
|
||||
program@execute@[email protected]@sign float4,Fail
|
||||
program@execute@[email protected]@sign float8,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated@mad_sat int1,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated@mad_sat int16,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated@mad_sat int2,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated@mad_sat int4,Fail
|
||||
program@execute@builtin@builtin-int-mad_sat-1.0.generated@mad_sat int8,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated@abs_diff long1,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated@abs_diff long16,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated@abs_diff long2,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated@abs_diff long4,Fail
|
||||
program@execute@builtin@builtin-long-abs_diff-1.0.generated@abs_diff long8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@abs long1,Fail
|
||||
program@execute@[email protected]@abs long16,Fail
|
||||
program@execute@[email protected]@abs long2,Fail
|
||||
program@execute@[email protected]@abs long4,Fail
|
||||
program@execute@[email protected]@abs long8,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated@add_sat long1,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated@add_sat long16,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated@add_sat long2,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated@add_sat long4,Fail
|
||||
program@execute@builtin@builtin-long-add_sat-1.0.generated@add_sat long8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@clamp long1,Fail
|
||||
program@execute@[email protected]@clamp long16,Fail
|
||||
program@execute@[email protected]@clamp long2,Fail
|
||||
program@execute@[email protected]@clamp long4,Fail
|
||||
program@execute@[email protected]@clamp long8,Fail
|
||||
program@execute@[email protected]@tss_clamp long16,Fail
|
||||
program@execute@[email protected]@tss_clamp long2,Fail
|
||||
program@execute@[email protected]@tss_clamp long4,Fail
|
||||
program@execute@[email protected]@tss_clamp long8,Fail
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@hadd long1,Fail
|
||||
program@execute@[email protected]@hadd long16,Fail
|
||||
program@execute@[email protected]@hadd long2,Fail
|
||||
program@execute@[email protected]@hadd long4,Fail
|
||||
program@execute@[email protected]@hadd long8,Fail
|
||||
program@execute@builtin@builtin-long-mad_hi-1.0.generated,Crash
|
||||
program@execute@builtin@builtin-long-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@max long1,Fail
|
||||
program@execute@[email protected]@max long16,Fail
|
||||
program@execute@[email protected]@max long2,Fail
|
||||
program@execute@[email protected]@max long4,Fail
|
||||
program@execute@[email protected]@max long8,Fail
|
||||
program@execute@[email protected]@tss_max long16,Fail
|
||||
program@execute@[email protected]@tss_max long2,Fail
|
||||
program@execute@[email protected]@tss_max long4,Fail
|
||||
program@execute@[email protected]@tss_max long8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@min long1,Fail
|
||||
program@execute@[email protected]@min long16,Fail
|
||||
program@execute@[email protected]@min long2,Fail
|
||||
program@execute@[email protected]@min long4,Fail
|
||||
program@execute@[email protected]@min long8,Fail
|
||||
program@execute@[email protected]@tss_min long16,Fail
|
||||
program@execute@[email protected]@tss_min long2,Fail
|
||||
program@execute@[email protected]@tss_min long4,Fail
|
||||
program@execute@[email protected]@tss_min long8,Fail
|
||||
program@execute@builtin@builtin-long-mul_hi-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@popcount long1,Fail
|
||||
program@execute@[email protected]@popcount long16,Fail
|
||||
program@execute@[email protected]@popcount long2,Fail
|
||||
program@execute@[email protected]@popcount long4,Fail
|
||||
program@execute@[email protected]@popcount long8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rhadd long1,Fail
|
||||
program@execute@[email protected]@rhadd long16,Fail
|
||||
program@execute@[email protected]@rhadd long2,Fail
|
||||
program@execute@[email protected]@rhadd long4,Fail
|
||||
program@execute@[email protected]@rhadd long8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rotate long1,Fail
|
||||
program@execute@[email protected]@rotate long16,Fail
|
||||
program@execute@[email protected]@rotate long2,Fail
|
||||
program@execute@[email protected]@rotate long4,Fail
|
||||
program@execute@[email protected]@rotate long8,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated@sub_sat long1,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated@sub_sat long16,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated@sub_sat long2,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated@sub_sat long4,Fail
|
||||
program@execute@builtin@builtin-long-sub_sat-1.0.generated@sub_sat long8,Fail
|
||||
program@execute@builtin@builtin-short-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rotate short1,Fail
|
||||
program@execute@[email protected]@rotate short16,Fail
|
||||
program@execute@[email protected]@rotate short2,Fail
|
||||
program@execute@[email protected]@rotate short4,Fail
|
||||
program@execute@[email protected]@rotate short8,Fail
|
||||
program@execute@builtin@builtin-shuffle-char-uchar,Crash
|
||||
program@execute@builtin@builtin-shuffle-half-ushort,Crash
|
||||
program@execute@builtin@builtin-shuffle-long-ulong,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long16 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long16 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long16 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long16 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long2 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long2 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long2 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long2 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long4 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long4 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long4 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long4 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long8 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long8 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long8 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-long-ulong@shuffle long8 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-short-ushort,Crash
|
||||
program@execute@builtin@builtin-shuffle-uchar-uchar,Crash
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong16 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong16 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong16 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong16 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong2 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong2 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong2 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong2 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong4 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong4 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong4 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong4 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong8 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong8 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong8 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle-ulong-ulong@shuffle ulong8 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle-ushort-ushort,Crash
|
||||
program@execute@builtin@builtin-shuffle2-char-uchar,Crash
|
||||
program@execute@builtin@builtin-shuffle2-half-ushort,Crash
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long16 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long16 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long16 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long16 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long2 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long2 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long2 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long2 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long4 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long4 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long4 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long4 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long8 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long8 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long8 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-long-ulong@shuffle2 long8 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-short-ushort,Crash
|
||||
program@execute@builtin@builtin-shuffle2-uchar-uchar,Crash
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong16 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong16 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong16 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong16 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong2 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong2 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong2 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong2 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong4 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong4 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong4 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong4 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong8 ulong16,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong8 ulong2,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong8 ulong4,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ulong-ulong@shuffle2 ulong8 ulong8,Fail
|
||||
program@execute@builtin@builtin-shuffle2-ushort-ushort,Crash
|
||||
program@execute@builtin@builtin-uchar-abs_diff-1.0.generated,Crash
|
||||
program@execute@builtin@builtin-uchar-add_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-uchar-mad_hi-1.0.generated,Crash
|
||||
program@execute@builtin@builtin-uchar-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-uchar-mul_hi-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-uchar-sub_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated@abs_diff ulong1,Fail
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated@abs_diff ulong16,Fail
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated@abs_diff ulong2,Fail
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated@abs_diff ulong4,Fail
|
||||
program@execute@builtin@builtin-ulong-abs_diff-1.0.generated@abs_diff ulong8,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated@add_sat ulong1,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated@add_sat ulong16,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated@add_sat ulong2,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated@add_sat ulong4,Fail
|
||||
program@execute@builtin@builtin-ulong-add_sat-1.0.generated@add_sat ulong8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@clamp ulong1,Fail
|
||||
program@execute@[email protected]@clamp ulong16,Fail
|
||||
program@execute@[email protected]@clamp ulong2,Fail
|
||||
program@execute@[email protected]@clamp ulong4,Fail
|
||||
program@execute@[email protected]@clamp ulong8,Fail
|
||||
program@execute@[email protected]@tss_clamp ulong16,Fail
|
||||
program@execute@[email protected]@tss_clamp ulong2,Fail
|
||||
program@execute@[email protected]@tss_clamp ulong4,Fail
|
||||
program@execute@[email protected]@tss_clamp ulong8,Fail
|
||||
program@execute@[email protected],Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@hadd ulong1,Fail
|
||||
program@execute@[email protected]@hadd ulong16,Fail
|
||||
program@execute@[email protected]@hadd ulong2,Fail
|
||||
program@execute@[email protected]@hadd ulong4,Fail
|
||||
program@execute@[email protected]@hadd ulong8,Fail
|
||||
program@execute@builtin@builtin-ulong-mad_hi-1.0.generated,Crash
|
||||
program@execute@builtin@builtin-ulong-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@max ulong1,Fail
|
||||
program@execute@[email protected]@max ulong16,Fail
|
||||
program@execute@[email protected]@max ulong2,Fail
|
||||
program@execute@[email protected]@max ulong4,Fail
|
||||
program@execute@[email protected]@max ulong8,Fail
|
||||
program@execute@[email protected]@tss_max ulong16,Fail
|
||||
program@execute@[email protected]@tss_max ulong2,Fail
|
||||
program@execute@[email protected]@tss_max ulong4,Fail
|
||||
program@execute@[email protected]@tss_max ulong8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@min ulong1,Fail
|
||||
program@execute@[email protected]@min ulong16,Fail
|
||||
program@execute@[email protected]@min ulong2,Fail
|
||||
program@execute@[email protected]@min ulong4,Fail
|
||||
program@execute@[email protected]@min ulong8,Fail
|
||||
program@execute@[email protected]@tss_min ulong16,Fail
|
||||
program@execute@[email protected]@tss_min ulong2,Fail
|
||||
program@execute@[email protected]@tss_min ulong4,Fail
|
||||
program@execute@[email protected]@tss_min ulong8,Fail
|
||||
program@execute@builtin@builtin-ulong-mul_hi-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@popcount ulong1,Fail
|
||||
program@execute@[email protected]@popcount ulong16,Fail
|
||||
program@execute@[email protected]@popcount ulong2,Fail
|
||||
program@execute@[email protected]@popcount ulong4,Fail
|
||||
program@execute@[email protected]@popcount ulong8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rhadd ulong1,Fail
|
||||
program@execute@[email protected]@rhadd ulong16,Fail
|
||||
program@execute@[email protected]@rhadd ulong2,Fail
|
||||
program@execute@[email protected]@rhadd ulong4,Fail
|
||||
program@execute@[email protected]@rhadd ulong8,Fail
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rotate ulong1,Fail
|
||||
program@execute@[email protected]@rotate ulong16,Fail
|
||||
program@execute@[email protected]@rotate ulong2,Fail
|
||||
program@execute@[email protected]@rotate ulong4,Fail
|
||||
program@execute@[email protected]@rotate ulong8,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated@sub_sat ulong1,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated@sub_sat ulong16,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated@sub_sat ulong2,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated@sub_sat ulong4,Fail
|
||||
program@execute@builtin@builtin-ulong-sub_sat-1.0.generated@sub_sat ulong8,Fail
|
||||
program@execute@builtin@builtin-ushort-mad_sat-1.0.generated,Crash
|
||||
program@execute@[email protected],Fail
|
||||
program@execute@[email protected]@rotate ushort1,Fail
|
||||
program@execute@[email protected]@rotate ushort16,Fail
|
||||
program@execute@[email protected]@rotate ushort2,Fail
|
||||
program@execute@[email protected]@rotate ushort4,Fail
|
||||
program@execute@[email protected]@rotate ushort8,Fail
|
||||
program@execute@clz-optimizations,Crash
|
||||
program@execute@float-convert_long,Fail
|
||||
program@execute@float-convert_long@convert_long(float),Fail
|
||||
program@execute@float-convert_long@convert_ulong(float),Fail
|
||||
program@execute@global-offset,Fail
|
||||
program@execute@global-offset@3d- input dependent,Fail
|
||||
program@execute@load-hi16,Crash
|
||||
program@execute@load-lo16,Crash
|
||||
program@execute@program-scope-arrays,Crash
|
||||
program@execute@scalar-arithmetic-char,Crash
|
||||
program@execute@scalar-arithmetic-long,Crash
|
||||
program@execute@scalar-arithmetic-uchar,Crash
|
||||
program@execute@scalar-arithmetic-ulong,Crash
|
||||
program@execute@scalar-comparison-char,Crash
|
||||
program@execute@scalar-comparison-long,Fail
|
||||
program@execute@scalar-comparison-long@small_num<=big_num,Fail
|
||||
program@execute@scalar-comparison-long@small_num<big_num,Fail
|
||||
program@execute@scalar-comparison-long@small_num>=big_num,Fail
|
||||
program@execute@scalar-comparison-long@small_num>big_num,Fail
|
||||
program@execute@scalar-comparison-uchar,Crash
|
||||
program@execute@vload@vload-char-constant,Crash
|
||||
program@execute@vload@vload-char-global,Crash
|
||||
program@execute@vload@vload-char-local,Crash
|
||||
program@execute@vload@vload-char-private,Crash
|
||||
program@execute@vload@vload-half-constant,Crash
|
||||
program@execute@vload@vload-half-local,Crash
|
||||
program@execute@vload@vload-half-private,Crash
|
||||
program@execute@vload@vload-short-constant,Crash
|
||||
program@execute@vload@vload-short-local,Crash
|
||||
program@execute@vload@vload-short-private,Crash
|
||||
program@execute@vload@vload-uchar-constant,Crash
|
||||
program@execute@vload@vload-uchar-global,Crash
|
||||
program@execute@vload@vload-uchar-local,Crash
|
||||
program@execute@vload@vload-uchar-private,Crash
|
||||
program@execute@vload@vload-ushort-constant,Crash
|
||||
program@execute@vload@vload-ushort-local,Crash
|
||||
program@execute@vload@vload-ushort-private,Crash
|
||||
program@execute@vstore@vstore_half-float-global,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global float16,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global float2,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global float3,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global float4,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global float8,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global offset float16,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global offset float2,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global offset float3,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global offset float4,Fail
|
||||
program@execute@vstore@vstore_half-float-global@vector store_half global offset float8,Fail
|
||||
program@execute@vstore@vstore_half-float-local,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local float16,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local float2,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local float3,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local float4,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local float8,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local offset float16,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local offset float2,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local offset float3,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local offset float4,Fail
|
||||
program@execute@vstore@vstore_half-float-local@vector store_half local offset float8,Fail
|
||||
program@execute@vstore@vstore_half-float-private,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private float16,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private float2,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private float3,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private float4,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private float8,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private offset float16,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private offset float2,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private offset float3,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private offset float4,Fail
|
||||
program@execute@vstore@vstore_half-float-private@vector store_half private offset float8,Fail
|
||||
program@execute@vstore@vstore-char-global,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global char16,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global char3,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global char4,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global char8,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global offset char16,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global offset char3,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global offset char4,Fail
|
||||
program@execute@vstore@vstore-char-global@vector store global offset char8,Fail
|
||||
program@execute@vstore@vstore-char-local,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local char16,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local char3,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local char4,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local char8,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local offset char16,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local offset char3,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local offset char4,Fail
|
||||
program@execute@vstore@vstore-char-local@vector store local offset char8,Fail
|
||||
program@execute@vstore@vstore-char-private,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private char16,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private char3,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private char4,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private char8,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private offset char16,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private offset char3,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private offset char4,Fail
|
||||
program@execute@vstore@vstore-char-private@vector store private offset char8,Fail
|
||||
program@execute@vstore@vstore-half-global,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global half16,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global half2,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global half3,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global half4,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global half8,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global offset half16,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global offset half2,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global offset half3,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global offset half4,Fail
|
||||
program@execute@vstore@vstore-half-global@vector store global offset half8,Fail
|
||||
program@execute@vstore@vstore-half-local,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local half16,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local half2,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local half3,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local half4,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local half8,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local offset half16,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local offset half2,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local offset half3,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local offset half4,Fail
|
||||
program@execute@vstore@vstore-half-local@vector store local offset half8,Fail
|
||||
program@execute@vstore@vstore-half-private,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private half16,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private half2,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private half3,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private half4,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private half8,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private offset half16,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private offset half2,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private offset half3,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private offset half4,Fail
|
||||
program@execute@vstore@vstore-half-private@vector store private offset half8,Fail
|
||||
program@execute@vstore@vstore-short-global,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global offset short16,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global offset short2,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global offset short3,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global offset short4,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global offset short8,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global short16,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global short2,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global short3,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global short4,Fail
|
||||
program@execute@vstore@vstore-short-global@vector store global short8,Fail
|
||||
program@execute@vstore@vstore-short-local,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local offset short16,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local offset short2,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local offset short3,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local offset short4,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local offset short8,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local short16,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local short2,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local short3,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local short4,Fail
|
||||
program@execute@vstore@vstore-short-local@vector store local short8,Fail
|
||||
program@execute@vstore@vstore-short-private,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private offset short16,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private offset short2,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private offset short3,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private offset short4,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private offset short8,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private short16,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private short2,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private short3,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private short4,Fail
|
||||
program@execute@vstore@vstore-short-private@vector store private short8,Fail
|
||||
program@execute@vstore@vstore-uchar-global,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global offset uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global offset uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global offset uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global offset uchar8,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-global@vector store global uchar8,Fail
|
||||
program@execute@vstore@vstore-uchar-local,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local offset uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local offset uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local offset uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local offset uchar8,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-local@vector store local uchar8,Fail
|
||||
program@execute@vstore@vstore-uchar-private,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private offset uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private offset uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private offset uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private offset uchar8,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private uchar16,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private uchar3,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private uchar4,Fail
|
||||
program@execute@vstore@vstore-uchar-private@vector store private uchar8,Fail
|
||||
program@execute@vstore@vstore-ushort-global,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global offset ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global offset ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global offset ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global offset ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global offset ushort8,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-global@vector store global ushort8,Fail
|
||||
program@execute@vstore@vstore-ushort-local,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local offset ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local offset ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local offset ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local offset ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local offset ushort8,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-local@vector store local ushort8,Fail
|
||||
program@execute@vstore@vstore-ushort-private,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private offset ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private offset ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private offset ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private offset ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private offset ushort8,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private ushort16,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private ushort2,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private ushort3,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private ushort4,Fail
|
||||
program@execute@vstore@vstore-ushort-private@vector store private ushort8,Fail
|
||||
program@execute@vstore@vstorea_half-float-global,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global float8,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global offset float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global offset float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global offset float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global offset float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-global@vector storea_half global offset float8,Fail
|
||||
program@execute@vstore@vstorea_half-float-local,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local float8,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local offset float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local offset float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local offset float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local offset float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-local@vector storea_half local offset float8,Fail
|
||||
program@execute@vstore@vstorea_half-float-private,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private float8,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private offset float16,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private offset float2,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private offset float3,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private offset float4,Fail
|
||||
program@execute@vstore@vstorea_half-float-private@vector storea_half private offset float8,Fail
|
||||
program@run kernel with max work item sizes,Fail
|
||||
|
||||
# (file=input,line=0,column=0,index=0): Unresolved external reference to "_Z21convert_char4_sat_rteDv4_i".
|
||||
program@execute@vector-conversion,Fail
|
||||
@@ -0,0 +1,13 @@
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
|
||||
# First seen early 2025, persisting across both X11 and Wayland, with all the
|
||||
# multithreading tests. Example: https://gitlab.freedesktop.org/mesa/mesa/-/jobs/84352269
|
||||
# Fails with SEGV.
|
||||
.*dEQP-EGL.functional.sharing.gles2.multithread..*
|
||||
|
||||
# the array tests take us down with a fault:
|
||||
# panfrost ff9a0000.gpu: js fault, js=0, status=INSTR_INVALID_PC
|
||||
# ... and the random tests presumably include some array in with them
|
||||
# flake the lot until it's been root-caused; first seen around 2025-05-07
|
||||
dEQP-GLES3.functional.fragment_out.array..*
|
||||
dEQP-GLES3.functional.fragment_out.random..*
|
||||
@@ -0,0 +1,128 @@
|
||||
GL_ANGLE_pack_reverse_row_order
|
||||
GL_ANGLE_texture_compression_dxt3
|
||||
GL_ANGLE_texture_compression_dxt5
|
||||
GL_APPLE_sync
|
||||
GL_APPLE_texture_max_level
|
||||
GL_EXT_blend_func_extended
|
||||
GL_EXT_blend_minmax
|
||||
GL_EXT_buffer_storage
|
||||
GL_EXT_clear_texture
|
||||
GL_EXT_clip_control
|
||||
GL_EXT_color_buffer_float
|
||||
GL_EXT_color_buffer_half_float
|
||||
GL_EXT_compressed_ETC1_RGB8_sub_texture
|
||||
GL_EXT_conservative_depth
|
||||
GL_EXT_copy_image
|
||||
GL_EXT_debug_label
|
||||
GL_EXT_depth_clamp
|
||||
GL_EXT_discard_framebuffer
|
||||
GL_EXT_disjoint_timer_query
|
||||
GL_EXT_draw_buffers
|
||||
GL_EXT_draw_buffers_indexed
|
||||
GL_EXT_draw_elements_base_vertex
|
||||
GL_EXT_draw_instanced
|
||||
GL_EXT_EGL_image_storage
|
||||
GL_EXT_EGL_image_storage_compression
|
||||
GL_EXT_float_blend
|
||||
GL_EXT_frag_depth
|
||||
GL_EXT_instanced_arrays
|
||||
GL_EXT_map_buffer_range
|
||||
GL_EXT_multi_draw_arrays
|
||||
GL_EXT_multi_draw_indirect
|
||||
GL_EXT_multisampled_render_to_texture
|
||||
GL_EXT_multisampled_render_to_texture2
|
||||
GL_EXT_occlusion_query_boolean
|
||||
GL_EXT_polygon_offset_clamp
|
||||
GL_EXT_primitive_bounding_box
|
||||
GL_EXT_read_format_bgra
|
||||
GL_EXT_separate_shader_objects
|
||||
GL_EXT_shader_framebuffer_fetch
|
||||
GL_EXT_shader_framebuffer_fetch_non_coherent
|
||||
GL_EXT_shader_implicit_conversions
|
||||
GL_EXT_shader_integer_mix
|
||||
GL_EXT_shader_io_blocks
|
||||
GL_EXT_shadow_samplers
|
||||
GL_EXT_sRGB
|
||||
GL_EXT_sRGB_write_control
|
||||
GL_EXT_texture_border_clamp
|
||||
GL_EXT_texture_buffer
|
||||
GL_EXT_texture_compression_bptc
|
||||
GL_EXT_texture_compression_dxt1
|
||||
GL_EXT_texture_compression_rgtc
|
||||
GL_EXT_texture_compression_s3tc
|
||||
GL_EXT_texture_compression_s3tc_srgb
|
||||
GL_EXT_texture_format_BGRA8888
|
||||
GL_EXT_texture_mirror_clamp_to_edge
|
||||
GL_EXT_texture_norm16
|
||||
GL_EXT_texture_rg
|
||||
GL_EXT_texture_sRGB_decode
|
||||
GL_EXT_texture_sRGB_R8
|
||||
GL_EXT_texture_sRGB_RG8
|
||||
GL_EXT_texture_storage
|
||||
GL_EXT_texture_storage_compression
|
||||
GL_EXT_texture_type_2_10_10_10_REV
|
||||
GL_EXT_texture_view
|
||||
GL_EXT_unpack_subimage
|
||||
GL_INTEL_blackhole_render
|
||||
GL_KHR_blend_equation_advanced
|
||||
GL_KHR_blend_equation_advanced_coherent
|
||||
GL_KHR_context_flush_control
|
||||
GL_KHR_debug
|
||||
GL_KHR_no_error
|
||||
GL_KHR_parallel_shader_compile
|
||||
GL_KHR_texture_compression_astc_hdr
|
||||
GL_KHR_texture_compression_astc_ldr
|
||||
GL_KHR_texture_compression_astc_sliced_3d
|
||||
GL_MESA_bgra
|
||||
GL_MESA_framebuffer_flip_y
|
||||
GL_MESA_sampler_objects
|
||||
GL_MESA_shader_integer_functions
|
||||
GL_NV_conditional_render
|
||||
GL_NV_draw_buffers
|
||||
GL_NV_fbo_color_attachments
|
||||
GL_NV_generate_mipmap_sRGB
|
||||
GL_NV_image_formats
|
||||
GL_NV_pack_subimage
|
||||
GL_NV_pixel_buffer_object
|
||||
GL_NV_read_buffer
|
||||
GL_NV_read_depth
|
||||
GL_NV_read_depth_stencil
|
||||
GL_NV_read_stencil
|
||||
GL_NV_shader_noperspective_interpolation
|
||||
GL_OES_compressed_ETC1_RGB8_texture
|
||||
GL_OES_copy_image
|
||||
GL_OES_depth_texture
|
||||
GL_OES_depth_texture_cube_map
|
||||
GL_OES_depth24
|
||||
GL_OES_draw_buffers_indexed
|
||||
GL_OES_draw_elements_base_vertex
|
||||
GL_OES_EGL_image
|
||||
GL_OES_EGL_image_external
|
||||
GL_OES_EGL_image_external_essl3
|
||||
GL_OES_EGL_sync
|
||||
GL_OES_element_index_uint
|
||||
GL_OES_fbo_render_mipmap
|
||||
GL_OES_get_program_binary
|
||||
GL_OES_mapbuffer
|
||||
GL_OES_packed_depth_stencil
|
||||
GL_OES_primitive_bounding_box
|
||||
GL_OES_required_internalformat
|
||||
GL_OES_rgb8_rgba8
|
||||
GL_OES_shader_image_atomic
|
||||
GL_OES_shader_io_blocks
|
||||
GL_OES_standard_derivatives
|
||||
GL_OES_stencil8
|
||||
GL_OES_surfaceless_context
|
||||
GL_OES_texture_3D
|
||||
GL_OES_texture_border_clamp
|
||||
GL_OES_texture_buffer
|
||||
GL_OES_texture_float
|
||||
GL_OES_texture_float_linear
|
||||
GL_OES_texture_half_float
|
||||
GL_OES_texture_half_float_linear
|
||||
GL_OES_texture_npot
|
||||
GL_OES_texture_stencil8
|
||||
GL_OES_texture_storage_multisample_2d_array
|
||||
GL_OES_texture_view
|
||||
GL_OES_vertex_array_object
|
||||
GL_OES_vertex_half_float
|
||||
@@ -0,0 +1,12 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Mix of passes, flakes, and fails, with little discernible pattern. Skip.
|
||||
dEQP-GLES3.functional.draw_buffers_indexed.random.*
|
||||
|
||||
# OpenCL timeouts
|
||||
program@execute@[email protected]
|
||||
program@execute@[email protected]
|
||||
program@execute@builtin@builtin-float-lgamma_r-1.0.generated
|
||||
program@execute@[email protected]
|
||||
@@ -0,0 +1,9 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# Slow, and indirect draws are emulated in Midgard anyway.
|
||||
dEQP-GLES31.functional.draw_indirect.compute_interop.large.*
|
||||
@@ -0,0 +1 @@
|
||||
dEQP-VK.wsi.xlib.present_timing.query.parallel.parallel
|
||||
@@ -0,0 +1,505 @@
|
||||
# Arm waiver 4936 (see waivers.xml)
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler1darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler1d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler1d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler1darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler1d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1darray_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2dshadow_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler1darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler1d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler1d_vec2_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler1d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler1d_vec2_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler1d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1d_vec2_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler1d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler1d_vec2_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler1d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec3_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec2_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec2_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec4_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2dshadow_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler1d_vec2_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler1d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec3_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler1d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler1darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturegradoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler1darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler1d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler1darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.texturelodoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1darray_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darray_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darrayshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2darrayshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2dshadow_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler1d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler1d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler1darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler1darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2darray_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2darray_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler2darray_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler1d_vec2_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler1d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler1d_vec2_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler1d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojgradoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1d_vec2_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler1dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler1d_vec2_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler1d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojlodoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec3_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.isampler3d_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec2_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec2_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec2_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec4_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler1dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec3_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2d_vec4_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2dshadow_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2dshadow_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler2dshadow_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_bias_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_bias_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_fixed_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_fixed_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_float_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.sampler3d_float_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler1d_vec2_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler1d_vec2_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler1d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler1d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec3_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec3_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec3_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec4_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec4_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler2d_vec4_vertex
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler3d_bias_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler3d_fragment
|
||||
dEQP-VK.glsl.texture_functions.textureprojoffset_pcoffset.mirrored_repeat.usampler3d_vertex
|
||||
@@ -0,0 +1,135 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
traces-db:
|
||||
download-url: "https://s3.freedesktop.org/mesa-tracie-public/"
|
||||
|
||||
traces:
|
||||
behdad-glyphy/glyphy-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 22bf5262745fd47c5c5eadb93d7cc420
|
||||
glxgears/glxgears-2-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: bcc73608b6e2b5d92bf926d1c21889c7
|
||||
gl-panfrost-t760:
|
||||
checksum: bcc73608b6e2b5d92bf926d1c21889c7
|
||||
pathfinder/demo-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [crash]
|
||||
checksum: c4f5e6bfe0cba230b1aef631c2fa4584
|
||||
gl-panfrost-t760:
|
||||
label: [crash]
|
||||
checksum: c4f5e6bfe0cba230b1aef631c2fa4584
|
||||
pathfinder/canvas_moire-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [crash]
|
||||
checksum: 2fb2c8e83719526cb6c02b6c2e069d61
|
||||
gl-panfrost-t760:
|
||||
label: [crash]
|
||||
checksum: 2fb2c8e83719526cb6c02b6c2e069d61
|
||||
pathfinder/canvas_text_v2-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 35fbb0c520595e948d3a0f3aaa499d77
|
||||
gl-panfrost-t760:
|
||||
checksum: 35fbb0c520595e948d3a0f3aaa499d77
|
||||
gputest/furmark-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 3a86834f9b096bc8dc9033589641c7d8
|
||||
gputest/triangle-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 75c5a2e261d576d115a659f6cd52a90d
|
||||
gl-panfrost-t760:
|
||||
checksum: 75c5a2e261d576d115a659f6cd52a90d
|
||||
humus/Portals-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: ad04db74ea70b7772719080f8a4c499b
|
||||
gl-panfrost-t760:
|
||||
checksum: 4a1937c257107833cd43816daae1d814
|
||||
0ad/0ad-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [skip, timeout]
|
||||
# gimark requires an environment var to work around a bug, disable for now
|
||||
# # Flaky since the introduction of parallel trace replay
|
||||
# gputest/gimark-v2.trace:
|
||||
# gl-panfrost-t860:
|
||||
# label: [skip, flakes, broken]
|
||||
# checksum: 0020a77e25003e4e8db1ce929eed8914
|
||||
# text: Some blue rings are missing on the top-left corner, also the penguin watermark.
|
||||
gputest/pixmark-julia-fp32-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: d85b6967b7c768f28395c5c5dfbcfe3e
|
||||
gputest/plot3d-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: a34223830866a42747db199b04c5e1be
|
||||
humus/AmbientAperture-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: e4c0b930ef99f14305e1ade7f1779c09
|
||||
humus/CelShading-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 521ca6a236b8400cf692e6817b91c739
|
||||
humus/DynamicBranching3-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 32e349d14319b4ae921c146224d26a0e
|
||||
humus/RaytracedShadows-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: f7d5129163beaff3150d98ca7b3f11f6
|
||||
humus/VolumetricFogging2-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: f53b5b1430aa21804c6fed01bce560aa
|
||||
neverball/neverball-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [broken]
|
||||
checksum: 53365059f3b84436c199f1cb6f6d3b35
|
||||
text: Missing the coins and the texture on the "Nev" of the level.
|
||||
paraview/pv-manyspheres-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: 1747f5c7609548f1cf325a7e89ea02a9
|
||||
paraview/pv-waveletcontour-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [crash]
|
||||
checksum: db43c733f3f3d5253e263838e58d9111
|
||||
paraview/pv-waveletvolume-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
checksum: e0b4fba1e77005892c06a4899933d71a
|
||||
valve/counterstrike-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [hang]
|
||||
checksum: b4af9243e34f3de0153b6855dc9c66b6
|
||||
valve/counterstrike-source-v2.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [hang]
|
||||
checksum: bbe74b2171d62fc6738086740e1aa0d8
|
||||
ror/ror-default.trace:
|
||||
gl-panfrost-t860:
|
||||
label: [crash]
|
||||
nheko/nheko-colors.trace:
|
||||
gl-panfrost-t760:
|
||||
label: [skip, flakes]
|
||||
checksum: bfc0f5e19e858c36f6f66dbdb2040944
|
||||
gl-panfrost-t860:
|
||||
label: [skip, flakes]
|
||||
checksum: 03251159007917a90247d2aa2cf5f68b
|
||||
warzone2100/warzone2100-default.trace:
|
||||
gl-panfrost-t760:
|
||||
checksum: da86f0bd148b39855050f042490f5dda
|
||||
gl-panfrost-t860:
|
||||
checksum: e4e92aa7bda9d68a12770d94b3e98f5a
|
||||
blender/blender-demo-cube_diorama.trace:
|
||||
gl-panfrost-t760:
|
||||
label: [unsupported]
|
||||
gl-panfrost-t860:
|
||||
label: [unsupported]
|
||||
blender/blender-demo-ellie_pose.trace:
|
||||
gl-panfrost-t760:
|
||||
label: [unsupported]
|
||||
gl-panfrost-t860:
|
||||
label: [unsupported]
|
||||
unvanquished/unvanquished-lowest.trace:
|
||||
gl-panfrost-t760:
|
||||
label: [unsupported]
|
||||
gl-panfrost-t860:
|
||||
label: [unsupported]
|
||||
unvanquished/unvanquished-ultra.trace:
|
||||
gl-panfrost-t760:
|
||||
label: [unsupported]
|
||||
gl-panfrost-t860:
|
||||
label: [unsupported]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Copyright 2017 Intel Corporation
|
||||
# Copyright 2024 Collabora
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
||||
if get_option('precomp-compiler') == 'system'
|
||||
prog_panfrost_compile = find_program('panfrost_compile', native : true)
|
||||
else
|
||||
prog_panfrost_compile = executable(
|
||||
'panfrost_compile',
|
||||
['pan_compile.c'],
|
||||
link_with : [libpanfrost_compiler],
|
||||
include_directories : [inc_include, inc_src],
|
||||
c_args : [c_msvc_compat_args, no_override_init_args, soong_compat_c_args],
|
||||
link_args : [ld_args_build_id],
|
||||
dependencies : [idep_vtn, idep_nir, idep_mesautil, libpanfrost_dep],
|
||||
# If we can run host binaries directly, just build panfrost_compile for the host.
|
||||
# Most commonly this happens when doing a cross compile from an x86_64 build
|
||||
# machine to an x86 host
|
||||
native : not meson.can_run_host_binaries(),
|
||||
install : get_option('install-precomp-compiler'),
|
||||
)
|
||||
endif
|
||||
@@ -0,0 +1,487 @@
|
||||
/*
|
||||
* Copyright 2024 Collabora Ltd
|
||||
* Copyright 2023 Alyssa Rosenzweig
|
||||
* Copyright 2020 Intel Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler/glsl_types.h"
|
||||
#include "compiler/spirv/nir_spirv.h"
|
||||
#include "panfrost/compiler/bifrost/bifrost_compile.h"
|
||||
#include "panfrost/compiler/pan_compiler.h"
|
||||
#include "panfrost/compiler/pan_nir.h"
|
||||
#include "nir.h"
|
||||
#include "nir_builder.h"
|
||||
#include "nir_builder_opcodes.h"
|
||||
#include "nir_intrinsics.h"
|
||||
#include "nir_precompiled.h"
|
||||
#include "pan_shader.h"
|
||||
#include "shader_enums.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <inttypes.h>
|
||||
#include <libgen.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "util/macros.h"
|
||||
#include "util/u_dynarray.h"
|
||||
#include "util/u_printf.h"
|
||||
#include <sys/mman.h>
|
||||
|
||||
static const struct spirv_to_nir_options spirv_options = {
|
||||
.environment = NIR_SPIRV_OPENCL,
|
||||
.shared_addr_format = nir_address_format_62bit_generic,
|
||||
.global_addr_format = nir_address_format_62bit_generic,
|
||||
.temp_addr_format = nir_address_format_62bit_generic,
|
||||
.constant_addr_format = nir_address_format_64bit_global,
|
||||
.create_library = true,
|
||||
.printf = true,
|
||||
};
|
||||
|
||||
static const nir_shader_compiler_options *
|
||||
get_compiler_options(unsigned arch)
|
||||
{
|
||||
if (arch >= 11)
|
||||
return &bifrost_nir_options_v11;
|
||||
|
||||
if (arch >= 9)
|
||||
return &bifrost_nir_options_v9;
|
||||
|
||||
return &bifrost_nir_options_v6;
|
||||
}
|
||||
|
||||
/* Standard optimization loop */
|
||||
static void
|
||||
optimize(nir_shader *nir)
|
||||
{
|
||||
bool progress;
|
||||
do {
|
||||
progress = false;
|
||||
|
||||
NIR_PASS(progress, nir, nir_split_var_copies);
|
||||
NIR_PASS(progress, nir, nir_split_struct_vars, nir_var_function_temp);
|
||||
NIR_PASS(progress, nir, nir_lower_var_copies);
|
||||
NIR_PASS(progress, nir, nir_lower_vars_to_ssa);
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_copy_prop);
|
||||
NIR_PASS(progress, nir, nir_opt_remove_phis);
|
||||
NIR_PASS(progress, nir, nir_lower_all_phis_to_scalar);
|
||||
NIR_PASS(progress, nir, nir_opt_dce);
|
||||
NIR_PASS(progress, nir, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, nir, nir_opt_cse);
|
||||
|
||||
nir_opt_peephole_select_options peephole_select_options = {
|
||||
.limit = 64,
|
||||
.expensive_alu_ok = true,
|
||||
};
|
||||
NIR_PASS(progress, nir, nir_opt_peephole_select,
|
||||
&peephole_select_options);
|
||||
NIR_PASS(progress, nir, nir_opt_phi_precision);
|
||||
NIR_PASS(progress, nir, nir_opt_algebraic);
|
||||
NIR_PASS(progress, nir, nir_opt_constant_folding);
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_deref);
|
||||
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
|
||||
NIR_PASS(progress, nir, nir_opt_undef);
|
||||
NIR_PASS(progress, nir, nir_lower_undef_to_zero);
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_shrink_vectors, true);
|
||||
NIR_PASS(progress, nir, nir_opt_loop_unroll);
|
||||
|
||||
} while (progress);
|
||||
}
|
||||
|
||||
static nir_shader *
|
||||
compile(void *memctx, const uint32_t *spirv, size_t spirv_size, unsigned arch)
|
||||
{
|
||||
const nir_shader_compiler_options *nir_options = get_compiler_options(arch);
|
||||
|
||||
nir_shader *nir =
|
||||
spirv_to_nir(spirv, spirv_size / 4, NULL, MESA_SHADER_KERNEL, "library",
|
||||
&spirv_options, nir_options);
|
||||
nir_validate_shader(nir, "after spirv_to_nir");
|
||||
nir_validate_ssa_dominance(nir, "after spirv_to_nir");
|
||||
ralloc_steal(memctx, nir);
|
||||
|
||||
nir_fixup_is_exported(nir);
|
||||
|
||||
NIR_PASS(_, nir, nir_lower_system_values);
|
||||
NIR_PASS(_, nir, nir_lower_calls_to_builtins);
|
||||
|
||||
nir_lower_compute_system_values_options cs = {.global_id_is_32bit = true};
|
||||
NIR_PASS(_, nir, nir_lower_compute_system_values, &cs);
|
||||
|
||||
NIR_PASS(_, nir, nir_lower_printf,
|
||||
&(const struct nir_lower_printf_options){
|
||||
.hash_format_strings = true,
|
||||
});
|
||||
|
||||
/* We have to lower away local constant initializers right before we
|
||||
* inline functions. That way they get properly initialized at the top
|
||||
* of the function and not at the top of its caller.
|
||||
*/
|
||||
NIR_PASS(_, nir, nir_lower_variable_initializers, nir_var_function_temp);
|
||||
NIR_PASS(_, nir, nir_lower_returns);
|
||||
NIR_PASS(_, nir, nir_inline_functions);
|
||||
nir_remove_non_exported(nir);
|
||||
NIR_PASS(_, nir, nir_opt_copy_prop);
|
||||
NIR_PASS(_, nir, nir_opt_deref);
|
||||
|
||||
/* We can't deal with constant data, get rid of it */
|
||||
nir_lower_constant_to_temp(nir);
|
||||
|
||||
/* We can go ahead and lower the rest of the constant initializers. We do
|
||||
* this here so that nir_remove_dead_variables and split_per_member_structs
|
||||
* below see the corresponding stores.
|
||||
*/
|
||||
NIR_PASS(_, nir, nir_lower_variable_initializers, ~0);
|
||||
|
||||
/* LLVM loves take advantage of the fact that vec3s in OpenCL are 16B
|
||||
* aligned and so it can just read/write them as vec4s. This results in a
|
||||
* LOT of vec4->vec3 casts on loads and stores. One solution to this
|
||||
* problem is to get rid of all vec3 variables.
|
||||
*/
|
||||
NIR_PASS(_, nir, nir_lower_vec3_to_vec4,
|
||||
nir_var_shader_temp | nir_var_function_temp | nir_var_mem_shared |
|
||||
nir_var_mem_global | nir_var_mem_constant);
|
||||
|
||||
NIR_PASS(_, nir, nir_lower_vars_to_explicit_types, nir_var_uniform,
|
||||
glsl_get_cl_type_size_align);
|
||||
|
||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_uniform,
|
||||
nir_address_format_32bit_offset_as_64bit);
|
||||
|
||||
return nir;
|
||||
}
|
||||
|
||||
static nir_def *
|
||||
load_sysval_from_push_const(nir_builder *b, unsigned offset, unsigned bit_size,
|
||||
unsigned num_comps)
|
||||
{
|
||||
return nir_load_push_constant(
|
||||
b, num_comps, bit_size,
|
||||
nir_imm_int(b, BIFROST_PRECOMPILED_KERNEL_SYSVALS_OFFSET + offset));
|
||||
}
|
||||
|
||||
static bool
|
||||
lower_sysvals(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *_data)
|
||||
{
|
||||
const nir_shader *shader = b->shader;
|
||||
|
||||
unsigned num_comps = intr->def.num_components;
|
||||
unsigned bit_size = intr->def.bit_size;
|
||||
nir_def *val = NULL;
|
||||
b->cursor = nir_before_instr(&intr->instr);
|
||||
|
||||
switch (intr->intrinsic) {
|
||||
case nir_intrinsic_load_base_workgroup_id:
|
||||
/* The base is always 0 */
|
||||
val = nir_imm_zero(b, num_comps, bit_size);
|
||||
break;
|
||||
case nir_intrinsic_load_workgroup_size:
|
||||
/* We are never expecting the local size to be variable */
|
||||
assert(!shader->info.workgroup_size_variable);
|
||||
val = nir_vec3(b, nir_imm_int(b, shader->info.workgroup_size[0]),
|
||||
nir_imm_int(b, shader->info.workgroup_size[1]),
|
||||
nir_imm_int(b, shader->info.workgroup_size[2]));
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_num_workgroups:
|
||||
val = load_sysval_from_push_const(
|
||||
b, offsetof(struct bifrost_precompiled_kernel_sysvals, num_workgroups),
|
||||
bit_size, num_comps);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_ro_sink_address_poly:
|
||||
/* Any address with the top bit set is treated as OOB by the hardware
|
||||
* and any reads return zero.
|
||||
*/
|
||||
val = nir_imm_int64(b, PAN_SHADER_OOB_ADDRESS);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_printf_buffer_address:
|
||||
val = load_sysval_from_push_const(
|
||||
b,
|
||||
offsetof(struct bifrost_precompiled_kernel_sysvals,
|
||||
printf_buffer_address),
|
||||
bit_size, num_comps);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
b->cursor = nir_after_instr(&intr->instr);
|
||||
nir_def_replace(&intr->def, val);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
print_shader(FILE *fp, const char *name, const char *suffix, uint32_t variant,
|
||||
nir_shader *nir, struct pan_shader_info *shader_info,
|
||||
struct util_dynarray *binary)
|
||||
{
|
||||
struct bifrost_precompiled_kernel_info info =
|
||||
bifrost_precompiled_pack_kernel_info(nir, shader_info, binary);
|
||||
size_t sz_B = sizeof(info) + binary->size;
|
||||
size_t sz_el = DIV_ROUND_UP(sz_B, 4);
|
||||
uint32_t *mem = calloc(sz_el, 4);
|
||||
|
||||
memcpy(mem, &info, sizeof(info));
|
||||
memcpy((uint8_t *)mem + sizeof(info), binary->data, binary->size);
|
||||
|
||||
nir_precomp_print_blob(fp, name, suffix, variant, mem, sz_B, true);
|
||||
free(mem);
|
||||
}
|
||||
|
||||
static nir_def *
|
||||
load_kernel_input(nir_builder *b, unsigned num_components, unsigned bit_size,
|
||||
unsigned offset_B)
|
||||
{
|
||||
return nir_load_push_constant(
|
||||
b, num_components, bit_size,
|
||||
nir_imm_int(b, BIFROST_PRECOMPILED_KERNEL_ARGS_OFFSET + offset_B));
|
||||
}
|
||||
|
||||
/* Always assume default as we generate per gen already */
|
||||
static const char *
|
||||
remap_variant(nir_function *func, unsigned variant, const char *target)
|
||||
{
|
||||
return "default";
|
||||
}
|
||||
|
||||
void pan_shader_compile(nir_shader *nir, struct pan_compile_inputs *inputs,
|
||||
struct util_dynarray *binary,
|
||||
struct pan_shader_info *info);
|
||||
|
||||
int
|
||||
main(int argc, const char **argv)
|
||||
{
|
||||
if (argc != 6) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"Usage: %s [library name] [arch] [input spir-v] [output header] [output C]\n",
|
||||
argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char *library_name = argv[1];
|
||||
const char *target_arch_str = argv[2];
|
||||
const char *input_spirv_path = argv[3];
|
||||
const char *output_h_path = argv[4];
|
||||
const char *output_c_path = argv[5];
|
||||
|
||||
unsigned target_arch = atoi(target_arch_str);
|
||||
|
||||
if (target_arch < 4 || target_arch > 14) {
|
||||
fprintf(stderr, "Unsupported target arch %d\n", target_arch);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void *mem_ctx = ralloc_context(NULL);
|
||||
if (mem_ctx == NULL) {
|
||||
fprintf(stderr, "mem_ctx allocation failed\n");
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
int fd = open(input_spirv_path, O_RDONLY);
|
||||
if (fd < 0) {
|
||||
fprintf(stderr, "Failed to open %s\n", input_spirv_path);
|
||||
goto input_spirv_open_failed;
|
||||
}
|
||||
|
||||
off_t spirv_len = lseek(fd, 0, SEEK_END);
|
||||
if (spirv_len < 0) {
|
||||
fprintf(stderr, "Failed to lseek to the end of the file: errno=%d, %s\n",
|
||||
errno, strerror(errno));
|
||||
close(fd);
|
||||
goto input_spirv_open_failed;
|
||||
}
|
||||
|
||||
const void *spirv_map = mmap(NULL, spirv_len, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
close(fd);
|
||||
|
||||
if (spirv_map == MAP_FAILED) {
|
||||
fprintf(stderr, "Failed to mmap the file: errno=%d, %s\n", errno,
|
||||
strerror(errno));
|
||||
goto input_spirv_open_failed;
|
||||
}
|
||||
|
||||
FILE *fp_h = fopen(output_h_path, "w");
|
||||
if (fp_h == NULL) {
|
||||
fprintf(stderr, "Failed to open %s for writting\n", output_h_path);
|
||||
goto input_spirv_open_failed;
|
||||
}
|
||||
|
||||
FILE *fp_c = fopen(output_c_path, "w");
|
||||
if (fp_c == NULL) {
|
||||
fprintf(stderr, "Failed to open %s for writting\n", output_c_path);
|
||||
goto fp_c_open_failed;
|
||||
}
|
||||
|
||||
glsl_type_singleton_init_or_ref();
|
||||
u_printf_singleton_init_or_ref();
|
||||
|
||||
/* POSIX basename can modify the content of the path */
|
||||
char *tmp_out_h_path = strdup(output_h_path);
|
||||
const char *output_h_file_name = basename(tmp_out_h_path);
|
||||
nir_precomp_print_header(fp_c, fp_h, "Collabora Ltd", output_h_file_name);
|
||||
free(tmp_out_h_path);
|
||||
|
||||
nir_shader *nir = compile(mem_ctx, spirv_map, spirv_len, target_arch);
|
||||
|
||||
/* load_preamble works at 32-bit granularity */
|
||||
struct nir_precomp_opts opt = {.arg_align_B = 4};
|
||||
|
||||
nir_foreach_entrypoint(libfunc, nir) {
|
||||
if (target_arch < 6) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"ERROR: Attempting to compile entrypoint %s on Midgard, this is unsupported!\n",
|
||||
libfunc->name);
|
||||
goto invalid_precomp;
|
||||
}
|
||||
|
||||
unsigned nr_vars = nir_precomp_nr_variants(libfunc);
|
||||
|
||||
nir_precomp_print_layout_struct(fp_h, &opt, libfunc);
|
||||
|
||||
for (unsigned v = 0; v < nr_vars; ++v) {
|
||||
nir_shader *s = nir_precompiled_build_variant(
|
||||
libfunc, MESA_SHADER_COMPUTE, v, get_compiler_options(target_arch),
|
||||
&opt, load_kernel_input);
|
||||
|
||||
uint64_t target_gpu_id = (target_arch & 0xf) << 28;
|
||||
|
||||
struct pan_compile_inputs inputs = {
|
||||
.gpu_id = target_gpu_id,
|
||||
.gpu_variant = 0,
|
||||
};
|
||||
|
||||
nir_link_shader_functions(s, nir);
|
||||
NIR_PASS(_, s, nir_inline_functions);
|
||||
nir_remove_non_entrypoints(s);
|
||||
NIR_PASS(_, s, nir_opt_deref);
|
||||
NIR_PASS(_, s, nir_lower_vars_to_ssa);
|
||||
NIR_PASS(_, s, nir_remove_dead_derefs);
|
||||
NIR_PASS(_, s, nir_remove_dead_variables,
|
||||
nir_var_function_temp | nir_var_shader_temp, NULL);
|
||||
|
||||
/* We assign explicit types early so that the optimizer can take
|
||||
* advantage of that information and hopefully get rid of some of our
|
||||
* memcpys.
|
||||
*/
|
||||
NIR_PASS(_, s, nir_lower_vars_to_explicit_types,
|
||||
nir_var_shader_temp | nir_var_function_temp |
|
||||
nir_var_mem_shared | nir_var_mem_global,
|
||||
glsl_get_cl_type_size_align);
|
||||
|
||||
optimize(s);
|
||||
|
||||
NIR_PASS(_, s, nir_remove_dead_variables, nir_var_all, NULL);
|
||||
|
||||
/* Lower again, this time after dead-variables to get more compact
|
||||
* variable layouts.
|
||||
*/
|
||||
NIR_PASS(_, s, nir_lower_vars_to_explicit_types,
|
||||
nir_var_shader_temp | nir_var_function_temp |
|
||||
nir_var_mem_shared | nir_var_mem_global |
|
||||
nir_var_mem_constant,
|
||||
glsl_get_cl_type_size_align);
|
||||
assert(nir->constant_data_size == 0);
|
||||
|
||||
NIR_PASS(_, s, nir_lower_memcpy);
|
||||
|
||||
NIR_PASS(_, s, nir_lower_explicit_io, nir_var_mem_constant,
|
||||
nir_address_format_64bit_global);
|
||||
|
||||
NIR_PASS(_, s, nir_lower_convert_alu_types, NULL);
|
||||
NIR_PASS(_, s, nir_opt_if, 0);
|
||||
NIR_PASS(_, s, nir_opt_idiv_const, 16);
|
||||
|
||||
/* Lower explicit IO here to ensure that we will not clash with
|
||||
* different address formats inside shaders */
|
||||
NIR_PASS(_, s, nir_opt_deref);
|
||||
NIR_PASS(_, s, nir_lower_vars_to_ssa);
|
||||
NIR_PASS(_, s, nir_lower_explicit_io,
|
||||
nir_var_shader_temp | nir_var_function_temp |
|
||||
nir_var_mem_shared | nir_var_mem_global,
|
||||
nir_address_format_62bit_generic);
|
||||
|
||||
optimize(s);
|
||||
|
||||
NIR_PASS(_, s, nir_lower_vars_to_explicit_types,
|
||||
nir_var_shader_temp | nir_var_function_temp,
|
||||
glsl_get_cl_type_size_align);
|
||||
|
||||
NIR_PASS(_, s, nir_lower_vars_to_explicit_types, nir_var_mem_shared,
|
||||
glsl_get_cl_type_size_align);
|
||||
|
||||
pan_preprocess_nir(s, inputs.gpu_id);
|
||||
|
||||
NIR_PASS(_, s, nir_opt_deref);
|
||||
NIR_PASS(_, s, nir_lower_vars_to_ssa);
|
||||
NIR_PASS(_, s, nir_lower_explicit_io,
|
||||
nir_var_shader_temp | nir_var_function_temp |
|
||||
nir_var_mem_shared | nir_var_mem_global,
|
||||
nir_address_format_62bit_generic);
|
||||
|
||||
struct pan_shader_info shader_info = {0};
|
||||
if (target_arch >= 9)
|
||||
shader_info.cs.allow_merging_workgroups =
|
||||
valhall_can_merge_workgroups(s);
|
||||
|
||||
pan_postprocess_nir(s, &inputs, &shader_info);
|
||||
|
||||
NIR_PASS(_, s, nir_shader_intrinsics_pass, lower_sysvals,
|
||||
nir_metadata_control_flow, NULL);
|
||||
|
||||
nir_shader *clone = nir_shader_clone(NULL, s);
|
||||
|
||||
struct util_dynarray shader_binary;
|
||||
shader_binary = UTIL_DYNARRAY_INIT;
|
||||
|
||||
pan_shader_compile(clone, &inputs, &shader_binary, &shader_info);
|
||||
|
||||
assert(shader_info.push.count * 4 <=
|
||||
BIFROST_PRECOMPILED_KERNEL_ARGS_SIZE &&
|
||||
"Too many kernel arguments!");
|
||||
|
||||
print_shader(fp_c, libfunc->name, "default", v, s, &shader_info,
|
||||
&shader_binary);
|
||||
util_dynarray_fini(&shader_binary);
|
||||
ralloc_free(clone);
|
||||
|
||||
ralloc_free(s);
|
||||
}
|
||||
}
|
||||
|
||||
nir_precomp_print_program_enum(fp_h, nir, library_name);
|
||||
nir_precomp_print_dispatch_macros(fp_h, &opt, nir);
|
||||
|
||||
char target_name[12];
|
||||
snprintf(target_name, sizeof(target_name), "default_v%d", target_arch);
|
||||
nir_precomp_print_extern_binary_map(fp_h, library_name, target_name);
|
||||
nir_precomp_print_binary_map(fp_c, nir, library_name, target_name,
|
||||
remap_variant);
|
||||
|
||||
u_printf_singleton_decref();
|
||||
glsl_type_singleton_decref();
|
||||
fclose(fp_c);
|
||||
fclose(fp_h);
|
||||
ralloc_free(mem_ctx);
|
||||
|
||||
return 0;
|
||||
|
||||
invalid_precomp:
|
||||
u_printf_singleton_decref();
|
||||
glsl_type_singleton_decref();
|
||||
fp_c_open_failed:
|
||||
fclose(fp_h);
|
||||
input_spirv_open_failed:
|
||||
ralloc_free(mem_ctx);
|
||||
err_out:
|
||||
return 1;
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
<!--
|
||||
Copyright (C) 2024 Collabora Ltd.
|
||||
SPDX-License-Identifier: MIT
|
||||
-->
|
||||
|
||||
<bifrost>
|
||||
|
||||
<!-- Pseudo instruction representing dual texturing on Bifrost. Lowered to
|
||||
TEXC after register allocation, when the second destination register can
|
||||
be combined with the texture operation descriptor. -->
|
||||
<ins name="TEXC_DUAL" staging="rw=sr_count" pseudo="true" message="tex" dests="2" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6" mask="0xf7"/>
|
||||
<mod name="skip" start="9" size="1" opt="skip"/>
|
||||
<immediate name="sr_count" size="4" pseudo="true"/>
|
||||
<immediate name="sr_count_2" size="4" pseudo="true"/>
|
||||
<mod name="lod_mode" start="13" size="1" default="zero_lod" pseudo="true">
|
||||
<opt>computed_lod</opt>
|
||||
<opt>zero_lod</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<!--- Lowered to *SEG_ADD/+SEG_ADD -->
|
||||
<ins name="SEG_ADD.i64" pseudo="true" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<mod name="seg" size="3">
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>wls</opt>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>tl</opt>
|
||||
</mod>
|
||||
<mod name="preserve_null" size="1" opt="preserve_null"/>
|
||||
</ins>
|
||||
|
||||
<!-- Scheduler lowered to *ATOM_C.i32/+ATOM_CX. Real Valhall instructions. -->
|
||||
<ins name="ATOM_RETURN.i32" pseudo="true" staging="rw=sr_count" message="atomic" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<mod name="atom_opc" start="9" size="5">
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>aadd</opt>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>asmin</opt>
|
||||
<opt>asmax</opt>
|
||||
<opt>aumin</opt>
|
||||
<opt>aumax</opt>
|
||||
<opt>aand</opt>
|
||||
<opt>aor</opt>
|
||||
<opt>axor</opt>
|
||||
<opt>axchg</opt> <!-- For Valhall -->
|
||||
<opt>acmpxchg</opt> <!-- For Valhall -->
|
||||
</mod>
|
||||
<!-- not actually encoded, but used for IR -->
|
||||
<immediate name="sr_count" size="4" pseudo="true"/>
|
||||
</ins>
|
||||
|
||||
<ins name="ATOM1_RETURN.i32" pseudo="true" staging="w=sr_count" message="atomic" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<mod name="atom_opc" start="6" size="3">
|
||||
<opt>ainc</opt>
|
||||
<opt>adec</opt>
|
||||
<opt>aumax1</opt>
|
||||
<opt>asmax1</opt>
|
||||
<opt>aor1</opt>
|
||||
</mod>
|
||||
<!-- not actually encoded, but used for IR -->
|
||||
<immediate name="sr_count" size="4" pseudo="true"/>
|
||||
</ins>
|
||||
|
||||
<ins name="ATOM.i32" pseudo="true" staging="r=sr_count" message="atomic" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<mod name="atom_opc" start="9" size="4">
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>aadd</opt>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<opt>asmin</opt>
|
||||
<opt>asmax</opt>
|
||||
<opt>aumin</opt>
|
||||
<opt>aumax</opt>
|
||||
<opt>aand</opt>
|
||||
<opt>aor</opt>
|
||||
<opt>axor</opt>
|
||||
</mod>
|
||||
<!-- not actually encoded, but used for IR -->
|
||||
<immediate name="sr_count" size="4" pseudo="true"/>
|
||||
</ins>
|
||||
|
||||
<!-- *CUBEFACE1/+CUBEFACE2 pair, two destinations, scheduler lowered -->
|
||||
<ins name="CUBEFACE" pseudo="true" dests="2" unit="add">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="neg0" size="1" opt="neg"/>
|
||||
<mod name="neg1" size="1" opt="neg"/>
|
||||
<mod name="neg2" size="1" opt="neg"/>
|
||||
</ins>
|
||||
|
||||
<ins name="FABSNEG.f32" pseudo="true" unit="fma">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="abs0" start="12" size="1" opt="abs"/>
|
||||
<mod name="widen0" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="FABSNEG.v2f16" pseudo="true" unit="fma">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<mod name="abs0" size="1" opt="abs"/>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="swz0" start="9" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="FCLAMP.f32" pseudo="true" unit="fma">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<mod name="clamp" start="15" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>clamp_0_inf</opt>
|
||||
<opt>clamp_m1_1</opt>
|
||||
<opt>clamp_0_1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="FCLAMP.v2f16" pseudo="true" unit="fma">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<mod name="clamp" start="15" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>clamp_0_inf</opt>
|
||||
<opt>clamp_m1_1</opt>
|
||||
<opt>clamp_0_1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="DISCARD.b32" pseudo="true" dests="0" unit="add">
|
||||
<src start="0"/>
|
||||
<mod name="widen0" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="PHI" pseudo="true" variable_srcs="true" unit="add"/>
|
||||
|
||||
<ins name="COLLECT.i32" pseudo="true" variable_srcs="true" unit="add"/>
|
||||
|
||||
<ins name="SPLIT.i32" pseudo="true" variable_dests="true" unit="add">
|
||||
<src start="0"/>
|
||||
</ins>
|
||||
|
||||
<!-- To model spills / fills -->
|
||||
<ins name="MEMMOV" pseudo="true" unit="add">
|
||||
<src start="0"/>
|
||||
</ins>
|
||||
|
||||
</bifrost>
|
||||
@@ -0,0 +1,180 @@
|
||||
# Notes on opcodes
|
||||
|
||||
_Notes mainly by Connor Abbott extracted from the disassembler_
|
||||
|
||||
LOG_FREXPM:
|
||||
|
||||
// From the ARM patent US20160364209A1:
|
||||
// "Decompose v (the input) into numbers x1 and s such that v = x1 * 2^s,
|
||||
// and x1 is a floating point value in a predetermined range where the
|
||||
// value 1 is within the range and not at one extremity of the range (e.g.
|
||||
// choose a range where 1 is towards middle of range)."
|
||||
//
|
||||
// This computes x1.
|
||||
|
||||
FRCP_FREXPM:
|
||||
|
||||
// Given a floating point number m * 2^e, returns m * 2^{-1}. This is
|
||||
// exactly the same as the mantissa part of frexp().
|
||||
|
||||
FSQRT_FREXPM:
|
||||
// Given a floating point number m * 2^e, returns m * 2^{-2} if e is even,
|
||||
// and m * 2^{-1} if e is odd. In other words, scales by powers of 4 until
|
||||
// within the range [0.25, 1). Used for square-root and reciprocal
|
||||
// square-root.
|
||||
|
||||
|
||||
|
||||
|
||||
FRCP_FREXPE:
|
||||
// Given a floating point number m * 2^e, computes -e - 1 as an integer.
|
||||
// Zero and infinity/NaN return 0.
|
||||
|
||||
FSQRT_FREXPE:
|
||||
// Computes floor(e/2) + 1.
|
||||
|
||||
FRSQ_FREXPE:
|
||||
// Given a floating point number m * 2^e, computes -floor(e/2) - 1 as an
|
||||
// integer.
|
||||
|
||||
LSHIFT_ADD_LOW32:
|
||||
// These instructions in the FMA slot, together with LSHIFT_ADD_HIGH32.i32
|
||||
// in the ADD slot, allow one to do a 64-bit addition with an extra small
|
||||
// shift on one of the sources. There are three possible scenarios:
|
||||
//
|
||||
// 1) Full 64-bit addition. Do:
|
||||
// out.x = LSHIFT_ADD_LOW32.i64 src1.x, src2.x, shift
|
||||
// out.y = LSHIFT_ADD_HIGH32.i32 src1.y, src2.y
|
||||
//
|
||||
// The shift amount is applied to src2 before adding. The shift amount, and
|
||||
// any extra bits from src2 plus the overflow bit, are sent directly from
|
||||
// FMA to ADD instead of being passed explicitly. Hence, these two must be
|
||||
// bundled together into the same instruction.
|
||||
//
|
||||
// 2) Add a 64-bit value src1 to a zero-extended 32-bit value src2. Do:
|
||||
// out.x = LSHIFT_ADD_LOW32.u32 src1.x, src2, shift
|
||||
// out.y = LSHIFT_ADD_HIGH32.i32 src1.x, 0
|
||||
//
|
||||
// Note that in this case, the second argument to LSHIFT_ADD_HIGH32 is
|
||||
// ignored, so it can actually be anything. As before, the shift is applied
|
||||
// to src2 before adding.
|
||||
//
|
||||
// 3) Add a 64-bit value to a sign-extended 32-bit value src2. Do:
|
||||
// out.x = LSHIFT_ADD_LOW32.i32 src1.x, src2, shift
|
||||
// out.y = LSHIFT_ADD_HIGH32.i32 src1.x, 0
|
||||
//
|
||||
// The only difference is the .i32 instead of .u32. Otherwise, this is
|
||||
// exactly the same as before.
|
||||
//
|
||||
// In all these instructions, the shift amount is stored where the third
|
||||
// source would be, so the shift has to be a small immediate from 0 to 7.
|
||||
// This is fine for the expected use-case of these instructions, which is
|
||||
// manipulating 64-bit pointers.
|
||||
//
|
||||
// These instructions can also be combined with various load/store
|
||||
// instructions which normally take a 64-bit pointer in order to add a
|
||||
// 32-bit or 64-bit offset to the pointer before doing the operation,
|
||||
// optionally shifting the offset. The load/store op implicity does
|
||||
// LSHIFT_ADD_HIGH32.i32 internally. Letting ptr be the pointer, and offset
|
||||
// the desired offset, the cases go as follows:
|
||||
//
|
||||
// 1) Add a 64-bit offset:
|
||||
// LSHIFT_ADD_LOW32.i64 ptr.x, offset.x, shift
|
||||
// ld_st_op ptr.y, offset.y, ...
|
||||
//
|
||||
// Note that the output of LSHIFT_ADD_LOW32.i64 is not used, instead being
|
||||
// implicitly sent to the load/store op to serve as the low 32 bits of the
|
||||
// pointer.
|
||||
//
|
||||
// 2) Add a 32-bit unsigned offset:
|
||||
// temp = LSHIFT_ADD_LOW32.u32 ptr.x, offset, shift
|
||||
// ld_st_op temp, ptr.y, ...
|
||||
//
|
||||
// Now, the low 32 bits of offset << shift + ptr are passed explicitly to
|
||||
// the ld_st_op, to match the case where there is no offset and ld_st_op is
|
||||
// called directly.
|
||||
//
|
||||
// 3) Add a 32-bit signed offset:
|
||||
// temp = LSHIFT_ADD_LOW32.i32 ptr.x, offset, shift
|
||||
// ld_st_op temp, ptr.y, ...
|
||||
//
|
||||
// Again, the same as the unsigned case except for the offset.
|
||||
|
||||
---
|
||||
|
||||
ADD ops..
|
||||
|
||||
F16_TO_F32.X: // take the low 16 bits, and expand it to a 32-bit float
|
||||
F16_TO_F32.Y: // take the high 16 bits, and expand it to a 32-bit float
|
||||
|
||||
MOV:
|
||||
// Logically, this should be SWZ.XY, but that's equivalent to a move, and
|
||||
// this seems to be the canonical way the blob generates a MOV.
|
||||
|
||||
|
||||
FRCP_FREXPM:
|
||||
// Given a floating point number m * 2^e, returns m ^ 2^{-1}.
|
||||
|
||||
FLOG_FREXPE:
|
||||
// From the ARM patent US20160364209A1:
|
||||
// "Decompose v (the input) into numbers x1 and s such that v = x1 * 2^s,
|
||||
// and x1 is a floating point value in a predetermined range where the
|
||||
// value 1 is within the range and not at one extremity of the range (e.g.
|
||||
// choose a range where 1 is towards middle of range)."
|
||||
//
|
||||
// This computes s.
|
||||
|
||||
LD_UBO.v4i32
|
||||
// src0 = offset, src1 = binding
|
||||
|
||||
FRCP_FAST.f32:
|
||||
// *_FAST does not exist on G71 (added to G51, G72, and everything after)
|
||||
|
||||
FRCP_TABLE
|
||||
// Given a floating point number m * 2^e, produces a table-based
|
||||
// approximation of 2/m using the top 17 bits. Includes special cases for
|
||||
// infinity, NaN, and zero, and copies the sign bit.
|
||||
|
||||
FRCP_FAST.f16.X
|
||||
// Exists on G71
|
||||
|
||||
FRSQ_TABLE:
|
||||
// A similar table for inverse square root, using the high 17 bits of the
|
||||
// mantissa as well as the low bit of the exponent.
|
||||
|
||||
FRCP_APPROX:
|
||||
// Used in the argument reduction for log. Given a floating-point number
|
||||
// m * 2^e, uses the top 4 bits of m to produce an approximation to 1/m
|
||||
// with the exponent forced to 0 and only the top 5 bits are nonzero. 0,
|
||||
// infinity, and NaN all return 1.0.
|
||||
// See the ARM patent for more information.
|
||||
|
||||
MUX:
|
||||
// For each bit i, return src2[i] ? src0[i] : src1[i]. In other words, this
|
||||
// is the same as (src2 & src0) | (~src2 & src1).
|
||||
|
||||
ST_VAR:
|
||||
// store a varying given the address and datatype from LD_VAR_ADDR
|
||||
|
||||
LD_VAR_ADDR:
|
||||
// Compute varying address and datatype (for storing in the vertex shader),
|
||||
// and store the vec3 result in the data register. The result is passed as
|
||||
// the 3 normal arguments to ST_VAR.
|
||||
|
||||
DISCARD
|
||||
// Conditional discards (discard_if) in NIR. Compares the first two
|
||||
// sources and discards if the result is true
|
||||
|
||||
ATEST.f32:
|
||||
// Implements alpha-to-coverage, as well as possibly the late depth and
|
||||
// stencil tests. The first source is the existing sample mask in R60
|
||||
// (possibly modified by gl_SampleMask), and the second source is the alpha
|
||||
// value. The sample mask is written right away based on the
|
||||
// alpha-to-coverage result using the normal register write mechanism,
|
||||
// since that doesn't need to read from any memory, and then written again
|
||||
// later based on the result of the stencil and depth tests using the
|
||||
// special register.
|
||||
|
||||
BLEND:
|
||||
// This takes the sample coverage mask (computed by ATEST above) as a
|
||||
// regular argument, in addition to the vec4 color in the special register.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Bifrost compiler
|
||||
|
||||
## Register file
|
||||
|
||||
Defined partially in software, partially in hardware.
|
||||
|
||||
## Blend shaders
|
||||
|
||||
R0 - R3: input (color #0)
|
||||
R4 - R7: input (color #1)
|
||||
R8 - R15: general purpose
|
||||
R48: return address
|
||||
|
||||
## Fragment
|
||||
|
||||
Anything live during BLEND must respect blend shader registers.
|
||||
|
||||
R0 - R3: preloaded (message #0)
|
||||
R4 - R7: preloaded (message #1)
|
||||
R57 - R63: preloaded (various)
|
||||
|
||||
R0 - R15: general purpose (full threads)
|
||||
R48 - R63: general purpose (full threads)
|
||||
|
||||
R32 - R47: general purpose (half threads, or v6)
|
||||
@@ -0,0 +1,238 @@
|
||||
# Copyright (C) 2020 Collabora, Ltd.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
SKIP = set(["lane", "lane_dest", "lanes", "lanes", "replicate", "swz", "widen",
|
||||
"swap", "neg", "abs", "not", "sign", "extend", "divzero", "clamp", "sem",
|
||||
"not_result", "skip", "round", "ftz", "z_stencil"])
|
||||
|
||||
TEMPLATE = """
|
||||
#ifndef _BI_BUILDER_H_
|
||||
#define _BI_BUILDER_H_
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
<%
|
||||
# For <32-bit loads/stores, the default extend `none` with a natural sized
|
||||
# input is not encodeable! To avoid a footgun, swap the default to `zext` which
|
||||
# will work as expected
|
||||
ZEXT_DEFAULT = set(["LOAD.i8", "LOAD.i16", "LOAD.i24", "STORE.i8", "STORE.i16", "STORE.i24"])
|
||||
|
||||
def nirtypes(opcode):
|
||||
split = opcode.split('.', 1)
|
||||
if len(split) < 2:
|
||||
split = opcode.split('_')
|
||||
|
||||
if len(split) <= 1:
|
||||
return None
|
||||
|
||||
assert len(split) > 1
|
||||
|
||||
type = split[1]
|
||||
if type[0] == 'v':
|
||||
type = type[2:]
|
||||
|
||||
if type[0] == 'f':
|
||||
return ['nir_type_float']
|
||||
elif type[0] == 's':
|
||||
return ['nir_type_int']
|
||||
elif type[0] == 'u':
|
||||
return ['nir_type_uint']
|
||||
elif type[0] == 'i':
|
||||
return ['nir_type_uint', 'nir_type_int']
|
||||
else:
|
||||
return None
|
||||
|
||||
def condition(opcode, typecheck, sizecheck):
|
||||
cond = ''
|
||||
|
||||
if sizecheck == True:
|
||||
cond += "bitsize == {}".format(typesize(opcode))
|
||||
|
||||
cmpf_mods = ops[opcode]["modifiers"]["cmpf"] if "cmpf" in ops[opcode]["modifiers"] else None
|
||||
if "cmpf" in ops[opcode]["modifiers"]:
|
||||
cond += "{}(".format(' && ' if cond != '' else '')
|
||||
for cmpf in ops[opcode]["modifiers"]["cmpf"]:
|
||||
if cmpf != 'reserved':
|
||||
cond += "{}cmpf == BI_CMPF_{}".format(' || ' if cond[-1] != '(' else '', cmpf.upper())
|
||||
cond += ')'
|
||||
|
||||
if typecheck == True:
|
||||
types = nirtypes(opcode)
|
||||
assert types != None
|
||||
typecheck_cond = ' || '.join(map(lambda T: "type == {}".format(T), types))
|
||||
if cond != '':
|
||||
typecheck_cond = '(' + typecheck_cond + ') && '
|
||||
cond = typecheck_cond + cond
|
||||
|
||||
return 'true' if cond == '' else cond
|
||||
|
||||
def to_suffix(op):
|
||||
return "_to" if op["dests"] > 0 else ""
|
||||
|
||||
%>
|
||||
|
||||
% for opcode in ops:
|
||||
static inline
|
||||
bi_instr * bi_${opcode.replace('.', '_').lower()}${to_suffix(ops[opcode])}(${signature(ops[opcode], modifiers)})
|
||||
{
|
||||
<%
|
||||
op = ops[opcode]
|
||||
nr_dests = "nr_dests" if op["variable_dests"] else op["dests"]
|
||||
nr_srcs = "nr_srcs" if op["variable_srcs"] else src_count(op)
|
||||
%>
|
||||
size_t size = sizeof(bi_instr) + sizeof(bi_index) * (${nr_dests} + ${nr_srcs});
|
||||
bi_instr *I = (bi_instr *) rzalloc_size(b->shader, size);
|
||||
|
||||
I->op = BI_OPCODE_${opcode.replace('.', '_').upper()};
|
||||
I->nr_dests = ${nr_dests};
|
||||
I->nr_srcs = ${nr_srcs};
|
||||
I->dest = (bi_index *) (&I[1]);
|
||||
I->src = I->dest + ${nr_dests};
|
||||
I->debug_info = b->debug_info;
|
||||
|
||||
% if not op["variable_dests"]:
|
||||
% for dest in range(op["dests"]):
|
||||
I->dest[${dest}] = dest${dest};
|
||||
% endfor
|
||||
%endif
|
||||
|
||||
% if not op["variable_srcs"]:
|
||||
% for src in range(src_count(op)):
|
||||
I->src[${src}] = src${src};
|
||||
% endfor
|
||||
% endif
|
||||
|
||||
% for mod in ops[opcode]["modifiers"]:
|
||||
% if not should_skip(mod, opcode):
|
||||
I->${mod} = ${mod};
|
||||
% endif
|
||||
% endfor
|
||||
% if ops[opcode]["rtz"]:
|
||||
I->round = BI_ROUND_RTZ;
|
||||
% elif "round" in ops[opcode]["modifiers"] and use_default_round_mode(opcode):
|
||||
I->round = bi_round_mode(b->shader, ${typesize(opcode)});
|
||||
% endif
|
||||
% for imm in ops[opcode]["immediates"]:
|
||||
I->${imm} = ${imm};
|
||||
% endfor
|
||||
% if opcode in ZEXT_DEFAULT:
|
||||
I->extend = BI_EXTEND_ZEXT;
|
||||
% endif
|
||||
bi_builder_insert(&b->cursor, I);
|
||||
return I;
|
||||
}
|
||||
|
||||
% if ops[opcode]["dests"] == 1 and not ops[opcode]["variable_dests"]:
|
||||
static inline
|
||||
bi_index bi_${opcode.replace('.', '_').lower()}(${signature(ops[opcode], modifiers, no_dests=True)})
|
||||
{
|
||||
return (bi_${opcode.replace('.', '_').lower()}_to(${arguments(ops[opcode])}))->dest[0];
|
||||
}
|
||||
|
||||
%endif
|
||||
<%
|
||||
common_op = opcode.split('.')[0]
|
||||
variants = [a for a in ops.keys() if a.split('.')[0] == common_op]
|
||||
signatures = [signature(ops[op], modifiers, no_dests=True) for op in variants]
|
||||
homogenous = all([sig == signatures[0] for sig in signatures])
|
||||
types = [nirtypes(x) for x in variants]
|
||||
typeful = False
|
||||
for t in types:
|
||||
if t != types[0]:
|
||||
typeful = True
|
||||
|
||||
sizes = [typesize(x) for x in variants]
|
||||
sized = False
|
||||
for size in sizes:
|
||||
if size != sizes[0]:
|
||||
sized = True
|
||||
|
||||
last = opcode == variants[-1]
|
||||
%>
|
||||
% if homogenous and len(variants) > 1 and last:
|
||||
% for (suffix, temp, dests, ret) in (('_to', False, 1, 'instr *'), ('', True, 0, 'index')):
|
||||
% if not temp or ops[opcode]["dests"] > 0:
|
||||
static inline
|
||||
bi_${ret} bi_${common_op.replace('.', '_').lower()}${suffix if ops[opcode]['dests'] > 0 else ''}(${signature(ops[opcode], modifiers, typeful=typeful, sized=sized, no_dests=not dests)})
|
||||
{
|
||||
% for i, variant in enumerate(variants):
|
||||
${"{}if ({})".format("else " if i > 0 else "", condition(variant, typeful, sized))}
|
||||
return (bi_${variant.replace('.', '_').lower()}${to_suffix(ops[opcode])}(${arguments(ops[opcode], temp_dest = temp)}))${"->dest[0]" if temp else ""};
|
||||
% endfor
|
||||
else
|
||||
UNREACHABLE("Invalid parameters for ${common_op}");
|
||||
}
|
||||
|
||||
%endif
|
||||
%endfor
|
||||
%endif
|
||||
%endfor
|
||||
#endif"""
|
||||
|
||||
import sys
|
||||
from bifrost_isa import *
|
||||
from mako.template import Template
|
||||
|
||||
instructions = {}
|
||||
for arg in sys.argv[1:]:
|
||||
new_instructions = parse_instructions(arg, include_pseudo = True)
|
||||
instructions.update(new_instructions)
|
||||
|
||||
ir_instructions = partition_mnemonics(instructions)
|
||||
modifier_lists = order_modifiers(ir_instructions)
|
||||
|
||||
# Generate type signature for a builder routine
|
||||
|
||||
def should_skip(mod, op):
|
||||
# FROUND and HADD only make sense in context of a round mode, so override
|
||||
# the usual skip
|
||||
if mod == "round" and ("FROUND" in op or "HADD" in op):
|
||||
return False
|
||||
|
||||
return mod in SKIP or mod[0:-1] in SKIP
|
||||
|
||||
# Returns whether the default round mode from the shader float controls should
|
||||
# be set on an op that has a round modifier.
|
||||
def use_default_round_mode(op):
|
||||
# FMA_RSCALE/FADD_RSCALE round modifiers are not usable in all situations,
|
||||
# and so the instructions are not used when implementing ops that require
|
||||
# correct rounding.
|
||||
return should_skip("round", op) and \
|
||||
not ("FMA_RSCALE" in op or "FADD_RSCALE" in op)
|
||||
|
||||
def modifier_signature(op):
|
||||
return sorted([m for m in op["modifiers"].keys() if not should_skip(m, op["key"])])
|
||||
|
||||
def signature(op, modifiers, typeful = False, sized = False, no_dests = False):
|
||||
return ", ".join(
|
||||
["bi_builder *b"] +
|
||||
(["nir_alu_type type"] if typeful == True else []) +
|
||||
(["unsigned bitsize"] if sized == True else []) +
|
||||
(["unsigned nr_dests"] if op["variable_dests"] else
|
||||
["bi_index dest{}".format(i) for i in range(0 if no_dests else op["dests"])]) +
|
||||
(["unsigned nr_srcs"] if op["variable_srcs"] else
|
||||
["bi_index src{}".format(i) for i in range(src_count(op))]) +
|
||||
["{} {}".format(
|
||||
"bool" if len(modifiers[T[0:-1]] if T[-1] in "0123" else modifiers[T]) == 2 else
|
||||
"enum bi_" + T[0:-1] if T[-1] in "0123" else
|
||||
"enum bi_" + T,
|
||||
T) for T in modifier_signature(op)] +
|
||||
["uint32_t {}".format(imm) for imm in op["immediates"]])
|
||||
|
||||
def arguments(op, temp_dest = True):
|
||||
dest_pattern = "bi_temp(b->shader)" if temp_dest else 'dest{}'
|
||||
dests = [dest_pattern.format(i) for i in range(op["dests"])]
|
||||
srcs = ["src{}".format(i) for i in range(src_count(op))]
|
||||
|
||||
# Variable source/destinations just pass in the count
|
||||
if op["variable_dests"]:
|
||||
dests = ["nr_dests"]
|
||||
|
||||
if op["variable_srcs"]:
|
||||
srcs = ["nr_srcs"]
|
||||
|
||||
return ", ".join(["b"] + dests + srcs + modifier_signature(op) + op["immediates"])
|
||||
|
||||
print(Template(COPYRIGHT + TEMPLATE).render(ops = ir_instructions, modifiers =
|
||||
modifier_lists, signature = signature, arguments = arguments, src_count =
|
||||
src_count, typesize = typesize, should_skip = should_skip, use_default_round_mode = use_default_round_mode))
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Collabora Ltd.
|
||||
* Copyright (C) 2022 Alyssa Rosenzweig
|
||||
* Copyright (C) 2025 Arm Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "util/u_debug.h"
|
||||
#include "bi_debug.h"
|
||||
|
||||
|
||||
/* clang-format off */
|
||||
static const struct debug_named_value bifrost_debug_options[] = {
|
||||
{"shaders", BIFROST_DBG_SHADERS, "Dump shaders in NIR and MIR"},
|
||||
{"shaderdb", BIFROST_DBG_SHADERDB, "Print statistics"},
|
||||
{"verbose", BIFROST_DBG_VERBOSE, "Disassemble verbosely"},
|
||||
{"internal", BIFROST_DBG_INTERNAL, "Dump even internal shaders"},
|
||||
{"nosched", BIFROST_DBG_NOSCHED, "Force trivial bundling"},
|
||||
{"nopsched", BIFROST_DBG_NOPSCHED, "Disable scheduling for pressure"},
|
||||
{"inorder", BIFROST_DBG_INORDER, "Force in-order bundling"},
|
||||
{"novalidate", BIFROST_DBG_NOVALIDATE, "Skip IR validation"},
|
||||
{"noopt", BIFROST_DBG_NOOPT, "Skip optimization passes"},
|
||||
{"noidvs", BIFROST_DBG_NOIDVS, "Disable IDVS"},
|
||||
{"nosb", BIFROST_DBG_NOSB, "Disable scoreboarding"},
|
||||
{"nopreload", BIFROST_DBG_NOPRELOAD, "Disable message preloading"},
|
||||
{"spill", BIFROST_DBG_SPILL, "Test register spilling"},
|
||||
{"nossara", BIFROST_DBG_NOSSARA, "Disable SSA in register allocation"},
|
||||
{"statsabs", BIFROST_DBG_STATSABS, "Don't normalize statistics"},
|
||||
{"statsfull", BIFROST_DBG_STATSFULL, "Print verbose statistics"},
|
||||
{"debuginfo", BIFROST_DBG_DEBUGINFO, "Print debug information"},
|
||||
DEBUG_NAMED_VALUE_END
|
||||
};
|
||||
/* clang-format on */
|
||||
|
||||
DEBUG_GET_ONCE_FLAGS_OPTION(bifrost_debug, "BIFROST_MESA_DEBUG",
|
||||
bifrost_debug_options, 0)
|
||||
|
||||
unsigned bifrost_debug = 0;
|
||||
|
||||
void
|
||||
bifrost_init_debug_options() {
|
||||
bifrost_debug = debug_get_option_bifrost_debug();
|
||||
}
|
||||
|
||||
bool
|
||||
bifrost_will_dump_shaders(void)
|
||||
{
|
||||
bifrost_init_debug_options();
|
||||
return bifrost_debug & BIFROST_DBG_SHADERS;
|
||||
}
|
||||
|
||||
bool
|
||||
bifrost_want_debug_info(void)
|
||||
{
|
||||
bifrost_init_debug_options();
|
||||
return bifrost_debug & BIFROST_DBG_DEBUGINFO;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Connor Abbott <[email protected]>
|
||||
* Copyright (C) 2019 Lyude Paul <[email protected]>
|
||||
* Copyright (C) 2019 Ryan Houdek <[email protected]>
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef __bi_debug_h__
|
||||
#define __bi_debug_h__
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BIFROST_DBG_MSGS 0x0001
|
||||
#define BIFROST_DBG_SHADERS 0x0002
|
||||
#define BIFROST_DBG_SHADERDB 0x0004
|
||||
#define BIFROST_DBG_VERBOSE 0x0008
|
||||
#define BIFROST_DBG_INTERNAL 0x0010
|
||||
#define BIFROST_DBG_NOSCHED 0x0020
|
||||
#define BIFROST_DBG_INORDER 0x0040
|
||||
#define BIFROST_DBG_NOVALIDATE 0x0080
|
||||
#define BIFROST_DBG_NOOPT 0x0100
|
||||
#define BIFROST_DBG_NOIDVS 0x0200
|
||||
#define BIFROST_DBG_NOSB 0x0400
|
||||
#define BIFROST_DBG_NOPRELOAD 0x0800
|
||||
#define BIFROST_DBG_SPILL 0x1000
|
||||
#define BIFROST_DBG_NOPSCHED 0x2000
|
||||
#define BIFROST_DBG_NOSSARA 0x4000
|
||||
#define BIFROST_DBG_STATSABS 0x8000
|
||||
#define BIFROST_DBG_STATSFULL 0x10000
|
||||
#define BIFROST_DBG_DEBUGINFO 0x20000
|
||||
|
||||
extern unsigned bifrost_debug;
|
||||
|
||||
void bifrost_init_debug_options(void);
|
||||
|
||||
bool bifrost_will_dump_shaders(void);
|
||||
bool bifrost_want_debug_info(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern C */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Copyright © 2014 Intel Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
/*
|
||||
* Implements the algorithms for computing the dominance tree and the
|
||||
* dominance frontier from "A Simple, Fast Dominance Algorithm" by Cooper,
|
||||
* Harvey, and Kennedy.
|
||||
*/
|
||||
|
||||
static bool
|
||||
init_block(bi_block *block, bi_context *ctx)
|
||||
{
|
||||
if (block == bi_entry_block(ctx))
|
||||
block->imm_dom = block;
|
||||
else
|
||||
block->imm_dom = NULL;
|
||||
block->num_dom_children = 0;
|
||||
|
||||
/* See bi_block_dominates */
|
||||
block->dom_pre_index = UINT32_MAX;
|
||||
block->dom_post_index = 0;
|
||||
|
||||
_mesa_set_clear(&block->dom_frontier, NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bi_block *
|
||||
intersect(bi_block *b1, bi_block *b2)
|
||||
{
|
||||
while (b1 != b2) {
|
||||
/*
|
||||
* Note, the comparisons here are the opposite of what the paper says
|
||||
* because we index blocks from beginning -> end (i.e. reverse
|
||||
* post-order) instead of post-order like they assume.
|
||||
*/
|
||||
while (b1->index > b2->index)
|
||||
b1 = b1->imm_dom;
|
||||
while (b2->index > b1->index)
|
||||
b2 = b2->imm_dom;
|
||||
}
|
||||
|
||||
return b1;
|
||||
}
|
||||
|
||||
static bool
|
||||
calc_dominance(bi_block *block)
|
||||
{
|
||||
bi_block *new_idom = NULL;
|
||||
bi_foreach_predecessor(block, p) {
|
||||
bi_block *pred = (*p);
|
||||
|
||||
if (pred->imm_dom) {
|
||||
if (new_idom)
|
||||
new_idom = intersect(pred, new_idom);
|
||||
else
|
||||
new_idom = pred;
|
||||
}
|
||||
}
|
||||
|
||||
if (block->imm_dom != new_idom) {
|
||||
block->imm_dom = new_idom;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
calc_dom_frontier(bi_block *block)
|
||||
{
|
||||
if (block->predecessors.size > 1) {
|
||||
bi_foreach_predecessor(block, p) {
|
||||
bi_block *runner = (*p);
|
||||
|
||||
/* Skip unreachable predecessors */
|
||||
if (runner->imm_dom == NULL)
|
||||
continue;
|
||||
|
||||
while (runner != block->imm_dom) {
|
||||
_mesa_set_add(&runner->dom_frontier, block);
|
||||
runner = runner->imm_dom;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute each node's children in the dominance tree from the immediate
|
||||
* dominator information. We do this in three stages:
|
||||
*
|
||||
* 1. Calculate the number of children each node has
|
||||
* 2. Allocate arrays, setting the number of children to 0 again
|
||||
* 3. For each node, add itself to its parent's list of children, using
|
||||
* num_dom_children as an index - at the end of this step, num_dom_children
|
||||
* for each node will be the same as it was at the end of step #1.
|
||||
*/
|
||||
|
||||
static void
|
||||
calc_dom_children(bi_context *ctx)
|
||||
{
|
||||
void *mem_ctx = ctx;
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
if (block->imm_dom)
|
||||
block->imm_dom->num_dom_children++;
|
||||
}
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
if (!block->num_dom_children) {
|
||||
block->dom_children = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (block->num_dom_children <= 3) {
|
||||
block->dom_children = block->_dom_children_storage;
|
||||
} else {
|
||||
block->dom_children =
|
||||
ralloc_array(mem_ctx, bi_block *, block->num_dom_children);
|
||||
}
|
||||
block->num_dom_children = 0;
|
||||
}
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
if (block->imm_dom) {
|
||||
block->imm_dom->dom_children[block->imm_dom->num_dom_children++] =
|
||||
block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
calc_dfs_indices(bi_block *block, uint32_t *index)
|
||||
{
|
||||
/* UINT32_MAX has special meaning. See bi_block_dominates. */
|
||||
assert(*index < UINT32_MAX - 2);
|
||||
|
||||
block->dom_pre_index = (*index)++;
|
||||
|
||||
for (unsigned i = 0; i < block->num_dom_children; i++)
|
||||
calc_dfs_indices(block->dom_children[i], index);
|
||||
|
||||
block->dom_post_index = (*index)++;
|
||||
}
|
||||
|
||||
void
|
||||
bi_calc_dominance(bi_context *ctx)
|
||||
{
|
||||
bi_foreach_block(ctx, block) {
|
||||
init_block(block, ctx);
|
||||
}
|
||||
|
||||
bool progress = true;
|
||||
while (progress) {
|
||||
progress = false;
|
||||
bi_foreach_block(ctx, block) {
|
||||
if (block != bi_entry_block(ctx))
|
||||
progress |= calc_dominance(block);
|
||||
}
|
||||
}
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
calc_dom_frontier(block);
|
||||
}
|
||||
|
||||
bi_block *start_block = bi_entry_block(ctx);
|
||||
start_block->imm_dom = NULL;
|
||||
|
||||
calc_dom_children(ctx);
|
||||
|
||||
uint32_t dfs_index = 1;
|
||||
calc_dfs_indices(start_block, &dfs_index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if parent dominates child according to the following
|
||||
* definition:
|
||||
*
|
||||
* "The block A dominates the block B if every path from the start block
|
||||
* to block B passes through A."
|
||||
*
|
||||
* This means, in particular, that any unreachable block is dominated by every
|
||||
* other block and an unreachable block does not dominate anything except
|
||||
* another unreachable block.
|
||||
*/
|
||||
bool
|
||||
bi_block_dominates(bi_block *parent, bi_block *child)
|
||||
{
|
||||
/* If a block is unreachable, then nir_block::dom_pre_index == UINT32_MAX
|
||||
* and nir_block::dom_post_index == 0. This allows us to trivially handle
|
||||
* unreachable blocks here with zero extra work.
|
||||
*/
|
||||
return child->dom_pre_index >= parent->dom_pre_index &&
|
||||
child->dom_post_index <= parent->dom_post_index;
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2021 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
/* Bifrost texture operations have a `skip` bit, instructing helper invocations
|
||||
* to skip execution. Each clause has a `terminate_discarded_threads` bit,
|
||||
* which will terminate helper invocations.
|
||||
*
|
||||
* The terminate bit should be set on the last clause requiring helper
|
||||
* invocations. Without control flow, that's the last source-order instruction;
|
||||
* with control flow, there may be multiple such instructions (with ifs) or no
|
||||
* such instruction (with loops).
|
||||
*
|
||||
* The skip bit should be set unless the value of this instruction is required
|
||||
* by a future instruction requiring helper invocations. Consider:
|
||||
*
|
||||
* 0 = texture ...
|
||||
* 1 = fmul 0, #10
|
||||
* 2 = dfdx 1
|
||||
* store 2
|
||||
*
|
||||
* Since the derivative calculation 2 requires helper invocations, the value 1
|
||||
* must be calculated by helper invocations, and since it depends on 0, 0 must
|
||||
* be calculated by helpers. Hence the texture op does NOT have the skip bit
|
||||
* set, and the clause containing the derivative has the terminate bit set.
|
||||
*
|
||||
* Calculating the terminate bit occurs by forward dataflow analysis to
|
||||
* determine which blocks require helper invocations. A block requires
|
||||
* invocations in if any of its instructions use helper invocations, or if it
|
||||
* depends on a block that requires invocation. With that analysis, the
|
||||
* terminate bit is set on the last instruction using invocations within any
|
||||
* block that does *not* require invocations out.
|
||||
*
|
||||
* Likewise, calculating the execute bit requires backward dataflow analysis
|
||||
* with union as the join operation and the generating set being the union of
|
||||
* sources of instructions writing executed values. The skip bit is the inverse
|
||||
* of the execute bit.
|
||||
*/
|
||||
|
||||
static bool
|
||||
bi_has_skip_bit(enum bi_opcode op)
|
||||
{
|
||||
switch (op) {
|
||||
case BI_OPCODE_TEX_SINGLE:
|
||||
case BI_OPCODE_TEXC:
|
||||
case BI_OPCODE_TEXC_DUAL:
|
||||
case BI_OPCODE_TEXS_2D_F16:
|
||||
case BI_OPCODE_TEXS_2D_F32:
|
||||
case BI_OPCODE_TEXS_CUBE_F16:
|
||||
case BI_OPCODE_TEXS_CUBE_F32:
|
||||
case BI_OPCODE_VAR_TEX_F16:
|
||||
case BI_OPCODE_VAR_TEX_F32:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Does a given instruction require helper threads to be active (because it
|
||||
* reads from other subgroup lanes)? This only applies to fragment shaders.
|
||||
* Other shader stages do not have a notion of helper threads. */
|
||||
|
||||
bool
|
||||
bi_instr_uses_helpers(bi_instr *I)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_TEXC:
|
||||
case BI_OPCODE_TEXC_DUAL:
|
||||
case BI_OPCODE_TEXS_2D_F16:
|
||||
case BI_OPCODE_TEXS_2D_F32:
|
||||
case BI_OPCODE_TEXS_CUBE_F16:
|
||||
case BI_OPCODE_TEXS_CUBE_F32:
|
||||
case BI_OPCODE_VAR_TEX_F16:
|
||||
case BI_OPCODE_VAR_TEX_F32:
|
||||
return !I->lod_mode; /* set for zero, clear for computed */
|
||||
case BI_OPCODE_TEX_SINGLE:
|
||||
return (I->va_lod_mode == BI_VA_LOD_MODE_COMPUTED_LOD) ||
|
||||
(I->va_lod_mode == BI_VA_LOD_MODE_COMPUTED_BIAS);
|
||||
case BI_OPCODE_TEX_GRADIENT:
|
||||
/* If we don't use derivatives to compute the lod we need disabled lanes
|
||||
* to have valid texture coordinates. */
|
||||
return !I->derivative_enable;
|
||||
case BI_OPCODE_WMASK:
|
||||
/* Helpers are needed to implement voting in fragment shaders. */
|
||||
return true;
|
||||
case BI_OPCODE_CLPER_I32:
|
||||
case BI_OPCODE_CLPER_OLD_I32:
|
||||
/* Fragment shaders require helpers to implement derivatives.
|
||||
* Other shader stages don't have helpers at all */
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
bi_add_branch_compare_values(const bi_instr *I, BITSET_WORD *deps)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_BRANCHZI:
|
||||
case BI_OPCODE_BRANCHC_I16:
|
||||
case BI_OPCODE_BRANCHC_I32:
|
||||
BITSET_SET(deps, I->src[0].value);
|
||||
break;
|
||||
case BI_OPCODE_BRANCH_F16:
|
||||
case BI_OPCODE_BRANCH_F32:
|
||||
case BI_OPCODE_BRANCH_I16:
|
||||
case BI_OPCODE_BRANCH_I32:
|
||||
case BI_OPCODE_BRANCH_S16:
|
||||
case BI_OPCODE_BRANCH_S32:
|
||||
case BI_OPCODE_BRANCH_U16:
|
||||
case BI_OPCODE_BRANCH_U32:
|
||||
case BI_OPCODE_BRANCHZ_F16:
|
||||
case BI_OPCODE_BRANCHZ_F32:
|
||||
case BI_OPCODE_BRANCHZ_I16:
|
||||
case BI_OPCODE_BRANCHZ_I32:
|
||||
case BI_OPCODE_BRANCHZ_S16:
|
||||
case BI_OPCODE_BRANCHZ_S32:
|
||||
case BI_OPCODE_BRANCHZ_U16:
|
||||
case BI_OPCODE_BRANCHZ_U32:
|
||||
BITSET_SET(deps, I->src[0].value);
|
||||
BITSET_SET(deps, I->src[1].value);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Does a block use helpers directly */
|
||||
static bool
|
||||
bi_block_uses_helpers(bi_block *block)
|
||||
{
|
||||
bi_foreach_instr_in_block(block, I) {
|
||||
if (bi_instr_uses_helpers(I))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
bi_block_terminates_helpers(bi_block *block)
|
||||
{
|
||||
/* Can't terminate if a successor needs helpers */
|
||||
bi_foreach_successor(block, succ) {
|
||||
if (succ->pass_flags & 1)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Otherwise we terminate */
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Propagate the pass flag up the control flow graph by performing depth-first
|
||||
* search on the directed control flow graph.
|
||||
*/
|
||||
static void
|
||||
bi_propagate_pass_flag(bi_block *block)
|
||||
{
|
||||
block->pass_flags = 1;
|
||||
|
||||
bi_foreach_predecessor(block, pred) {
|
||||
if ((*pred)->pass_flags == 0)
|
||||
bi_propagate_pass_flag(*pred);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_analyze_helper_terminate(bi_context *ctx)
|
||||
{
|
||||
/* Other shader stages do not have a notion of helper threads, so we
|
||||
* can skip the analysis. Don't run for blend shaders, either, since
|
||||
* they run in the context of another shader that we don't see. */
|
||||
if (ctx->stage != MESA_SHADER_FRAGMENT || ctx->inputs->is_blend)
|
||||
return;
|
||||
|
||||
/* Clear flags */
|
||||
bi_foreach_block(ctx, block)
|
||||
block->pass_flags = 0;
|
||||
|
||||
/* For each block, check if it uses helpers and propagate that fact if
|
||||
* so. We walk in reverse order to minimize the number of blocks tested:
|
||||
* if the (unique) last block uses helpers, only that block is tested.
|
||||
*/
|
||||
bi_foreach_block_rev(ctx, block) {
|
||||
if (block->pass_flags == 0 && bi_block_uses_helpers(block))
|
||||
bi_propagate_pass_flag(block);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_mark_clauses_td(bi_context *ctx)
|
||||
{
|
||||
if (ctx->stage != MESA_SHADER_FRAGMENT || ctx->inputs->is_blend)
|
||||
return;
|
||||
|
||||
/* Finally, mark clauses requiring helpers */
|
||||
bi_foreach_block(ctx, block) {
|
||||
/* At the end, there are helpers iff we don't terminate */
|
||||
bool helpers = !bi_block_terminates_helpers(block);
|
||||
|
||||
bi_foreach_clause_in_block_rev(block, clause) {
|
||||
bi_foreach_instr_in_clause_rev(block, clause, I) {
|
||||
helpers |= bi_instr_uses_helpers(I);
|
||||
}
|
||||
|
||||
clause->td = !helpers;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_helper_block_update(BITSET_WORD *deps, bi_block *block)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
bi_foreach_instr_in_block_rev(block, I) {
|
||||
/* If a destination is required by helper invocation... */
|
||||
bi_foreach_dest(I, d) {
|
||||
if (!BITSET_TEST(deps, I->dest[d].value))
|
||||
continue;
|
||||
|
||||
/* ...so are the sources */
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
progress |= !BITSET_TEST(deps, I->src[s].value);
|
||||
BITSET_SET(deps, I->src[s].value);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
void
|
||||
bi_analyze_helper_requirements(bi_context *ctx)
|
||||
{
|
||||
BITSET_WORD *deps = calloc(sizeof(BITSET_WORD), ctx->ssa_alloc);
|
||||
|
||||
/* Initialize with the sources of instructions consuming
|
||||
* derivatives and the sources of conditional branch instructions */
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
if (bi_instr_uses_helpers(I)) {
|
||||
bi_foreach_ssa_src(I, s)
|
||||
BITSET_SET(deps, I->src[s].value);
|
||||
} else {
|
||||
bi_add_branch_compare_values(I, deps);
|
||||
}
|
||||
}
|
||||
|
||||
/* Propagate that up */
|
||||
bool progress;
|
||||
do {
|
||||
progress = false;
|
||||
bi_foreach_block_rev(ctx, block)
|
||||
progress |= bi_helper_block_update(deps, block);
|
||||
} while (progress);
|
||||
|
||||
/* Set the execute bits */
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
if (!bi_has_skip_bit(I->op))
|
||||
continue;
|
||||
|
||||
bool exec = false;
|
||||
|
||||
bi_foreach_dest(I, d)
|
||||
exec |= BITSET_TEST(deps, I->dest[d].value);
|
||||
|
||||
I->skip = !exec;
|
||||
}
|
||||
|
||||
free(deps);
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Google LLC.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "util/u_dynarray.h"
|
||||
#include "compiler.h"
|
||||
|
||||
struct iterator {
|
||||
bi_block *block;
|
||||
bi_instr *instr;
|
||||
};
|
||||
|
||||
static bool
|
||||
phi_src_is_simple_iterator(bi_instr *phi, bi_instr *phi_src, bi_block *block)
|
||||
{
|
||||
if (phi_src == NULL || block == NULL || phi_src->nr_dests != 1 ||
|
||||
phi_src->op == BI_OPCODE_PHI) {
|
||||
return false;
|
||||
}
|
||||
bi_foreach_src(phi_src, idx) {
|
||||
if (bi_is_equiv(phi->dest[0], phi_src->src[idx]))
|
||||
/* If phi_src uses phi, then phi_src is a simple iterator */
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
get_new_iterator_position(bi_block *block, bi_instr *instr)
|
||||
{
|
||||
bi_instr *prev = NULL;
|
||||
bi_foreach_instr_in_block_from(block, I, instr) {
|
||||
if (bi_is_branch(I))
|
||||
return prev;
|
||||
bi_foreach_src(I, s) {
|
||||
if (bi_is_equiv(instr->dest[0], I->src[s]))
|
||||
return prev;
|
||||
}
|
||||
prev = I;
|
||||
}
|
||||
return prev;
|
||||
}
|
||||
|
||||
/* Try to move iterator as close to the end of the block as possible. The goal
|
||||
* is to avoid the iterator being used after being updated, to prevent the need
|
||||
* for an extra move instruction.
|
||||
*
|
||||
* Example:
|
||||
* 1 = PHI <>, 2
|
||||
* ...
|
||||
* 2 = IADD_IMM.i32 1, index:1
|
||||
* 3 = ICMP_OR.u32.ge.m1 1, ...
|
||||
*
|
||||
* Without this pass, after register allocation it can lead to:
|
||||
* r1 = IADD_IMM.i32 r0, index:1
|
||||
* r2 = ICMP_OR.u32.ge.m1 r0, ...
|
||||
* r0 = MOV.i32 r1
|
||||
*
|
||||
* With this pass, we can get:
|
||||
* r1 = ICMP_OR.u32.ge.m1 r0, ...
|
||||
* r0 = IADD_IMM.i32 r0, index:1
|
||||
*
|
||||
*/
|
||||
void
|
||||
bi_iterator_schedule(bi_context *ctx)
|
||||
{
|
||||
bi_instr **bi_index_to_instr = calloc(ctx->ssa_alloc, sizeof(bi_instr *));
|
||||
bi_block **bi_index_to_block = calloc(ctx->ssa_alloc, sizeof(bi_block *));
|
||||
bi_foreach_block(ctx, block) {
|
||||
bi_foreach_instr_in_block(block, instr) {
|
||||
bi_foreach_ssa_dest(instr, idx) {
|
||||
uint32_t value = instr->dest[idx].value;
|
||||
bi_index_to_instr[value] = instr;
|
||||
bi_index_to_block[value] = block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct util_dynarray iterators = UTIL_DYNARRAY_INIT;
|
||||
bi_foreach_instr_global(ctx, phi) {
|
||||
if (phi->op != BI_OPCODE_PHI || phi->nr_dests != 1)
|
||||
continue;
|
||||
|
||||
bi_foreach_ssa_src(phi, phi_src_idx) {
|
||||
uint32_t value = phi->src[phi_src_idx].value;
|
||||
struct iterator iterator = {.instr = bi_index_to_instr[value],
|
||||
.block = bi_index_to_block[value]};
|
||||
if (!phi_src_is_simple_iterator(phi, iterator.instr, iterator.block))
|
||||
continue;
|
||||
util_dynarray_append(&iterators, iterator);
|
||||
}
|
||||
}
|
||||
|
||||
util_dynarray_foreach(&iterators, struct iterator, iterator)
|
||||
{
|
||||
bi_instr *instr = iterator->instr;
|
||||
bi_instr *prev = get_new_iterator_position(iterator->block, instr);
|
||||
if (prev == NULL || prev == instr)
|
||||
continue;
|
||||
bi_remove_instruction(instr);
|
||||
list_add(&instr->link, &prev->link);
|
||||
}
|
||||
util_dynarray_fini(&iterators);
|
||||
|
||||
free(bi_index_to_instr);
|
||||
free(bi_index_to_block);
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
/* The scheduler packs multiple instructions into a clause (grouped as tuple),
|
||||
* and the packing code takes in a clause and emits it to the wire. During
|
||||
* scheduling, we need to lay out the instructions (tuples) and constants
|
||||
* within the clause so constraints can be resolved during scheduling instead
|
||||
* of failing packing. These routines will help building clauses from
|
||||
* instructions so the scheduler can focus on the high-level algorithm, and
|
||||
* manipulating clause layouts.
|
||||
*/
|
||||
|
||||
/* Is embedded constant 0 packed for free in a clause with this many tuples? */
|
||||
|
||||
bool
|
||||
bi_ec0_packed(unsigned tuple_count)
|
||||
{
|
||||
return (tuple_count == 3) || (tuple_count == 5) || (tuple_count == 6) ||
|
||||
(tuple_count == 8);
|
||||
}
|
||||
|
||||
/* Helper to calculate the number of quadwords in a clause. This is a function
|
||||
* of the number of instructions and constants; it doesn't require actually
|
||||
* packing, which is useful for branch offsets.
|
||||
*
|
||||
* Table of instruction count to instruction quadwords, per the packing
|
||||
* algorithm, where * indicates a constant is packed for free:
|
||||
*
|
||||
* X | Y
|
||||
* ---|---
|
||||
* 1 | 1
|
||||
* 2 | 2
|
||||
* 3 | 3*
|
||||
* 4 | 3
|
||||
* 5 | 4*
|
||||
* 6 | 5*
|
||||
* 7 | 5
|
||||
* 8 | 6*
|
||||
*
|
||||
* Y = { X if X <= 3
|
||||
* { X - 1 if 4 <= X <= 6
|
||||
* { X - 2 if 7 <= X <= 8
|
||||
*
|
||||
* and there is a constant for free if X is in {3, 5, 6, 8}. The remaining
|
||||
* constants are packed two-by-two as constant quadwords.
|
||||
*/
|
||||
|
||||
static unsigned
|
||||
bi_clause_quadwords(bi_clause *clause)
|
||||
{
|
||||
unsigned X = clause->tuple_count;
|
||||
unsigned Y = X - ((X >= 7) ? 2 : (X >= 4) ? 1 : 0);
|
||||
|
||||
unsigned constants = clause->constant_count;
|
||||
|
||||
if ((X != 4) && (X != 7) && (X >= 3) && constants)
|
||||
constants--;
|
||||
|
||||
return Y + DIV_ROUND_UP(constants, 2);
|
||||
}
|
||||
|
||||
/* Measures the number of quadwords a branch jumps. Bifrost relative offsets
|
||||
* are from the beginning of a clause so to jump forward we count the current
|
||||
* clause length, but to jump backwards we do not. */
|
||||
|
||||
signed
|
||||
bi_block_offset(bi_context *ctx, bi_clause *start, bi_block *target)
|
||||
{
|
||||
/* Signed since we might jump backwards */
|
||||
signed ret = 0;
|
||||
|
||||
/* Determine if the block we're branching to is strictly greater in
|
||||
* source order */
|
||||
bool forwards = target->index > start->block->index;
|
||||
|
||||
if (forwards) {
|
||||
/* We have to jump through this block from the start of this
|
||||
* clause to the end */
|
||||
bi_foreach_clause_in_block_from(start->block, clause, start) {
|
||||
ret += bi_clause_quadwords(clause);
|
||||
}
|
||||
|
||||
/* We then need to jump through every clause of every following
|
||||
* block until the target */
|
||||
bi_foreach_block_from(ctx, start->block, blk) {
|
||||
/* Don't double-count the first block */
|
||||
if (blk == start->block)
|
||||
continue;
|
||||
|
||||
/* End just before the target */
|
||||
if (blk == target)
|
||||
break;
|
||||
|
||||
/* Count every clause in the block */
|
||||
bi_foreach_clause_in_block(blk, clause) {
|
||||
ret += bi_clause_quadwords(clause);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* We start at the beginning of the clause but have to jump
|
||||
* through the clauses before us in the block */
|
||||
bi_foreach_clause_in_block_from_rev(start->block, clause, start) {
|
||||
if (clause == start)
|
||||
continue;
|
||||
|
||||
ret -= bi_clause_quadwords(clause);
|
||||
}
|
||||
|
||||
/* And jump back every clause of preceding blocks up through
|
||||
* and including the target to get to the beginning of the
|
||||
* target */
|
||||
bi_foreach_block_from_rev(ctx, start->block, blk) {
|
||||
if (blk == start->block)
|
||||
continue;
|
||||
|
||||
bi_foreach_clause_in_block(blk, clause) {
|
||||
ret -= bi_clause_quadwords(clause);
|
||||
}
|
||||
|
||||
/* End just after the target */
|
||||
if (blk == target)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Collabora, Ltd.
|
||||
* Copyright (C) 2018-2019 Alyssa Rosenzweig
|
||||
* Copyright © 2014 Intel Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "util/u_memory.h"
|
||||
#include "compiler.h"
|
||||
|
||||
void
|
||||
bi_liveness_ins_update_ssa(BITSET_WORD *live, const bi_instr *I)
|
||||
{
|
||||
bi_foreach_dest(I, d)
|
||||
BITSET_CLEAR(live, I->dest[d].value);
|
||||
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
/* If the source is not live after this instruction, but becomes live
|
||||
* at this instruction, this is the use that kills the source
|
||||
*/
|
||||
I->src[s].kill_ssa = !BITSET_TEST(live, I->src[s].value);
|
||||
BITSET_SET(live, I->src[s].value);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_compute_liveness_ssa(bi_context *ctx)
|
||||
{
|
||||
u_worklist worklist;
|
||||
u_worklist_init(&worklist, ctx->num_blocks, NULL);
|
||||
|
||||
/* Free any previous liveness, and allocate */
|
||||
unsigned words = BITSET_WORDS(ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
ralloc_free(block->ssa_live_in);
|
||||
ralloc_free(block->ssa_live_out);
|
||||
|
||||
block->ssa_live_in = rzalloc_array(block, BITSET_WORD, words);
|
||||
block->ssa_live_out = rzalloc_array(block, BITSET_WORD, words);
|
||||
|
||||
bi_worklist_push_head(&worklist, block);
|
||||
}
|
||||
|
||||
/* Iterate the work list */
|
||||
while (!u_worklist_is_empty(&worklist)) {
|
||||
/* Pop in reverse order since liveness is a backwards pass */
|
||||
bi_block *blk = bi_worklist_pop_head(&worklist);
|
||||
|
||||
/* Update its liveness information */
|
||||
memcpy(blk->ssa_live_in, blk->ssa_live_out, words * sizeof(BITSET_WORD));
|
||||
|
||||
bi_foreach_instr_in_block_rev(blk, I) {
|
||||
/* Phi nodes are handled separately, so we skip them. As phi nodes are
|
||||
* at the beginning and we're iterating backwards, we stop as soon as
|
||||
* we hit a phi node.
|
||||
*/
|
||||
if (I->op == BI_OPCODE_PHI)
|
||||
break;
|
||||
|
||||
blk->ssa_max_live =
|
||||
MAX2(__bitset_count(blk->ssa_live_in, words), blk->ssa_max_live);
|
||||
bi_liveness_ins_update_ssa(blk->ssa_live_in, I);
|
||||
}
|
||||
|
||||
/* Propagate the live in of the successor (blk) to the live out of
|
||||
* predecessors.
|
||||
*
|
||||
* Phi nodes are logically on the control flow edge and act in parallel.
|
||||
* To handle when propagating, we kill writes from phis and make live the
|
||||
* corresponding sources.
|
||||
*/
|
||||
bi_foreach_predecessor(blk, pred) {
|
||||
BITSET_WORD *live = ralloc_array(blk, BITSET_WORD, words);
|
||||
memcpy(live, blk->ssa_live_in, words * sizeof(BITSET_WORD));
|
||||
|
||||
/* Kill write */
|
||||
bi_foreach_phi_in_block(blk, I) {
|
||||
BITSET_CLEAR(live, I->dest[0].value);
|
||||
}
|
||||
|
||||
/* Make live the corresponding source */
|
||||
bi_foreach_phi_in_block(blk, I) {
|
||||
bi_index operand = I->src[bi_predecessor_index(blk, *pred)];
|
||||
if (bi_is_ssa(operand)) {
|
||||
BITSET_SET(live, operand.value);
|
||||
I->src[bi_predecessor_index(blk, *pred)].kill_ssa = false;
|
||||
}
|
||||
}
|
||||
|
||||
BITSET_WORD progress = 0;
|
||||
|
||||
for (unsigned i = 0; i < words; ++i) {
|
||||
progress |= live[i] & ~((*pred)->ssa_live_out[i]);
|
||||
(*pred)->ssa_live_out[i] |= live[i];
|
||||
}
|
||||
|
||||
if (progress != 0)
|
||||
bi_worklist_push_tail(&worklist, *pred);
|
||||
}
|
||||
}
|
||||
|
||||
u_worklist_fini(&worklist);
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler/nir/nir_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/* Divergent attribute access is undefined behaviour. To avoid divergence,
|
||||
* lower to an if-chain like:
|
||||
*
|
||||
* value = 0;
|
||||
* if (lane == 0)
|
||||
* value = ld()
|
||||
* else if (lane == 1)
|
||||
* value = ld()
|
||||
* ...
|
||||
* else if (lane == MAX_LANE)
|
||||
* value = ld()
|
||||
*/
|
||||
|
||||
static bool
|
||||
bi_lower_divergent_indirects_impl(nir_builder *b, nir_intrinsic_instr *intr,
|
||||
void *data)
|
||||
{
|
||||
mesa_shader_stage stage = b->shader->info.stage;
|
||||
nir_src *offset;
|
||||
|
||||
/* Not all indirect access needs this workaround */
|
||||
switch (intr->intrinsic) {
|
||||
case nir_intrinsic_load_input:
|
||||
case nir_intrinsic_load_interpolated_input:
|
||||
case nir_intrinsic_load_attribute_pan:
|
||||
/* Attributes and varyings */
|
||||
offset = nir_get_io_offset_src(intr);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_store_output:
|
||||
/* Varyings only */
|
||||
if (stage == MESA_SHADER_FRAGMENT)
|
||||
return false;
|
||||
|
||||
offset = nir_get_io_offset_src(intr);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_store_per_view_output:
|
||||
assert(stage == MESA_SHADER_VERTEX);
|
||||
assert(!nir_src_is_divergent(&intr->src[1]));
|
||||
offset = nir_get_io_offset_src(intr);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_image_texel_address:
|
||||
case nir_intrinsic_image_load:
|
||||
case nir_intrinsic_image_store:
|
||||
/* Any image access */
|
||||
offset = &intr->src[0];
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!nir_src_is_divergent(offset))
|
||||
return false;
|
||||
|
||||
/* This indirect does need it */
|
||||
|
||||
b->cursor = nir_before_instr(&intr->instr);
|
||||
nir_def *lane = nir_load_subgroup_invocation(b);
|
||||
unsigned *lanes = data;
|
||||
|
||||
/* Write zero in a funny way to bypass lower_load_const_to_scalar */
|
||||
bool has_dest = nir_intrinsic_infos[intr->intrinsic].has_dest;
|
||||
unsigned size = has_dest ? intr->def.bit_size : 32;
|
||||
nir_def *zero = has_dest ? nir_imm_zero(b, 1, size) : NULL;
|
||||
nir_def *zeroes[4] = {zero, zero, zero, zero};
|
||||
nir_def *res =
|
||||
has_dest ? nir_vec(b, zeroes, intr->def.num_components) : NULL;
|
||||
|
||||
for (unsigned i = 0; i < (*lanes); ++i) {
|
||||
nir_push_if(b, nir_ieq_imm(b, lane, i));
|
||||
|
||||
nir_instr *c = nir_instr_clone(b->shader, &intr->instr);
|
||||
nir_intrinsic_instr *c_intr = nir_instr_as_intrinsic(c);
|
||||
nir_builder_instr_insert(b, c);
|
||||
nir_pop_if(b, NULL);
|
||||
|
||||
if (has_dest) {
|
||||
nir_def *c_ssa = &c_intr->def;
|
||||
res = nir_if_phi(b, c_ssa, res);
|
||||
}
|
||||
}
|
||||
|
||||
if (has_dest)
|
||||
nir_def_rewrite_uses(&intr->def, res);
|
||||
|
||||
nir_instr_remove(&intr->instr);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
bi_lower_divergent_indirects(nir_shader *shader, unsigned lanes)
|
||||
{
|
||||
return nir_shader_intrinsics_pass(shader, bi_lower_divergent_indirects_impl,
|
||||
nir_metadata_none, &lanes);
|
||||
}
|
||||
@@ -0,0 +1,298 @@
|
||||
/*
|
||||
* Copyright (C) 2026 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "bi_swizzles.h"
|
||||
#include "compiler.h"
|
||||
#include "valhall.h"
|
||||
|
||||
static bi_index
|
||||
bi_i8_pair_as_i16(bi_index lo, bi_index hi)
|
||||
{
|
||||
/* If they're both constants, we can fold them together */
|
||||
if (lo.type == BI_INDEX_CONSTANT && hi.type == BI_INDEX_CONSTANT) {
|
||||
uint32_t lo_val = bi_apply_swizzle(lo.value, lo.swizzle) & 0xff;
|
||||
uint32_t hi_val = bi_apply_swizzle(hi.value, hi.swizzle) & 0xff;
|
||||
return bi_imm_u16(lo_val | (hi_val << 8));
|
||||
}
|
||||
|
||||
if (!bi_is_word_equiv(lo, hi))
|
||||
return bi_null();
|
||||
|
||||
unsigned lo_byte = lo.swizzle - BI_SWIZZLE_B0;
|
||||
unsigned hi_byte = hi.swizzle - BI_SWIZZLE_B0;
|
||||
assert(lo_byte < 4 && hi_byte < 4);
|
||||
|
||||
if ((lo_byte & 1) == 0 && hi_byte == lo_byte + 1) {
|
||||
bi_index i16 = lo;
|
||||
i16.swizzle = lo_byte == 0 ? BI_SWIZZLE_H00 : BI_SWIZZLE_H11;
|
||||
return i16;
|
||||
}
|
||||
|
||||
return bi_null();
|
||||
}
|
||||
|
||||
static void
|
||||
compact_i8_constants(bi_index *src, unsigned nr_src)
|
||||
{
|
||||
uint8_t values[4] = { 0, 0, 0, 0 };
|
||||
unsigned nr_values = 0;
|
||||
|
||||
for (unsigned i = 0; i < nr_src; i++) {
|
||||
if (src[i].type != BI_INDEX_CONSTANT)
|
||||
continue;
|
||||
|
||||
if (src[i].value == 0) {
|
||||
/* Sanitize zero swizzles */
|
||||
src[i].swizzle = BI_SWIZZLE_B0;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Fold the swizzle (if any) and mask */
|
||||
src[i].value = bi_apply_swizzle(src[i].value, src[i].swizzle) & 0xff;
|
||||
|
||||
unsigned v = 0;
|
||||
for (; v < nr_values; v++) {
|
||||
if (values[v] == src[i].value)
|
||||
break;
|
||||
}
|
||||
if (v == nr_values)
|
||||
values[nr_values++] = src[i].value;
|
||||
}
|
||||
|
||||
/* If the only constants we found were zero, we're done */
|
||||
if (nr_values == 0)
|
||||
return;
|
||||
|
||||
for (unsigned i = 0; i < nr_src; i++) {
|
||||
if (src[i].type != BI_INDEX_CONSTANT || src[i].value == 0)
|
||||
continue;
|
||||
|
||||
unsigned v = 0;
|
||||
for (; v < nr_values; v++) {
|
||||
if (values[v] == src[i].value)
|
||||
break;
|
||||
}
|
||||
assert(v < nr_values);
|
||||
|
||||
/* Fold two constants into one so that bi_schedule will see half the
|
||||
* number of unique constants. We only have .b0 and .b2 swizzles on
|
||||
* MKVEC.i8v4 on Bifrost so we can't place them in b1 or b3.
|
||||
*/
|
||||
uint32_t v32_lo = values[v & ~1];
|
||||
uint32_t v32_hi = values[v | 1];
|
||||
src[i] = bi_imm_u32(v32_lo | (v32_hi << 16));
|
||||
src[i].swizzle = (v & 1) ? BI_SWIZZLE_B2 : BI_SWIZZLE_B0;
|
||||
}
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
build_swz_v2i16_to(bi_builder *b, bi_index dst, bi_index src)
|
||||
{
|
||||
if (src.swizzle == BI_SWIZZLE_H01)
|
||||
return bi_mov_i32_to(b, dst, src);
|
||||
|
||||
/* On Valhall, we don't have SWZ.v2i16 but IADD has a swizzle */
|
||||
if (b->shader->arch >= 9)
|
||||
return bi_iadd_v2u16_to(b, dst, src, bi_zero(), false);
|
||||
else
|
||||
return bi_swz_v2i16_to(b, dst, src);
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
build_mkvec_v4i8_to(bi_builder *b, bi_index dst, const bi_index src[4])
|
||||
{
|
||||
unsigned bytes[4];
|
||||
bool all_constant = true;
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
STATIC_ASSERT(BI_SWIZZLE_B3 - BI_SWIZZLE_B0 == 3);
|
||||
assert(src[i].swizzle >= BI_SWIZZLE_B0);
|
||||
assert(src[i].swizzle <= BI_SWIZZLE_B3);
|
||||
bytes[i] = src[i].swizzle - BI_SWIZZLE_B0;
|
||||
if (src[i].type != BI_INDEX_CONSTANT)
|
||||
all_constant = false;
|
||||
}
|
||||
|
||||
if (all_constant) {
|
||||
uint32_t v32 = 0;
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
uint32_t v8 = bi_apply_swizzle(src[i].value, src[i].swizzle) & 0xff;
|
||||
v32 |= v8 << (i * 8);
|
||||
}
|
||||
return bi_mov_i32_to(b, dst, bi_imm_u32(v32));
|
||||
}
|
||||
|
||||
/* Check for U8_TO_U32 */
|
||||
if (bi_is_zero(src[1]) && bi_is_zero(src[2]) && bi_is_zero(src[3]))
|
||||
return bi_u8_to_u32_to(b, dst, src[0]);
|
||||
|
||||
/* Check for V2U8_TO_V2U16 */
|
||||
enum bi_swizzle swizzle = BI_SWIZZLE_B0123;
|
||||
if (bi_is_word_equiv(src[0], src[2]) &&
|
||||
bi_is_zero(src[1]) && bi_is_zero(src[3])) {
|
||||
unsigned v2u8_bytes[4] = { bytes[0], bytes[0], bytes[2], bytes[2] };
|
||||
bool valid_swizzle =
|
||||
bi_swizzle_from_byte_channels(v2u8_bytes, &swizzle);
|
||||
assert(valid_swizzle);
|
||||
|
||||
bi_index v2u8_src = src[0];
|
||||
v2u8_src.swizzle = swizzle;
|
||||
|
||||
return bi_v2u8_to_v2u16_to(b, dst, v2u8_src);
|
||||
}
|
||||
|
||||
/* Check if we can do a swizzled MOV of some form */
|
||||
if (bi_is_word_equiv(src[0], src[1]) &&
|
||||
bi_is_word_equiv(src[0], src[2]) &&
|
||||
bi_is_word_equiv(src[0], src[3]) &&
|
||||
bi_swizzle_from_byte_channels(bytes, &swizzle)) {
|
||||
bi_index swz_src = src[0];
|
||||
swz_src.swizzle = swizzle;
|
||||
|
||||
/* Check for MOV.i32 and SWZ.v2i16 */
|
||||
if (swizzle == BI_SWIZZLE_H00 ||
|
||||
swizzle == BI_SWIZZLE_H01 ||
|
||||
swizzle == BI_SWIZZLE_H10 ||
|
||||
swizzle == BI_SWIZZLE_H11)
|
||||
return build_swz_v2i16_to(b, dst, swz_src);
|
||||
|
||||
if (b->shader->arch >= 9) {
|
||||
/* On v9 and v10, LSHIFT_OR.v4i8 has a limited swizzle */
|
||||
if (bi_op_supports_swizzle(BI_OPCODE_LSHIFT_OR_V4I8, 0, swizzle,
|
||||
b->shader->arch)) {
|
||||
return bi_lshift_or_v4i8_to(b, dst, swz_src,
|
||||
bi_imm_u8(0), bi_imm_u8(0));
|
||||
}
|
||||
} else {
|
||||
/* Check for SWZ.v4i8 */
|
||||
if (bi_op_supports_swizzle(BI_OPCODE_SWZ_V4I8, 0, swizzle,
|
||||
b->shader->arch)) {
|
||||
return bi_swz_v4i8_to(b, dst, swz_src);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bi_index v2_lo = bi_i8_pair_as_i16(src[0], src[1]);
|
||||
bi_index v2_hi = bi_i8_pair_as_i16(src[2], src[3]);
|
||||
if (!bi_is_null(v2_lo) && !bi_is_null(v2_hi)) {
|
||||
/* Check for U16_TO_U32 */
|
||||
if (bi_is_zero(v2_hi))
|
||||
return bi_u16_to_u32_to(b, dst, v2_lo);
|
||||
|
||||
/* Check for MKVEC.v2i16 */
|
||||
return bi_mkvec_v2i16_to(b, dst, v2_lo, v2_hi);
|
||||
}
|
||||
|
||||
/* On Valhal+, we can do any v4i8 in two instructions */
|
||||
if (b->shader->arch >= 9) {
|
||||
if (bi_is_zero(src[2]) && bi_is_zero(src[3]))
|
||||
return bi_mkvec_v2i8_to(b, dst, src[0], src[1], bi_zero());
|
||||
|
||||
if (bi_is_word_equiv(src[2], src[3]) && bytes[2] == 0 && bytes[3] == 1) {
|
||||
/* src2 is implicitly read as .b01 by MKVEC.v2i8. */
|
||||
bi_index src2 = src[2];
|
||||
src2.swizzle = BI_SWIZZLE_H01;
|
||||
|
||||
return bi_mkvec_v2i8_to(b, dst, src[0], src[1], src2);
|
||||
}
|
||||
|
||||
bi_index acc = bi_mkvec_v2i8(b, src[2], src[3], bi_zero());
|
||||
return bi_mkvec_v2i8_to(b, dst, src[0], src[1], acc);
|
||||
} else {
|
||||
bi_index v4_src[4];
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
v4_src[i] = src[i];
|
||||
|
||||
/* We can only swizzle to even bytes */
|
||||
if (src[i].type != BI_INDEX_CONSTANT && (bytes[i] & 1))
|
||||
v4_src[i] = bi_byte(bi_swz_v4i8(b, v4_src[i]), 0);
|
||||
}
|
||||
|
||||
compact_i8_constants(v4_src, 4);
|
||||
|
||||
return bi_mkvec_v4i8_to(b, dst, v4_src[0], v4_src[1],
|
||||
v4_src[2], v4_src[3]);
|
||||
}
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
lower_mkvec_v4i8(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
return build_mkvec_v4i8_to(b, I->dest[0], I->src);
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
lower_swz_v4i8(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
unsigned bytes[4] = {0, 0, 0, 0};
|
||||
bi_swizzle_to_byte_channels(I->src[0].swizzle, bytes);
|
||||
|
||||
bi_index src[4];
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
src[i] = I->src[0];
|
||||
src[i].swizzle = BI_SWIZZLE_B0 + bytes[i];
|
||||
}
|
||||
|
||||
return build_mkvec_v4i8_to(b, I->dest[0], src);
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
lower_mkvec_v2i16(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
for (unsigned i = 0; i < 2; i++) {
|
||||
assert(I->src[i].swizzle == BI_SWIZZLE_H0 ||
|
||||
I->src[i].swizzle == BI_SWIZZLE_H1);
|
||||
}
|
||||
|
||||
if (bi_is_word_equiv(I->src[0], I->src[1])) {
|
||||
bi_index src = I->src[0];
|
||||
src.swizzle = bi_swizzle_from_half(I->src[0].swizzle == BI_SWIZZLE_H1,
|
||||
I->src[1].swizzle == BI_SWIZZLE_H1);
|
||||
return build_swz_v2i16_to(b, I->dest[0], src);
|
||||
}
|
||||
|
||||
if (bi_is_zero(I->src[1]))
|
||||
return bi_u16_to_u32_to(b, I->dest[0], I->src[0]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
lower_swz_v2i16(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
return build_swz_v2i16_to(b, I->dest[0], I->src[0]);
|
||||
}
|
||||
|
||||
static bi_instr *
|
||||
lower(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_MKVEC_V2I16:
|
||||
return lower_mkvec_v2i16(b, I);
|
||||
|
||||
case BI_OPCODE_MKVEC_V4I8:
|
||||
return lower_mkvec_v4i8(b, I);
|
||||
|
||||
case BI_OPCODE_SWZ_V2I16:
|
||||
return lower_swz_v2i16(b, I);
|
||||
|
||||
case BI_OPCODE_SWZ_V4I8:
|
||||
return lower_swz_v4i8(b, I);
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_lower_mkvec_swz(bi_context *ctx)
|
||||
{
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I));
|
||||
|
||||
if (lower(&b, I))
|
||||
bi_remove_instruction(I);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright 2025 Arm Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
struct lower_spill_ctx {
|
||||
bi_context *shader;
|
||||
uint32_t *sizes;
|
||||
/* If bi_index::memory, tls_loc[idx.value] is valid. */
|
||||
uint32_t *tls_loc;
|
||||
/* Bytes of spill memory used so far. */
|
||||
uint32_t spill_count;
|
||||
};
|
||||
|
||||
static void
|
||||
lower_memmov(struct lower_spill_ctx* ctx, bi_instr *I, uint32_t tls_base)
|
||||
{
|
||||
assert(I->op == BI_OPCODE_MEMMOV);
|
||||
assert(I->nr_srcs == 1 && I->nr_dests == 1);
|
||||
assert(I->src[0].memory || I->dest[0].memory);
|
||||
|
||||
bi_builder b = bi_init_builder(ctx->shader, bi_before_instr(I));
|
||||
|
||||
bi_index src = I->src[0];
|
||||
bi_index dst = I->dest[0];
|
||||
|
||||
if (I->src[0].memory) {
|
||||
unsigned offset = ctx->tls_loc[src.value];
|
||||
unsigned bits = ctx->sizes[src.value] * 32;
|
||||
assert(bits <= 128);
|
||||
bi_load_tl(&b, bits, dst, tls_base + offset);
|
||||
} else {
|
||||
unsigned offset = ctx->tls_loc[dst.value];
|
||||
unsigned bits = ctx->sizes[dst.value] * 32;
|
||||
assert(bits <= 128);
|
||||
bi_store_tl(&b, bits, src, tls_base + offset);
|
||||
}
|
||||
|
||||
bi_remove_instruction(I);
|
||||
}
|
||||
|
||||
static void
|
||||
lower_mem_phi(struct lower_spill_ctx* ctx, bi_instr *I, uint32_t tls_base)
|
||||
{
|
||||
assert(I->op == BI_OPCODE_PHI);
|
||||
assert(I->nr_dests == 1);
|
||||
|
||||
/* PHIs get lowered in bi_out_of_ssa, which expects memory operands to
|
||||
* provide the actual TLS offset as bi_index::value.
|
||||
*/
|
||||
|
||||
if (I->dest[0].memory) {
|
||||
const bi_index dst = I->dest[0];
|
||||
/* bi_repair_ssa could make PHIs for MEMMOV sources which could be
|
||||
* wider. But, those should all get eliminated as trivial because they
|
||||
* are only defined once so they would all look like mX = PHI mX, mX.
|
||||
*/
|
||||
assert(ctx->sizes[dst.value] == 1);
|
||||
I->dest[0].value = tls_base + ctx->tls_loc[dst.value];
|
||||
}
|
||||
|
||||
bi_foreach_src(I, s) {
|
||||
const bi_index src = I->src[s];
|
||||
if (!src.memory)
|
||||
continue;
|
||||
|
||||
assert(ctx->tls_loc[src.value] != UINT32_MAX && "Undefined source");
|
||||
assert(ctx->sizes[src.value] == 1);
|
||||
I->src[s].value = tls_base + ctx->tls_loc[src.value];
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
assign_tls_locations(struct lower_spill_ctx *ctx) {
|
||||
bi_foreach_instr_global(ctx->shader, I) {
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
bi_index dst = I->dest[d];
|
||||
if (!dst.memory)
|
||||
continue;
|
||||
|
||||
assert(I->op == BI_OPCODE_MEMMOV || I->op == BI_OPCODE_PHI);
|
||||
assert(ctx->tls_loc[dst.value] == UINT32_MAX && "Broken SSA");
|
||||
|
||||
ctx->tls_loc[dst.value] = ctx->spill_count;
|
||||
ctx->spill_count += 4 * ctx->sizes[dst.value];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned
|
||||
bi_lower_spill(bi_context* ctx, uint32_t tls_base) {
|
||||
void* memctx = ralloc_context(NULL);
|
||||
|
||||
uint32_t *sizes = rzalloc_array(memctx, uint32_t, ctx->ssa_alloc);
|
||||
uint32_t *tls_loc = ralloc_array(memctx, uint32_t, ctx->ssa_alloc);
|
||||
memset(tls_loc, 0xff, sizeof(uint32_t) * ctx->ssa_alloc);
|
||||
|
||||
bi_record_sizes(ctx, sizes);
|
||||
|
||||
struct lower_spill_ctx lctx = {
|
||||
.shader = ctx,
|
||||
.sizes = sizes,
|
||||
.tls_loc = tls_loc,
|
||||
.spill_count = 0,
|
||||
};
|
||||
|
||||
assign_tls_locations(&lctx);
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_MEMMOV:
|
||||
lower_memmov(&lctx, I, tls_base);
|
||||
break;
|
||||
case BI_OPCODE_PHI:
|
||||
lower_mem_phi(&lctx, I, tls_base);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ralloc_free(memctx);
|
||||
|
||||
return lctx.spill_count;
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "bi_swizzles.h"
|
||||
#include "compiler.h"
|
||||
#include "valhall.h"
|
||||
#include "panfrost/lib/pan_props.h"
|
||||
|
||||
/* Not all 8-bit and 16-bit instructions support all swizzles on all sources.
|
||||
* These passes, intended to run after NIR->BIR but before scheduling/RA, lower
|
||||
* away swizzles that cannot be represented. In the future, we should try to
|
||||
* recombine swizzles where we can as an optimization.
|
||||
*/
|
||||
|
||||
static uint32_t
|
||||
va_op_swizzles(enum bi_opcode op, unsigned src)
|
||||
{
|
||||
/* This is a bifrost-only instruction that is lowered on valhall */
|
||||
if (!valhall_opcodes[op].exact)
|
||||
return bi_op_swizzles[op][src];
|
||||
|
||||
uint32_t swizzles = 0;
|
||||
struct va_src_info info = va_src_info(op, src);
|
||||
|
||||
if (info.swizzle) {
|
||||
assert(info.size == VA_SIZE_16 || info.size == VA_SIZE_32);
|
||||
if (info.size == VA_SIZE_16)
|
||||
swizzles |= (1 << BI_SWIZZLE_H00) | (1 << BI_SWIZZLE_H10) |
|
||||
(1 << BI_SWIZZLE_H01) | (1 << BI_SWIZZLE_H11);
|
||||
else if (info.size == VA_SIZE_32)
|
||||
swizzles |= (1 << BI_SWIZZLE_H01) | (1 << BI_SWIZZLE_H0) |
|
||||
(1 << BI_SWIZZLE_H1);
|
||||
}
|
||||
|
||||
if (info.lane) {
|
||||
if (info.size == VA_SIZE_8)
|
||||
swizzles |= (1 << BI_SWIZZLE_B0) | (1 << BI_SWIZZLE_B1) |
|
||||
(1 << BI_SWIZZLE_B2) | (1 << BI_SWIZZLE_B3);
|
||||
if (info.size == VA_SIZE_16)
|
||||
swizzles |= (1 << BI_SWIZZLE_H0) | (1 << BI_SWIZZLE_H1);
|
||||
}
|
||||
|
||||
if (info.lanes) {
|
||||
assert(info.size == VA_SIZE_8);
|
||||
swizzles |= (1 << BI_SWIZZLE_B00) | (1 << BI_SWIZZLE_B11) |
|
||||
(1 << BI_SWIZZLE_B22) | (1 << BI_SWIZZLE_B33);
|
||||
}
|
||||
|
||||
if (info.halfswizzle) {
|
||||
assert(info.size == VA_SIZE_8);
|
||||
swizzles |= (1 << BI_SWIZZLE_B00) | (1 << BI_SWIZZLE_B10) |
|
||||
(1 << BI_SWIZZLE_B20) | (1 << BI_SWIZZLE_B30) |
|
||||
(1 << BI_SWIZZLE_B01) | (1 << BI_SWIZZLE_B11) |
|
||||
(1 << BI_SWIZZLE_B21) | (1 << BI_SWIZZLE_B31) |
|
||||
(1 << BI_SWIZZLE_B02) | (1 << BI_SWIZZLE_B12) |
|
||||
(1 << BI_SWIZZLE_B22) | (1 << BI_SWIZZLE_B32) |
|
||||
(1 << BI_SWIZZLE_B03) | (1 << BI_SWIZZLE_B13) |
|
||||
(1 << BI_SWIZZLE_B23) | (1 << BI_SWIZZLE_B33);
|
||||
}
|
||||
|
||||
if (info.widen) {
|
||||
if (info.size == VA_SIZE_8)
|
||||
swizzles |= (1 << BI_SWIZZLE_B0123) | (1 << BI_SWIZZLE_B3210) |
|
||||
(1 << BI_SWIZZLE_B0101) | (1 << BI_SWIZZLE_B2323) |
|
||||
(1 << BI_SWIZZLE_B0000) | (1 << BI_SWIZZLE_B1111) |
|
||||
(1 << BI_SWIZZLE_B2222) | (1 << BI_SWIZZLE_B3333) |
|
||||
(1 << BI_SWIZZLE_B2301) | (1 << BI_SWIZZLE_B1032) |
|
||||
(1 << BI_SWIZZLE_B0011) | (1 << BI_SWIZZLE_B2233);
|
||||
else if (info.size == VA_SIZE_16)
|
||||
swizzles |= (1 << BI_SWIZZLE_H00) | (1 << BI_SWIZZLE_H10) |
|
||||
(1 << BI_SWIZZLE_H01) | (1 << BI_SWIZZLE_H11) |
|
||||
(1 << BI_SWIZZLE_B00) | (1 << BI_SWIZZLE_B11) |
|
||||
(1 << BI_SWIZZLE_B22) | (1 << BI_SWIZZLE_B33) |
|
||||
(1 << BI_SWIZZLE_B01) | (1 << BI_SWIZZLE_B20) |
|
||||
(1 << BI_SWIZZLE_B02) | (1 << BI_SWIZZLE_B31) |
|
||||
(1 << BI_SWIZZLE_B13) | (1 << BI_SWIZZLE_B23);
|
||||
else if (info.size == VA_SIZE_32)
|
||||
swizzles |= (1 << BI_SWIZZLE_H01) | (1 << BI_SWIZZLE_H0) |
|
||||
(1 << BI_SWIZZLE_H1) | (1 << BI_SWIZZLE_B0) |
|
||||
(1 << BI_SWIZZLE_B1) | (1 << BI_SWIZZLE_B2) |
|
||||
(1 << BI_SWIZZLE_B3);
|
||||
}
|
||||
|
||||
if (info.combine) {
|
||||
assert(info.size == VA_SIZE_32);
|
||||
swizzles |= (1 << BI_SWIZZLE_H01) | (1 << BI_SWIZZLE_H0) | (1 << BI_SWIZZLE_H1);
|
||||
}
|
||||
|
||||
if (swizzles == 0)
|
||||
swizzles = 1 << BI_SWIZZLE_H01;
|
||||
|
||||
return swizzles;
|
||||
}
|
||||
|
||||
bool
|
||||
bi_op_supports_swizzle(enum bi_opcode op, unsigned src,
|
||||
enum bi_swizzle swizzle, unsigned arch)
|
||||
{
|
||||
uint32_t supported_swizzles = arch >= 9 ?
|
||||
va_op_swizzles(op, src) : bi_op_swizzles[op][src];
|
||||
return supported_swizzles & BITFIELD_BIT(swizzle);
|
||||
}
|
||||
|
||||
static void
|
||||
lower_swizzle(bi_context *ctx, bi_instr *ins, unsigned src)
|
||||
{
|
||||
/* We don't want to deal with reswizzling logic in modifier prop. Move
|
||||
* the swizzle outside, it's easier for clamp propagation. */
|
||||
if (ins->op == BI_OPCODE_FCLAMP_V2F16) {
|
||||
bi_builder b = bi_init_builder(ctx, bi_after_instr(ins));
|
||||
bi_index dest = ins->dest[0];
|
||||
bi_index tmp = bi_temp(ctx);
|
||||
|
||||
bi_index swizzled_src = bi_replace_index(ins->src[0], tmp);
|
||||
ins->src[0].swizzle = BI_SWIZZLE_H01;
|
||||
ins->dest[0] = tmp;
|
||||
bi_swz_v2i16_to(&b, dest, swizzled_src);
|
||||
return;
|
||||
}
|
||||
|
||||
if (bi_op_supports_swizzle(ins->op, src, ins->src[src].swizzle, ctx->arch))
|
||||
return;
|
||||
|
||||
/* First, try to apply a given swizzle to a constant to clear the
|
||||
* runtime swizzle. This is less heavy-handed than ignoring the
|
||||
* swizzle for scalar destinations, since it maintains
|
||||
* replication of the destination.
|
||||
*/
|
||||
if (ins->src[src].type == BI_INDEX_CONSTANT) {
|
||||
ins->src[src].value =
|
||||
bi_apply_swizzle(ins->src[src].value, ins->src[src].swizzle);
|
||||
ins->src[src].swizzle = BI_SWIZZLE_H01;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Even if the source does not replicate, if the consuming instruction
|
||||
* produces a 16-bit scalar, we can ignore the other component.
|
||||
*/
|
||||
if (ins->dest[0].swizzle == BI_SWIZZLE_H00 &&
|
||||
ins->src[src].swizzle == BI_SWIZZLE_H00) {
|
||||
ins->src[src].swizzle = BI_SWIZZLE_H01;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Lower it away */
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(ins));
|
||||
|
||||
bi_index orig = ins->src[src];
|
||||
bi_index stripped = bi_replace_index(bi_null(), orig);
|
||||
stripped.swizzle = ins->src[src].swizzle;
|
||||
|
||||
bi_index swz = bi_swz_v4i8(&b, stripped);
|
||||
|
||||
bi_replace_src(ins, src, swz);
|
||||
ins->src[src].swizzle = BI_SWIZZLE_H01;
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_instr_replicates(bi_instr *I, BITSET_WORD *replicates_16)
|
||||
{
|
||||
switch (I->op) {
|
||||
|
||||
/* Instructions that construct vectors have replicated output if their
|
||||
* sources are identical. Check this case first.
|
||||
*/
|
||||
case BI_OPCODE_MKVEC_V2I16:
|
||||
case BI_OPCODE_V2F32_TO_V2F16:
|
||||
return bi_is_value_equiv(I->src[0], I->src[1]);
|
||||
|
||||
/* 16-bit transcendentals are defined to output zero in their
|
||||
* upper half, so they do not replicate
|
||||
*/
|
||||
case BI_OPCODE_FRCP_F16:
|
||||
case BI_OPCODE_FRSQ_F16:
|
||||
return false;
|
||||
|
||||
/* Not sure, be conservative, we don't use these.. */
|
||||
case BI_OPCODE_VN_ASST1_F16:
|
||||
case BI_OPCODE_FPCLASS_F16:
|
||||
case BI_OPCODE_FPOW_SC_DET_F16:
|
||||
return false;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Replication analysis only makes sense for ALU instructions */
|
||||
if (bi_get_opcode_props(I)->message != BIFROST_MESSAGE_NONE)
|
||||
return false;
|
||||
|
||||
/* We only analyze 16-bit instructions for 16-bit replication. We could
|
||||
* maybe do better.
|
||||
*/
|
||||
if (bi_get_opcode_props(I)->size != BI_SIZE_16)
|
||||
return false;
|
||||
|
||||
bi_foreach_src(I, s) {
|
||||
if (bi_is_null(I->src[s]))
|
||||
continue;
|
||||
|
||||
/* Replicated swizzles */
|
||||
if (bi_swizzle_replicates_16(I->src[s].swizzle))
|
||||
continue;
|
||||
|
||||
/* Replicated values */
|
||||
if (bi_is_ssa(I->src[s]) && BITSET_TEST(replicates_16, I->src[s].value))
|
||||
continue;
|
||||
|
||||
/* Replicated constants */
|
||||
if (I->src[s].type == BI_INDEX_CONSTANT &&
|
||||
(I->src[s].value & 0xFFFF) == (I->src[s].value >> 16))
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
bi_lower_swizzle(bi_context *ctx)
|
||||
{
|
||||
bi_foreach_instr_global_safe(ctx, ins) {
|
||||
/* bi_lower_mkvec_swz takes care of these and can handle any swizzle */
|
||||
if (ins->op == BI_OPCODE_MKVEC_V2I16 ||
|
||||
ins->op == BI_OPCODE_MKVEC_V4I8 ||
|
||||
ins->op == BI_OPCODE_SWZ_V2I16 ||
|
||||
ins->op == BI_OPCODE_SWZ_V4I8)
|
||||
continue;
|
||||
|
||||
bi_foreach_src(ins, s) {
|
||||
if (bi_is_null(ins->src[s]))
|
||||
continue;
|
||||
if (ins->src[s].swizzle == BI_SWIZZLE_H01)
|
||||
continue;
|
||||
|
||||
lower_swizzle(ctx, ins, s);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now that we've lowered swizzles, clean up the mess */
|
||||
BITSET_WORD *replicates_16 = calloc(sizeof(bi_index), ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_instr_global(ctx, ins) {
|
||||
if (ins->nr_dests && bi_instr_replicates(ins, replicates_16))
|
||||
BITSET_SET(replicates_16, ins->dest[0].value);
|
||||
|
||||
if (ins->op == BI_OPCODE_SWZ_V2I16 && bi_is_ssa(ins->src[0]) &&
|
||||
BITSET_TEST(replicates_16, ins->src[0].value)) {
|
||||
bi_set_opcode(ins, BI_OPCODE_MOV_I32);
|
||||
ins->src[0].swizzle = BI_SWIZZLE_H01;
|
||||
}
|
||||
|
||||
/* On Valhall, if the instruction does some conversion depending on
|
||||
* swizzle, we should not touch it. */
|
||||
if (ctx->arch >= 9 && va_op_dest_modifier_does_convert(ins->op))
|
||||
continue;
|
||||
|
||||
/* The above passes rely on replicating destinations. For
|
||||
* Valhall, we will want to optimize this. For now, default
|
||||
* to Bifrost compatible behaviour.
|
||||
*/
|
||||
if (ins->nr_dests)
|
||||
ins->dest[0].swizzle = BI_SWIZZLE_H01;
|
||||
}
|
||||
|
||||
free(replicates_16);
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# Copyright (C) 2020 Collabora, Ltd.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
TEMPLATE = """#include "bi_opcodes.h"
|
||||
<%
|
||||
def hasmod(mods, name):
|
||||
return 1 if name in mods else 0
|
||||
%>
|
||||
struct bi_op_props bi_opcode_props[BI_NUM_OPCODES] = {
|
||||
% for opcode in sorted(mnemonics):
|
||||
<%
|
||||
add = instructions["+" + opcode][0][1] if "+" + opcode in instructions else None
|
||||
size = typesize(opcode)
|
||||
message = add["message"].upper() if add else "NONE"
|
||||
sr_count = add["staging_count"].upper() if add else "0"
|
||||
sr_read = int(add["staging"] in ["r", "rw"] if add else False)
|
||||
sr_write = int(add["staging"] in ["w", "rw"] if add else False)
|
||||
last = int(bool(add["last"]) if add else False)
|
||||
table = int(bool(add["table"]) if add else False)
|
||||
branch = int(opcode.startswith('BRANCH'))
|
||||
has_fma = int("*" + opcode in instructions)
|
||||
has_add = int("+" + opcode in instructions)
|
||||
is_float = int(opcode.endswith("f32") or opcode.endswith("f16"))
|
||||
mods = ops[opcode]['modifiers']
|
||||
clamp = hasmod(mods, 'clamp')
|
||||
not_result = hasmod(mods, 'not_result')
|
||||
abs = hasmod(mods, 'abs0') | (hasmod(mods, 'abs1') << 1) | (hasmod(mods, 'abs2') << 2)
|
||||
neg = hasmod(mods, 'neg0') | (hasmod(mods, 'neg1') << 1) | (hasmod(mods, 'neg2') << 2)
|
||||
m_not = hasmod(mods, 'not1')
|
||||
%>
|
||||
[BI_OPCODE_${opcode.replace('.', '_').upper()}] = {
|
||||
"${opcode}", BIFROST_MESSAGE_${message}, BI_SIZE_${size},
|
||||
BI_SR_COUNT_${sr_count}, ${sr_read}, ${sr_write}, ${last}, ${branch},
|
||||
${table}, ${has_fma}, ${has_add}, ${is_float}, ${clamp}, ${not_result},
|
||||
${abs}, ${neg}, ${m_not},
|
||||
},
|
||||
% endfor
|
||||
};"""
|
||||
|
||||
import sys
|
||||
from bifrost_isa import *
|
||||
from mako.template import Template
|
||||
|
||||
instructions = {}
|
||||
for arg in sys.argv[1:]:
|
||||
new_instructions = parse_instructions(arg, include_pseudo = True)
|
||||
instructions.update(new_instructions)
|
||||
|
||||
ir_instructions = partition_mnemonics(instructions)
|
||||
mnemonics = set(x[1:] for x in instructions.keys())
|
||||
|
||||
print(Template(COPYRIGHT + TEMPLATE).render(ops = ir_instructions, mnemonics = mnemonics, instructions = instructions, typesize = typesize))
|
||||
@@ -0,0 +1,105 @@
|
||||
# Copyright (C) 2020 Collabora, Ltd.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
TEMPLATE = """
|
||||
#ifndef _BI_OPCODES_H_
|
||||
#define _BI_OPCODES_H_
|
||||
|
||||
#include "bifrost.h"
|
||||
|
||||
% for mod in sorted(modifiers):
|
||||
% if len(modifiers[mod]) > 2: # otherwise just boolean
|
||||
enum bi_${mod.lower()} {
|
||||
% for i, state in enumerate(modifiers[mod]):
|
||||
% if state != "reserved":
|
||||
BI_${mod.upper()}_${state.upper()} = ${i},
|
||||
% endif
|
||||
% endfor
|
||||
};
|
||||
|
||||
% endif
|
||||
% endfor
|
||||
enum bi_opcode {
|
||||
% for opcode in sorted(mnemonics):
|
||||
BI_OPCODE_${opcode.replace('.', '_').upper()},
|
||||
% endfor
|
||||
BI_NUM_OPCODES
|
||||
};
|
||||
|
||||
/* Number of staging registers accessed, note this fits into 3-bits */
|
||||
|
||||
enum bi_sr_count {
|
||||
/* fixed counts */
|
||||
BI_SR_COUNT_0 = 0,
|
||||
BI_SR_COUNT_1 = 1,
|
||||
BI_SR_COUNT_2 = 2,
|
||||
BI_SR_COUNT_3 = 3,
|
||||
BI_SR_COUNT_4 = 4,
|
||||
|
||||
/* derived from register_format and vecsize */
|
||||
BI_SR_COUNT_FORMAT = 5,
|
||||
|
||||
/* equal to vecsize alone */
|
||||
BI_SR_COUNT_VECSIZE = 6,
|
||||
|
||||
/* specified directly as the sr_count immediate */
|
||||
BI_SR_COUNT_SR_COUNT = 7
|
||||
};
|
||||
|
||||
enum bi_size {
|
||||
BI_SIZE_8 = 0,
|
||||
BI_SIZE_16,
|
||||
BI_SIZE_24,
|
||||
BI_SIZE_32,
|
||||
BI_SIZE_48,
|
||||
BI_SIZE_64,
|
||||
BI_SIZE_96,
|
||||
BI_SIZE_128,
|
||||
};
|
||||
|
||||
/* Description of an opcode in the IR */
|
||||
struct bi_op_props {
|
||||
const char *name;
|
||||
|
||||
enum bifrost_message_type message : 4;
|
||||
enum bi_size size : 3;
|
||||
enum bi_sr_count sr_count : 3;
|
||||
bool sr_read : 1;
|
||||
bool sr_write : 1;
|
||||
bool last : 1;
|
||||
bool branch : 1;
|
||||
bool table : 1;
|
||||
bool fma : 1;
|
||||
bool add : 1;
|
||||
bool is_float : 1;
|
||||
|
||||
/* Supported propagable modifiers */
|
||||
bool clamp : 1;
|
||||
bool not_result : 1;
|
||||
unsigned abs : 3;
|
||||
unsigned neg : 3;
|
||||
bool not_mod : 1;
|
||||
};
|
||||
|
||||
/* Generated in bi_opcodes.c.py */
|
||||
extern struct bi_op_props bi_opcode_props[BI_NUM_OPCODES];
|
||||
|
||||
#endif
|
||||
"""
|
||||
|
||||
import sys
|
||||
from bifrost_isa import *
|
||||
from mako.template import Template
|
||||
|
||||
instructions = {}
|
||||
for arg in sys.argv[1:]:
|
||||
new_instructions = parse_instructions(arg, include_pseudo = True)
|
||||
instructions.update(new_instructions)
|
||||
|
||||
ir_instructions = partition_mnemonics(instructions)
|
||||
modifier_lists = order_modifiers(ir_instructions)
|
||||
|
||||
# Generate sorted list of mnemonics without regard to unit
|
||||
mnemonics = set(x[1:] for x in instructions.keys())
|
||||
|
||||
print(Template(COPYRIGHT + TEMPLATE).render(mnemonics = mnemonics, modifiers = modifier_lists))
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/* Dead simple constant folding to cleanup compiler frontend patterns. Before
|
||||
* adding a new pattern here, check why you need it and whether we can avoid
|
||||
* generating the constant BIR at all. */
|
||||
|
||||
static inline uint32_t
|
||||
bi_source_value(const bi_instr *I, unsigned s)
|
||||
{
|
||||
if (s < I->nr_srcs)
|
||||
return bi_apply_swizzle(I->src[s].value, I->src[s].swizzle);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
bi_fold_constant(bi_instr *I, bool *unsupported)
|
||||
{
|
||||
/* We can only fold instructions where all sources are constant */
|
||||
bi_foreach_src(I, s) {
|
||||
if (I->src[s].type != BI_INDEX_CONSTANT) {
|
||||
*unsupported = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Grab the sources */
|
||||
uint32_t a = bi_source_value(I, 0);
|
||||
uint32_t b = bi_source_value(I, 1);
|
||||
uint32_t c = bi_source_value(I, 2);
|
||||
uint32_t d = bi_source_value(I, 3);
|
||||
|
||||
/* Evaluate the instruction */
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_SWZ_V2I16:
|
||||
return a;
|
||||
|
||||
case BI_OPCODE_MKVEC_V2I16:
|
||||
return (b << 16) | (a & 0xFFFF);
|
||||
|
||||
case BI_OPCODE_MKVEC_V4I8:
|
||||
return (d << 24) | ((c & 0xFF) << 16) | ((b & 0xFF) << 8) | (a & 0xFF);
|
||||
|
||||
case BI_OPCODE_MKVEC_V2I8:
|
||||
return (c << 16) | ((b & 0xFF) << 8) | (a & 0xFF);
|
||||
|
||||
case BI_OPCODE_LSHIFT_OR_I32:
|
||||
if (I->not_result || I->src[0].neg || I->src[1].neg)
|
||||
break;
|
||||
|
||||
return (a << (c & 0x1F)) | b;
|
||||
|
||||
case BI_OPCODE_F32_TO_U32:
|
||||
if (I->round == BI_ROUND_NONE) {
|
||||
/* Explicitly clamp to prevent undefined behaviour and
|
||||
* match hardware rules */
|
||||
float f = uif(a);
|
||||
return (f >= 0.0) ? (uint32_t)f : 0;
|
||||
} else
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
*unsupported = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
bi_opt_constant_fold(bi_context *ctx)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, ins) {
|
||||
bool unsupported = false;
|
||||
uint32_t replace = bi_fold_constant(ins, &unsupported);
|
||||
if (unsupported)
|
||||
continue;
|
||||
|
||||
/* Replace with constant move, to be copypropped */
|
||||
assert(ins->nr_dests == 1);
|
||||
bi_builder b = bi_init_builder(ctx, bi_after_instr(ins));
|
||||
bi_mov_i32_to(&b, ins->dest[0], bi_imm_u32(replace));
|
||||
bi_remove_instruction(ins);
|
||||
progress = true;
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Google LLC.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "util/set.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/* A simple block is defined here as:
|
||||
* - a block with only 1 predecessor and 1 successor
|
||||
* - a block with no instruction or a single branch instruction (in which case
|
||||
* the branch condition does not matter as the block has only 1 successor).
|
||||
*/
|
||||
static bool
|
||||
is_simple_block(bi_block *block)
|
||||
{
|
||||
assert(block != NULL);
|
||||
if (bi_num_successors(block) != 1 || bi_num_predecessors(block) != 1)
|
||||
return false;
|
||||
if (list_is_empty(&block->instructions))
|
||||
return true;
|
||||
if (!list_is_singular(&block->instructions))
|
||||
return false;
|
||||
return bi_is_branch(list_first_entry(&block->instructions, bi_instr, link));
|
||||
}
|
||||
|
||||
static bi_block *
|
||||
get_simple_block_predecessor(bi_block *block)
|
||||
{
|
||||
assert(is_simple_block(block));
|
||||
bi_foreach_predecessor(block, pred) {
|
||||
return *pred;
|
||||
}
|
||||
/* Because block is a 'simple block' we should not be able to get here. */
|
||||
UNREACHABLE("We should not get here");
|
||||
}
|
||||
|
||||
static void
|
||||
remove_simple_block(bi_block *block)
|
||||
{
|
||||
assert(is_simple_block(block));
|
||||
bi_block *pred = get_simple_block_predecessor(block);
|
||||
bi_block *succ = block->successors[0];
|
||||
|
||||
uint8_t block_idx = pred->successors[0] == block ? 0 : 1;
|
||||
pred->successors[block_idx] = succ;
|
||||
if (pred->successors[block_idx ^ 0x1] == succ)
|
||||
pred->successors[1] = NULL;
|
||||
|
||||
struct util_dynarray new_preds;
|
||||
util_dynarray_init(&new_preds, succ);
|
||||
bi_foreach_predecessor(succ, succ_pred) {
|
||||
bi_block *append = *succ_pred;
|
||||
/* replace 'block' by 'pred'. If 'pred' is seen, do not add it as it will
|
||||
* already be added in replacement of 'block'. */
|
||||
if (*succ_pred == block)
|
||||
append = pred;
|
||||
else if (*succ_pred == pred)
|
||||
continue;
|
||||
util_dynarray_append(&new_preds, append);
|
||||
}
|
||||
succ->predecessors = new_preds;
|
||||
block->link.prev->next = block->link.next;
|
||||
block->link.next->prev = block->link.prev;
|
||||
}
|
||||
|
||||
static bool
|
||||
inverse_cmpf(enum bi_cmpf *cond)
|
||||
{
|
||||
switch (*cond) {
|
||||
case BI_CMPF_EQ:
|
||||
*cond = BI_CMPF_NE;
|
||||
break;
|
||||
case BI_CMPF_GT:
|
||||
*cond = BI_CMPF_LE;
|
||||
break;
|
||||
case BI_CMPF_GE:
|
||||
*cond = BI_CMPF_LT;
|
||||
break;
|
||||
case BI_CMPF_NE:
|
||||
*cond = BI_CMPF_EQ;
|
||||
break;
|
||||
case BI_CMPF_LT:
|
||||
*cond = BI_CMPF_GE;
|
||||
break;
|
||||
case BI_CMPF_LE:
|
||||
*cond = BI_CMPF_GT;
|
||||
break;
|
||||
case BI_CMPF_GTLT:
|
||||
return false;
|
||||
default:
|
||||
UNREACHABLE("unexpected condition");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
try_remove_simple_block(bi_block *prev, bi_block *block, bi_block *next,
|
||||
struct set *blocks_seen)
|
||||
{
|
||||
if (block == NULL)
|
||||
return false;
|
||||
_mesa_set_add(blocks_seen, block);
|
||||
|
||||
if (!is_simple_block(block))
|
||||
return false;
|
||||
bi_block *pred = get_simple_block_predecessor(block);
|
||||
bi_block *succ = block->successors[0];
|
||||
|
||||
bi_instr *last_instr =
|
||||
list_last_entry(&(pred->instructions), bi_instr, link);
|
||||
bool last_instr_is_branch = bi_is_branch(last_instr);
|
||||
|
||||
/* if 'succ' has already been seen, it means that the jump between 'block'
|
||||
* and 'succ' is a backward jump. This kind of jump can lead to issue
|
||||
* regarding reconvergence
|
||||
* (https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36021#note_3020690).
|
||||
* Thus we don't remove those simple block to avoid reconvergence issue.
|
||||
*/
|
||||
bool succ_seen = _mesa_set_search(blocks_seen, succ) != NULL;
|
||||
|
||||
if (last_instr_is_branch && !succ_seen &&
|
||||
(last_instr->branch_target == block ||
|
||||
(pred == prev && last_instr->branch_target == next &&
|
||||
inverse_cmpf(&last_instr->cmpf)))) {
|
||||
/* Remove 'simple_block' when either:
|
||||
* - 'pred' jumps to 'simple_block'
|
||||
* - or:
|
||||
* - 'pred' is the previous block thus it falls through 'simple block'
|
||||
* - 'pred' jumps to 'next'
|
||||
* - We can rework the condition to have:
|
||||
* - 'pred' jumping to 'simple block' successor
|
||||
* - 'pred' falls through 'next'.
|
||||
*/
|
||||
last_instr->branch_target = succ;
|
||||
remove_simple_block(block);
|
||||
return true;
|
||||
} else if (!last_instr_is_branch && pred == prev && succ == next) {
|
||||
/* Remove 'simple block' when it is between its predecessor and successor
|
||||
* when predecessor fall through 'simple block' (without a branch).
|
||||
*/
|
||||
remove_simple_block(block);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
try_remove_simple_blocks(bi_context *ctx)
|
||||
{
|
||||
bool changed = false;
|
||||
struct set *blocks_seen =
|
||||
_mesa_set_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal);
|
||||
bi_block *prev = NULL;
|
||||
bi_block *block = NULL;
|
||||
bi_foreach_block(ctx, next) {
|
||||
bool removed = try_remove_simple_block(prev, block, next, blocks_seen);
|
||||
changed |= removed;
|
||||
if (!removed) {
|
||||
prev = block;
|
||||
}
|
||||
block = next;
|
||||
}
|
||||
_mesa_set_destroy(blocks_seen, NULL);
|
||||
return changed;
|
||||
}
|
||||
|
||||
static void
|
||||
remove_branch_to_next_block(bi_context *ctx)
|
||||
{
|
||||
bi_block *block = NULL;
|
||||
bi_foreach_block(ctx, next) {
|
||||
if (block != NULL) {
|
||||
bi_instr *last_instr =
|
||||
list_last_entry(&(block->instructions), bi_instr, link);
|
||||
if (bi_num_successors(block) == 1 && last_instr &&
|
||||
bi_is_branch(last_instr) && last_instr->branch_target == next) {
|
||||
bi_remove_instruction(last_instr);
|
||||
}
|
||||
}
|
||||
block = next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_control_flow(bi_context *ctx)
|
||||
{
|
||||
while (try_remove_simple_blocks(ctx))
|
||||
;
|
||||
remove_branch_to_next_block(ctx);
|
||||
}
|
||||
@@ -0,0 +1,492 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Alyssa Rosenzweig
|
||||
* Copyright (C) 2019-2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
#include "util/hash_table.h"
|
||||
|
||||
/* SSA copy propagation */
|
||||
|
||||
static bool
|
||||
bi_reads_fau(bi_instr *ins)
|
||||
{
|
||||
bi_foreach_src(ins, s) {
|
||||
if (ins->src[s].type == BI_INDEX_FAU)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void
|
||||
bi_opt_word_prop(bi_context *ctx)
|
||||
{
|
||||
/* Chase SPLIT of COLLECT. Instruction selection usually avoids this
|
||||
* pattern (due to the split cache), but it is inevitably generated by
|
||||
* the UBO pushing pass.
|
||||
*/
|
||||
bi_instr **collects = calloc(sizeof(bi_instr *), ctx->ssa_alloc);
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
if (I->op == BI_OPCODE_COLLECT_I32) {
|
||||
/* Rewrite trivial collects while we're at it */
|
||||
if (I->nr_srcs == 1)
|
||||
bi_set_opcode(I, BI_OPCODE_MOV_I32);
|
||||
|
||||
collects[I->dest[0].value] = I;
|
||||
} else if (I->op == BI_OPCODE_SPLIT_I32) {
|
||||
/* Rewrite trivial splits while we're at it */
|
||||
if (I->nr_dests == 1)
|
||||
bi_set_opcode(I, BI_OPCODE_MOV_I32);
|
||||
|
||||
bi_instr *collect = collects[I->src[0].value];
|
||||
if (!collect)
|
||||
continue;
|
||||
|
||||
/* Lower the split to moves, copyprop cleans up */
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I));
|
||||
|
||||
bi_foreach_dest(I, d)
|
||||
bi_mov_i32_to(&b, I->dest[d], collect->src[d]);
|
||||
|
||||
bi_remove_instruction(I);
|
||||
}
|
||||
}
|
||||
|
||||
free(collects);
|
||||
|
||||
bi_index *replacement = calloc(sizeof(bi_index), ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, ins) {
|
||||
if (ins->op == BI_OPCODE_MOV_I32 &&
|
||||
ins->src[0].type != BI_INDEX_REGISTER) {
|
||||
bi_index replace = ins->src[0];
|
||||
|
||||
/* Peek through one layer so copyprop converges in one
|
||||
* iteration for chained moves */
|
||||
if (bi_is_ssa(replace)) {
|
||||
bi_index chained = replacement[replace.value];
|
||||
|
||||
if (!bi_is_null(chained))
|
||||
replace = chained;
|
||||
}
|
||||
|
||||
assert(ins->nr_dests == 1);
|
||||
replacement[ins->dest[0].value] = replace;
|
||||
}
|
||||
|
||||
bi_foreach_src(ins, s) {
|
||||
bi_index use = ins->src[s];
|
||||
|
||||
if (use.type != BI_INDEX_NORMAL)
|
||||
continue;
|
||||
if (bi_is_staging_src(ins, s))
|
||||
continue;
|
||||
|
||||
bi_index repl = replacement[use.value];
|
||||
|
||||
if (repl.type == BI_INDEX_CONSTANT && bi_reads_fau(ins))
|
||||
continue;
|
||||
|
||||
if (!bi_is_null(repl))
|
||||
bi_replace_src(ins, s, repl);
|
||||
}
|
||||
}
|
||||
|
||||
free(replacement);
|
||||
}
|
||||
|
||||
static bi_index
|
||||
select_byte(bi_index idx, unsigned byte)
|
||||
{
|
||||
unsigned bytes[4] = {0, 0, 0, 0};
|
||||
bi_swizzle_to_byte_channels(idx.swizzle, bytes);
|
||||
idx.swizzle = BI_SWIZZLE_B0 + bytes[byte];
|
||||
return idx;
|
||||
}
|
||||
|
||||
struct byte_prop_entry {
|
||||
bi_index word;
|
||||
bi_index bytes[4];
|
||||
};
|
||||
|
||||
static void *
|
||||
byte_prop_ht_key(bi_index idx)
|
||||
{
|
||||
assert(bi_is_ssa(idx));
|
||||
|
||||
assert(idx.value < (1 << 26) - 1);
|
||||
assert(idx.offset < (1 << 6));
|
||||
|
||||
/* Add 1 to value because zero keys are not allowed */
|
||||
uint32_t key = (idx.value + 1) | ((uint32_t)idx.offset << 26);
|
||||
|
||||
return (void *)(uintptr_t)key;
|
||||
}
|
||||
|
||||
static struct byte_prop_entry *
|
||||
add_byte_prop_entry(struct hash_table *ht, bi_index idx)
|
||||
{
|
||||
assert(!_mesa_hash_table_search(ht, byte_prop_ht_key(idx)));
|
||||
struct byte_prop_entry *entry = rzalloc(ht, struct byte_prop_entry);
|
||||
_mesa_hash_table_insert(ht, byte_prop_ht_key(idx), entry);
|
||||
return entry;
|
||||
}
|
||||
|
||||
static struct byte_prop_entry *
|
||||
get_byte_prop_entry(struct hash_table *ht, bi_index idx)
|
||||
{
|
||||
if (!bi_is_ssa(idx))
|
||||
return NULL;
|
||||
|
||||
struct hash_entry *ht_entry =
|
||||
_mesa_hash_table_search(ht, byte_prop_ht_key(idx));
|
||||
if (ht_entry == NULL)
|
||||
return NULL;
|
||||
|
||||
return ht_entry->data;
|
||||
}
|
||||
|
||||
/* For the given entry and swizzle, try to get it as a single word from the
|
||||
* bytes in the entry. Only the bytes actually referenced by the swizzle are
|
||||
* considered and the returned word (if any) is swizzled accordingly.
|
||||
*/
|
||||
static bi_index
|
||||
entry_bytes_as_word(const struct byte_prop_entry *entry,
|
||||
enum bi_swizzle swizzle)
|
||||
{
|
||||
unsigned bytes[4];
|
||||
bi_swizzle_to_byte_channels(swizzle, bytes);
|
||||
|
||||
bi_index word = entry->bytes[bytes[0]];
|
||||
if (word.type == BI_INDEX_CONSTANT) {
|
||||
uint32_t value = 0;
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
if (entry->bytes[bytes[i]].type != BI_INDEX_CONSTANT)
|
||||
return bi_null();
|
||||
|
||||
bi_index byte_idx = entry->bytes[bytes[i]];
|
||||
uint8_t byte = bi_apply_swizzle(byte_idx.value, byte_idx.swizzle);
|
||||
value |= (uint32_t)byte << (i * 8);
|
||||
}
|
||||
return bi_imm_u32(value);
|
||||
} else {
|
||||
bytes[0] = word.swizzle - BI_SWIZZLE_B0;
|
||||
for (unsigned i = 1; i < 4; i++) {
|
||||
if (!bi_is_word_equiv(entry->bytes[bytes[i]], word))
|
||||
return bi_null();
|
||||
|
||||
bytes[i] = entry->bytes[bytes[i]].swizzle - BI_SWIZZLE_B0;
|
||||
}
|
||||
|
||||
if (!bi_swizzle_from_byte_channels(bytes, &swizzle))
|
||||
return bi_null();
|
||||
|
||||
word.swizzle = swizzle;
|
||||
return word;
|
||||
}
|
||||
}
|
||||
|
||||
/* For the given entry and swizzle, try to get it as a single word. The
|
||||
* returned word (if any) is swizzled accordingly.
|
||||
*/
|
||||
static bi_index
|
||||
entry_as_word(const struct byte_prop_entry *entry,
|
||||
enum bi_swizzle swizzle)
|
||||
{
|
||||
/* First, chase bytes and see if we can construct a word that way */
|
||||
bi_index word = entry_bytes_as_word(entry, swizzle);
|
||||
if (!bi_is_null(word))
|
||||
return word;
|
||||
|
||||
/* Fall back to entry->word, if any */
|
||||
word = entry->word;
|
||||
if (bi_is_null(word))
|
||||
return bi_null();
|
||||
|
||||
if (!bi_try_compose_swizzles(&swizzle, swizzle, word.swizzle))
|
||||
return bi_null();
|
||||
|
||||
word.swizzle = swizzle;
|
||||
return word;
|
||||
}
|
||||
|
||||
static bool
|
||||
chase_bytes(struct byte_prop_entry *dst_entry, struct hash_table *ht)
|
||||
{
|
||||
bool progress = false;
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
/* Chase as far as we can, updating dst_entry->src[i] as we go */
|
||||
while (true) {
|
||||
assert(bi_swizzle_replicates_8(dst_entry->bytes[i].swizzle));
|
||||
unsigned byte = dst_entry->bytes[i].swizzle - BI_SWIZZLE_B0;
|
||||
|
||||
struct byte_prop_entry *src_entry =
|
||||
get_byte_prop_entry(ht, dst_entry->bytes[i]);
|
||||
if (src_entry == NULL || bi_is_null(src_entry->bytes[byte]))
|
||||
break;
|
||||
|
||||
progress = true;
|
||||
dst_entry->bytes[i] = src_entry->bytes[byte];
|
||||
}
|
||||
}
|
||||
|
||||
dst_entry->word = entry_bytes_as_word(dst_entry, BI_SWIZZLE_H01);
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
static bool
|
||||
chase_word(struct byte_prop_entry *dst_entry, struct hash_table *ht)
|
||||
{
|
||||
/* Chase the swizzle, updaing dst_entry->word whenever we find a new valid
|
||||
* swizzled word. For the purposes of this function, src will only be used
|
||||
* to index into the prop entry table. The actual swizzle is represented
|
||||
* by src_bytes[], which may or may not be a valid bi_swizzle.
|
||||
*/
|
||||
bi_index src = dst_entry->word;
|
||||
unsigned src_bytes[4];
|
||||
bi_swizzle_to_byte_channels(src.swizzle, src_bytes);
|
||||
|
||||
bool progress = false;
|
||||
while (true) {
|
||||
struct byte_prop_entry *src_entry = get_byte_prop_entry(ht, src);
|
||||
if (src_entry == NULL || bi_is_null(src_entry->word))
|
||||
return progress;
|
||||
|
||||
if (src_entry->word.type == BI_INDEX_CONSTANT) {
|
||||
assert(src_entry->word.swizzle == BI_SWIZZLE_H01);
|
||||
const uint32_t src_value = src_entry->word.value;
|
||||
|
||||
uint32_t value = 0;
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
value |= ((src_value >> (src_bytes[i] * 8)) & 0xff) << (i * 8);
|
||||
|
||||
dst_entry->word = bi_imm_u32(value);
|
||||
return true;
|
||||
}
|
||||
|
||||
unsigned entry_bytes[4];
|
||||
bi_swizzle_to_byte_channels(src_entry->word.swizzle, entry_bytes);
|
||||
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
src_bytes[i] = entry_bytes[src_bytes[i]];
|
||||
|
||||
enum bi_swizzle swizzle = BI_SWIZZLE_H01;
|
||||
if (bi_swizzle_from_byte_channels(src_bytes, &swizzle)) {
|
||||
progress = true;
|
||||
dst_entry->word = src_entry->word;
|
||||
dst_entry->word.swizzle = swizzle;
|
||||
}
|
||||
|
||||
src = src_entry->word;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
byte_chase_instr_srcs(bi_context *ctx, bi_instr *I, struct hash_table *ht)
|
||||
{
|
||||
bi_foreach_src(I, s) {
|
||||
if (bi_count_read_registers(I, s) != 1)
|
||||
continue;
|
||||
|
||||
const struct byte_prop_entry *src_entry =
|
||||
get_byte_prop_entry(ht, I->src[s]);
|
||||
if (src_entry == NULL)
|
||||
continue;
|
||||
|
||||
bi_index repl = entry_as_word(src_entry, I->src[s].swizzle);
|
||||
if (bi_is_null(repl))
|
||||
continue;
|
||||
|
||||
if (!bi_op_supports_swizzle(I->op, s, repl.swizzle, ctx->arch))
|
||||
continue;
|
||||
|
||||
if (bi_is_staging_src(I, s) && repl.type != BI_INDEX_NORMAL)
|
||||
continue;
|
||||
|
||||
if (repl.type == BI_INDEX_CONSTANT && bi_reads_fau(I))
|
||||
continue;
|
||||
|
||||
/* bi_replace_src uses the swizzle and other modifiers from the original
|
||||
* and stomps the replacement but repl is already swizzled for what we
|
||||
* want so we have to copy the swizzle manually.
|
||||
*/
|
||||
I->src[s].swizzle = repl.swizzle;
|
||||
repl.swizzle = BI_SWIZZLE_H01;
|
||||
bi_replace_src(I, s, repl);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
byte_chase_add_swz_instr(bi_context *ctx, bi_instr *I, struct hash_table *ht)
|
||||
{
|
||||
assert(I->op == BI_OPCODE_MOV_I32 ||
|
||||
I->op == BI_OPCODE_SWZ_V2I16 ||
|
||||
I->op == BI_OPCODE_SWZ_V4I8);
|
||||
|
||||
/* Don't try to propagate registers */
|
||||
if (I->src[0].type == BI_INDEX_REGISTER)
|
||||
return false;
|
||||
|
||||
struct byte_prop_entry *dst_entry = add_byte_prop_entry(ht, I->dest[0]);
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
dst_entry->bytes[i] = select_byte(I->src[0], i);
|
||||
|
||||
bool progress = chase_bytes(dst_entry, ht);
|
||||
if (bi_is_null(dst_entry->word)) {
|
||||
/* If chasing bytes wasn't able to produce a word, just chase words and
|
||||
* see if we can do better.
|
||||
*/
|
||||
dst_entry->word = I->src[0];
|
||||
progress = chase_word(dst_entry, ht);
|
||||
}
|
||||
|
||||
if (!progress || bi_is_null(dst_entry->word))
|
||||
return false;
|
||||
|
||||
I->src[0] = dst_entry->word;
|
||||
if (dst_entry->word.swizzle == BI_SWIZZLE_H01)
|
||||
I->op = BI_OPCODE_MOV_I32;
|
||||
else if (dst_entry->word.swizzle == BI_SWIZZLE_H00 ||
|
||||
dst_entry->word.swizzle == BI_SWIZZLE_H10 ||
|
||||
dst_entry->word.swizzle == BI_SWIZZLE_H11)
|
||||
I->op = BI_OPCODE_SWZ_V2I16;
|
||||
else
|
||||
I->op = BI_OPCODE_SWZ_V4I8;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
byte_chase_add_vec_instr(bi_context *ctx, bi_instr *I, struct hash_table *ht)
|
||||
{
|
||||
bi_index bytes[4];
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_MKVEC_V2I16:
|
||||
for (unsigned i = 0; i < 2; i++) {
|
||||
assert(I->src[i].swizzle == BI_SWIZZLE_H00 ||
|
||||
I->src[i].swizzle == BI_SWIZZLE_H11);
|
||||
bytes[i * 2 + 0] = select_byte(I->src[i], 0);
|
||||
bytes[i * 2 + 1] = select_byte(I->src[i], 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case BI_OPCODE_MKVEC_V2I8:
|
||||
bytes[0] = I->src[0];
|
||||
bytes[1] = I->src[1];
|
||||
bytes[2] = select_byte(I->src[2], 0);
|
||||
bytes[3] = select_byte(I->src[2], 1);
|
||||
break;
|
||||
|
||||
case BI_OPCODE_MKVEC_V4I8:
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
bytes[i] = I->src[i];
|
||||
break;
|
||||
|
||||
case BI_OPCODE_U8_TO_U32:
|
||||
bytes[0] = I->src[0];
|
||||
bytes[1] = bi_imm_u8(0);
|
||||
bytes[2] = bi_imm_u8(0);
|
||||
bytes[3] = bi_imm_u8(0);
|
||||
break;
|
||||
|
||||
case BI_OPCODE_U16_TO_U32:
|
||||
bytes[0] = select_byte(I->src[0], 0);
|
||||
bytes[1] = select_byte(I->src[0], 1);
|
||||
bytes[2] = bi_imm_u8(0);
|
||||
bytes[3] = bi_imm_u8(0);
|
||||
break;
|
||||
|
||||
case BI_OPCODE_V2U8_TO_V2U16:
|
||||
bytes[0] = select_byte(I->src[0], 0);
|
||||
bytes[1] = bi_imm_u8(0);
|
||||
bytes[2] = select_byte(I->src[0], 2);
|
||||
bytes[3] = bi_imm_u8(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
UNREACHABLE("Unhanded vec instruction");
|
||||
}
|
||||
|
||||
struct byte_prop_entry *dst_entry = add_byte_prop_entry(ht, I->dest[0]);
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
/* Don't try to propagate registers */
|
||||
if (bytes[i].type != BI_INDEX_REGISTER)
|
||||
dst_entry->bytes[i] = bytes[i];
|
||||
}
|
||||
|
||||
if (!chase_bytes(dst_entry, ht))
|
||||
return false;
|
||||
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I));
|
||||
bi_mkvec_v4i8_to(&b, I->dest[0],
|
||||
dst_entry->bytes[0], dst_entry->bytes[1],
|
||||
dst_entry->bytes[2], dst_entry->bytes[3]);
|
||||
bi_remove_instruction(I);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Byte propagation
|
||||
*
|
||||
* This is actually two passes in one: Byte propagation and swizzle
|
||||
* propagation. Any time we see a MKVEC, we look at its sources only as bytes
|
||||
* and chase individual bytes back, through other MKVEC and SWZ, to their
|
||||
* generating instruction and make the MKVEC only consume the original bytes.
|
||||
* If the MKVEC happens to construct something that's just a swizzle of
|
||||
* another def (this is fairly common), we record that as well. The idea here
|
||||
* is that a lot of MKVEC just consume other MKVEC and we can get rid of the
|
||||
* intermediate ones or even the whole chain if it just ends up being a
|
||||
* swizzle in the end.
|
||||
*
|
||||
* For SWZ instructions, we first look at them like a MKVEC of the individual
|
||||
* bytes they consume. If that doesn't yield a single swizzled word, we then
|
||||
* crawl through the words table, just accumulating swizzles. This gives us
|
||||
* the best (closest to the generating instructions) coherent word. We could
|
||||
* also replace SWZ with MKVEC and just do byte propagation but MKVEC is often
|
||||
* 2 instructions whereas SWZ is often one (or folded into a source) so this
|
||||
* is probably the better balance.
|
||||
*
|
||||
* Finally, we not only replace the MKVEC and SWZ instructions but we also
|
||||
* attempt to propagate swizzles into individual ALU op sources.
|
||||
*/
|
||||
static void
|
||||
bi_opt_byte_prop(bi_context *ctx)
|
||||
{
|
||||
struct hash_table *ht = _mesa_hash_table_create_u32_keys(NULL);
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_MKVEC_V2I16:
|
||||
case BI_OPCODE_MKVEC_V2I8:
|
||||
case BI_OPCODE_MKVEC_V4I8:
|
||||
case BI_OPCODE_U8_TO_U32:
|
||||
case BI_OPCODE_U16_TO_U32:
|
||||
case BI_OPCODE_V2U8_TO_V2U16:
|
||||
byte_chase_add_vec_instr(ctx, I, ht);
|
||||
break;
|
||||
|
||||
case BI_OPCODE_MOV_I32:
|
||||
case BI_OPCODE_SWZ_V2I16:
|
||||
case BI_OPCODE_SWZ_V4I8:
|
||||
byte_chase_add_swz_instr(ctx, I, ht);
|
||||
break;
|
||||
|
||||
default:
|
||||
byte_chase_instr_srcs(ctx, I, ht);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_hash_table_destroy(ht, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_copy_prop(bi_context *ctx)
|
||||
{
|
||||
bi_opt_word_prop(ctx);
|
||||
bi_opt_byte_prop(ctx);
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Collabora, Ltd.
|
||||
* Copyright (C) 2014 Valve Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
#define XXH_INLINE_ALL
|
||||
#include "util/xxhash.h"
|
||||
|
||||
/* This pass handles CSE'ing repeated expressions created in the process of
|
||||
* translating from NIR. Also, currently this is intra-block only, to make it
|
||||
* work over multiple block we'd need to bring forward dominance calculation.
|
||||
*/
|
||||
|
||||
static inline uint32_t
|
||||
HASH(uint32_t hash, unsigned data)
|
||||
{
|
||||
return XXH32(&data, sizeof(data), hash);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
hash_index(uint32_t hash, bi_index index)
|
||||
{
|
||||
hash = HASH(hash, index.value);
|
||||
hash = HASH(hash, index.abs);
|
||||
hash = HASH(hash, index.neg);
|
||||
hash = HASH(hash, index.swizzle);
|
||||
hash = HASH(hash, index.offset);
|
||||
hash = HASH(hash, index.type);
|
||||
return hash;
|
||||
}
|
||||
|
||||
/* Hash an ALU instruction. */
|
||||
static uint32_t
|
||||
hash_instr(const void *data)
|
||||
{
|
||||
const bi_instr *I = data;
|
||||
uint32_t hash = 0;
|
||||
|
||||
hash = HASH(hash, I->op);
|
||||
hash = HASH(hash, I->nr_dests);
|
||||
hash = HASH(hash, I->nr_srcs);
|
||||
|
||||
assert(!I->flow && !I->slot && "CSE must be early");
|
||||
|
||||
/* Explcitly skip destinations, except for size details */
|
||||
bi_foreach_dest(I, d) {
|
||||
hash = HASH(hash, I->dest[d].swizzle);
|
||||
}
|
||||
|
||||
bi_foreach_src(I, s) {
|
||||
hash = hash_index(hash, I->src[s]);
|
||||
}
|
||||
|
||||
/* Explicitly skip branch, regfmt, vecsize, no_spill, tdd, table */
|
||||
hash = HASH(hash, I->dest_mod);
|
||||
|
||||
/* Explicitly skip other immediates */
|
||||
hash = HASH(hash, I->shift);
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(I->flags); ++i)
|
||||
hash = HASH(hash, I->flags[i]);
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
static bool
|
||||
instrs_equal(const void *_i1, const void *_i2)
|
||||
{
|
||||
const bi_instr *i1 = _i1, *i2 = _i2;
|
||||
|
||||
if (i1->op != i2->op)
|
||||
return false;
|
||||
if (i1->nr_srcs != i2->nr_srcs)
|
||||
return false;
|
||||
if (i1->nr_dests != i2->nr_dests)
|
||||
return false;
|
||||
|
||||
/* Explicitly skip destinations */
|
||||
|
||||
bi_foreach_src(i1, s) {
|
||||
bi_index s1 = i1->src[s], s2 = i2->src[s];
|
||||
|
||||
/* kill_ssa is a liveness annotation, not part of instruction semantics */
|
||||
s1.kill_ssa = s2.kill_ssa = false;
|
||||
|
||||
if (memcmp(&s1, &s2, sizeof(s1)) != 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (i1->dest_mod != i2->dest_mod)
|
||||
return false;
|
||||
|
||||
if (i1->shift != i2->shift)
|
||||
return false;
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(i1->flags); ++i) {
|
||||
if (i1->flags[i] != i2->flags[i])
|
||||
return false;
|
||||
}
|
||||
|
||||
if (i1->table != i2->table)
|
||||
return false;
|
||||
|
||||
if (i1->index != i2->index)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Determines what instructions the above routines have to handle */
|
||||
|
||||
static bool
|
||||
instr_can_cse(const bi_instr *I)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_DTSEL_IMM:
|
||||
case BI_OPCODE_DISCARD_F32:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Be conservative about which message-passing instructions we CSE,
|
||||
* since most are not pure even within a thread.
|
||||
*/
|
||||
if (bi_get_opcode_props(I)->message && I->op != BI_OPCODE_LEA_BUF_IMM)
|
||||
return false;
|
||||
|
||||
if (I->branch_target)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_cse(bi_context *ctx)
|
||||
{
|
||||
struct set *instr_set = _mesa_set_create(NULL, hash_instr, instrs_equal);
|
||||
bi_index *replacement = calloc(sizeof(bi_index), ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
_mesa_set_clear(instr_set, NULL);
|
||||
|
||||
bi_foreach_instr_in_block(block, instr) {
|
||||
/* Rewrite before trying to CSE anything so we converge
|
||||
* locally in one iteration */
|
||||
bi_foreach_ssa_src(instr, s) {
|
||||
if (bi_is_staging_src(instr, s))
|
||||
continue;
|
||||
|
||||
bi_index repl = replacement[instr->src[s].value];
|
||||
if (!bi_is_null(repl))
|
||||
bi_replace_src(instr, s, repl);
|
||||
}
|
||||
|
||||
if (!instr_can_cse(instr))
|
||||
continue;
|
||||
|
||||
bool found;
|
||||
struct set_entry *entry =
|
||||
_mesa_set_search_or_add(instr_set, instr, &found);
|
||||
if (found) {
|
||||
const bi_instr *match = entry->key;
|
||||
|
||||
bi_foreach_dest(instr, d) {
|
||||
replacement[instr->dest[d].value] = match->dest[d];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(replacement);
|
||||
_mesa_set_destroy(instr_set, NULL);
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Alyssa Rosenzweig
|
||||
* Copyright (C) 2019-2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "util/u_memory.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/**
|
||||
* A simple SSA-based dead code elimination pass.
|
||||
* This pass assumes that no loop header phis are dead.
|
||||
*/
|
||||
|
||||
void
|
||||
bi_opt_dce(bi_context *ctx, bool partial)
|
||||
{
|
||||
BITSET_WORD *seen = BITSET_CALLOC(ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
if (block->loop_header) {
|
||||
bi_foreach_instr_in_block(block, I) {
|
||||
if (I->op != BI_OPCODE_PHI) {
|
||||
break;
|
||||
}
|
||||
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
BITSET_SET(seen, I->src[s].value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bi_foreach_block_rev(ctx, block) {
|
||||
bi_foreach_instr_in_block_safe_rev(block, I) {
|
||||
if (block->loop_header && I->op == BI_OPCODE_PHI)
|
||||
break;
|
||||
|
||||
bool needed = false;
|
||||
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
if (BITSET_TEST(seen, I->dest[d].value)) {
|
||||
needed = true;
|
||||
} else if (partial) {
|
||||
I->dest[d] = bi_null();
|
||||
}
|
||||
}
|
||||
|
||||
if (!needed && !bi_side_effects(I)) {
|
||||
bi_remove_instruction(I);
|
||||
} else {
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
BITSET_SET(seen, I->src[s].value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(seen);
|
||||
}
|
||||
|
||||
/* Post-RA liveness-based dead code analysis to clean up results of bundling */
|
||||
|
||||
uint64_t MUST_CHECK
|
||||
bi_postra_liveness_ins(uint64_t live, bi_instr *ins)
|
||||
{
|
||||
bi_foreach_dest(ins, d) {
|
||||
if (ins->dest[d].type == BI_INDEX_REGISTER) {
|
||||
unsigned nr = bi_count_write_registers(ins, d);
|
||||
unsigned reg = ins->dest[d].value;
|
||||
live &= ~(BITFIELD64_MASK(nr) << reg);
|
||||
}
|
||||
}
|
||||
|
||||
bi_foreach_src(ins, s) {
|
||||
if (ins->src[s].type == BI_INDEX_REGISTER) {
|
||||
unsigned nr = bi_count_read_registers(ins, s);
|
||||
unsigned reg = ins->src[s].value;
|
||||
live |= (BITFIELD64_MASK(nr) << reg);
|
||||
}
|
||||
}
|
||||
|
||||
return live;
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_postra_liveness_block(bi_block *blk)
|
||||
{
|
||||
bi_foreach_successor(blk, succ)
|
||||
blk->reg_live_out |= succ->reg_live_in;
|
||||
|
||||
uint64_t live = blk->reg_live_out;
|
||||
|
||||
bi_foreach_instr_in_block_rev(blk, ins)
|
||||
live = bi_postra_liveness_ins(live, ins);
|
||||
|
||||
bool progress = blk->reg_live_in != live;
|
||||
blk->reg_live_in = live;
|
||||
return progress;
|
||||
}
|
||||
|
||||
/* Globally, liveness analysis uses a fixed-point algorithm based on a
|
||||
* worklist. We initialize a work list with the exit block. We iterate the work
|
||||
* list to compute live_in from live_out for each block on the work list,
|
||||
* adding the predecessors of the block to the work list if we made progress.
|
||||
*/
|
||||
|
||||
void
|
||||
bi_postra_liveness(bi_context *ctx)
|
||||
{
|
||||
u_worklist worklist;
|
||||
bi_worklist_init(ctx, &worklist);
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
block->reg_live_out = block->reg_live_in = 0;
|
||||
|
||||
bi_worklist_push_tail(&worklist, block);
|
||||
}
|
||||
|
||||
while (!u_worklist_is_empty(&worklist)) {
|
||||
/* Pop off in reverse order since liveness is backwards */
|
||||
bi_block *blk = bi_worklist_pop_tail(&worklist);
|
||||
|
||||
/* Update liveness information. If we made progress, we need to
|
||||
* reprocess the predecessors
|
||||
*/
|
||||
if (bi_postra_liveness_block(blk)) {
|
||||
bi_foreach_predecessor(blk, pred)
|
||||
bi_worklist_push_head(&worklist, *pred);
|
||||
}
|
||||
}
|
||||
|
||||
u_worklist_fini(&worklist);
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_dce_post_ra(bi_context *ctx)
|
||||
{
|
||||
bi_postra_liveness(ctx);
|
||||
|
||||
bi_foreach_block_rev(ctx, block) {
|
||||
uint64_t live = block->reg_live_out;
|
||||
|
||||
bi_foreach_instr_in_block_rev(block, ins) {
|
||||
if (ins->op == BI_OPCODE_DTSEL_IMM)
|
||||
ins->dest[0] = bi_null();
|
||||
|
||||
bi_foreach_dest(ins, d) {
|
||||
if (ins->dest[d].type != BI_INDEX_REGISTER)
|
||||
continue;
|
||||
|
||||
unsigned nr = bi_count_write_registers(ins, d);
|
||||
unsigned reg = ins->dest[d].value;
|
||||
uint64_t mask = (BITFIELD64_MASK(nr) << reg);
|
||||
bool cullable = (ins->op != BI_OPCODE_BLEND);
|
||||
cullable &= !bi_get_opcode_props(ins)->sr_write;
|
||||
|
||||
if (!(live & mask) && cullable)
|
||||
ins->dest[d] = bi_null();
|
||||
}
|
||||
|
||||
live = bi_postra_liveness_ins(live, ins);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
#define XXH_INLINE_ALL
|
||||
#include "util/xxhash.h"
|
||||
|
||||
/* Fuse pairs of TEXS_2D instructions into a single dual texture TEXC, if both
|
||||
* sample at the same coordinate with the default LOD mode for the shader stage
|
||||
* (computed LOD in fragment shaders, else zero LOD) and immediate
|
||||
* texture/sampler indices 0...3.
|
||||
*
|
||||
* Fusing across basic block boundaries is not expected to be useful, as it
|
||||
* increases register pressure and causes redundant memory traffic. As such, we
|
||||
* use a local optimization pass.
|
||||
*
|
||||
* To pair ops efficiently, we maintain a set (backed by a hash table) using
|
||||
* only the coordinate sources for hashing and equality. Hence the pass runs in
|
||||
* O(n) worst case expected time for n insturctions in a block. We reject
|
||||
* invalid texture instructions quickly to reduce the constant factor.
|
||||
*
|
||||
* Dual texture instructions have skip flags, like normal texture instructions.
|
||||
* Adding a skip flag to an instruction that doesn't have it is illegal, but
|
||||
* removing a skip flag from one that has it is legal. Accordingly, set the
|
||||
* fused TEXC's skip to the logical AND of the unfused TEXS flags. We run the
|
||||
* optimization pass to run after bi_analyze_helper_requirements.
|
||||
*/
|
||||
|
||||
static inline bool
|
||||
bi_can_fuse_dual_tex(bi_instr *I, bool fuse_zero_lod)
|
||||
{
|
||||
return (I->op == BI_OPCODE_TEXS_2D_F32 || I->op == BI_OPCODE_TEXS_2D_F16) &&
|
||||
(I->texture_index < 4 && I->sampler_index < 4) &&
|
||||
(I->lod_mode == fuse_zero_lod);
|
||||
}
|
||||
|
||||
static enum bifrost_texture_format
|
||||
bi_format_for_texs_2d(enum bi_opcode op)
|
||||
{
|
||||
switch (op) {
|
||||
case BI_OPCODE_TEXS_2D_F32:
|
||||
return BIFROST_TEXTURE_FORMAT_F32;
|
||||
case BI_OPCODE_TEXS_2D_F16:
|
||||
return BIFROST_TEXTURE_FORMAT_F16;
|
||||
default:
|
||||
UNREACHABLE("Invalid TEXS_2D instruction");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
bi_fuse_dual(bi_context *ctx, bi_instr *I1, bi_instr *I2)
|
||||
{
|
||||
/* Construct a texture operation descriptor for the dual texture */
|
||||
struct bifrost_dual_texture_operation desc = {
|
||||
.mode = BIFROST_TEXTURE_OPERATION_DUAL,
|
||||
|
||||
.primary_texture_index = I1->texture_index,
|
||||
.primary_sampler_index = I1->sampler_index,
|
||||
.primary_format = bi_format_for_texs_2d(I1->op),
|
||||
.primary_mask = 0xF,
|
||||
|
||||
.secondary_texture_index = I2->texture_index,
|
||||
.secondary_sampler_index = I2->sampler_index,
|
||||
.secondary_format = bi_format_for_texs_2d(I2->op),
|
||||
.secondary_mask = 0xF,
|
||||
};
|
||||
|
||||
/* LOD mode is implied in a shader stage */
|
||||
assert(I1->lod_mode == I2->lod_mode);
|
||||
|
||||
/* Insert before the earlier instruction in case its result is consumed
|
||||
* before the later instruction
|
||||
*/
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I1));
|
||||
|
||||
bi_instr *I = bi_texc_dual_to(
|
||||
&b, I1->dest[0], I2->dest[0], bi_null(), /* staging */
|
||||
I1->src[0], I1->src[1], /* coordinates */
|
||||
bi_imm_u32(bi_dual_tex_as_u32(desc)), I1->lod_mode,
|
||||
bi_count_write_registers(I1, 0), bi_count_write_registers(I2, 0));
|
||||
|
||||
I->skip = I1->skip && I2->skip;
|
||||
|
||||
bi_remove_instruction(I1);
|
||||
bi_remove_instruction(I2);
|
||||
}
|
||||
|
||||
#define HASH(hash, data) XXH32(&(data), sizeof(data), hash)
|
||||
|
||||
static uint32_t
|
||||
coord_hash(const void *key)
|
||||
{
|
||||
const bi_instr *I = key;
|
||||
|
||||
return XXH32(&I->src[0], sizeof(I->src[0]) + sizeof(I->src[1]), 0);
|
||||
}
|
||||
|
||||
static bool
|
||||
coord_equal(const void *key1, const void *key2)
|
||||
{
|
||||
const bi_instr *I = key1;
|
||||
const bi_instr *J = key2;
|
||||
|
||||
return memcmp(&I->src[0], &J->src[0],
|
||||
sizeof(I->src[0]) + sizeof(I->src[1])) == 0;
|
||||
}
|
||||
|
||||
static void
|
||||
bi_opt_fuse_dual_texture_block(bi_context *ctx, bi_block *block)
|
||||
{
|
||||
struct set *set = _mesa_set_create(ctx, coord_hash, coord_equal);
|
||||
bool fuse_zero_lod = (ctx->stage != MESA_SHADER_FRAGMENT);
|
||||
bool found = false;
|
||||
|
||||
bi_foreach_instr_in_block_safe(block, I) {
|
||||
if (!bi_can_fuse_dual_tex(I, fuse_zero_lod))
|
||||
continue;
|
||||
|
||||
struct set_entry *ent = _mesa_set_search_or_add(set, I, &found);
|
||||
|
||||
if (found) {
|
||||
bi_fuse_dual(ctx, (bi_instr *)ent->key, I);
|
||||
_mesa_set_remove(set, ent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_fuse_dual_texture(bi_context *ctx)
|
||||
{
|
||||
bi_foreach_block(ctx, block) {
|
||||
bi_opt_fuse_dual_texture_block(ctx, block);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,500 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Collabora, Ltd.
|
||||
* Copyright (C) 2021 Alyssa Rosenzweig
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/*
|
||||
* Due to a Bifrost encoding restriction, some instructions cannot have an abs
|
||||
* modifier on both sources. Check if adding a fabs modifier to a given source
|
||||
* of a binary instruction would cause this restriction to be hit.
|
||||
*/
|
||||
static bool
|
||||
bi_would_impact_abs(unsigned arch, bi_instr *I, bi_index repl, unsigned s)
|
||||
{
|
||||
return (arch <= 8) && I->src[1 - s].abs &&
|
||||
bi_is_word_equiv(I->src[1 - s], repl);
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_takes_fabs(unsigned arch, bi_instr *I, bi_index repl, unsigned s)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_FCMP_V2F16:
|
||||
case BI_OPCODE_FMAX_V2F16:
|
||||
case BI_OPCODE_FMIN_V2F16:
|
||||
return !bi_would_impact_abs(arch, I, repl, s);
|
||||
case BI_OPCODE_FADD_V2F16:
|
||||
/*
|
||||
* For FADD.v2f16, the FMA pipe has the abs encoding hazard,
|
||||
* while the FADD pipe cannot encode a clamp. Either case in
|
||||
* isolation can be worked around in the scheduler, but both
|
||||
* together is impossible to encode. Avoid the hazard.
|
||||
*/
|
||||
return !(I->clamp && bi_would_impact_abs(arch, I, repl, s));
|
||||
case BI_OPCODE_V2F32_TO_V2F16:
|
||||
/* TODO: Needs both match or lower */
|
||||
return false;
|
||||
case BI_OPCODE_FLOG_TABLE_F32:
|
||||
/* TODO: Need to check mode */
|
||||
return false;
|
||||
default:
|
||||
return bi_get_opcode_props(I)->abs & BITFIELD_BIT(s);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_takes_fneg(unsigned arch, bi_instr *I, unsigned s)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_CUBE_SSEL:
|
||||
case BI_OPCODE_CUBE_TSEL:
|
||||
case BI_OPCODE_CUBEFACE:
|
||||
/* TODO: Bifrost encoding restriction: need to match or lower */
|
||||
return arch >= 9;
|
||||
case BI_OPCODE_FREXPE_F32:
|
||||
case BI_OPCODE_FREXPE_V2F16:
|
||||
case BI_OPCODE_FLOG_TABLE_F32:
|
||||
/* TODO: Need to check mode */
|
||||
return false;
|
||||
default:
|
||||
return bi_get_opcode_props(I)->neg & BITFIELD_BIT(s);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_fabsneg(enum bi_opcode op, enum bi_size size)
|
||||
{
|
||||
return (size == BI_SIZE_32 && op == BI_OPCODE_FABSNEG_F32) ||
|
||||
(size == BI_SIZE_16 && op == BI_OPCODE_FABSNEG_V2F16);
|
||||
}
|
||||
|
||||
static enum bi_swizzle
|
||||
bi_compose_swizzle_16(enum bi_swizzle a, enum bi_swizzle b)
|
||||
{
|
||||
assert(a <= BI_SWIZZLE_H11);
|
||||
assert(b <= BI_SWIZZLE_H11);
|
||||
|
||||
bool al = (a & BI_SWIZZLE_H10);
|
||||
bool ar = (a & BI_SWIZZLE_H01);
|
||||
bool bl = (b & BI_SWIZZLE_H10);
|
||||
bool br = (b & BI_SWIZZLE_H01);
|
||||
|
||||
return ((al ? br : bl) ? BI_SWIZZLE_H10 : 0) |
|
||||
((ar ? br : bl) ? BI_SWIZZLE_H01 : 0);
|
||||
}
|
||||
|
||||
/* Like bi_replace_index, but composes instead of overwrites */
|
||||
|
||||
static inline bi_index
|
||||
bi_compose_float_index(bi_index old, bi_index repl)
|
||||
{
|
||||
/* abs(-x) = abs(+x) so ignore repl.neg if old.abs is set, otherwise
|
||||
* -(-x) = x but -(+x) = +(-x) so need to exclusive-or the negates */
|
||||
repl.neg = old.neg ^ (repl.neg && !old.abs);
|
||||
|
||||
/* +/- abs(+/- abs(x)) = +/- abs(x), etc so just or the two */
|
||||
repl.abs |= old.abs;
|
||||
|
||||
/* Use the old swizzle to select from the replacement swizzle */
|
||||
repl.swizzle = bi_compose_swizzle_16(old.swizzle, repl.swizzle);
|
||||
|
||||
return repl;
|
||||
}
|
||||
|
||||
/* DISCARD.b32(FCMP.f(x, y)) --> DISCARD.f(x, y) */
|
||||
|
||||
static inline bool
|
||||
bi_fuse_discard_fcmp(bi_context *ctx, bi_instr *I, bi_instr *mod)
|
||||
{
|
||||
if (!mod)
|
||||
return false;
|
||||
if (I->op != BI_OPCODE_DISCARD_B32)
|
||||
return false;
|
||||
if (mod->op != BI_OPCODE_FCMP_F32 && mod->op != BI_OPCODE_FCMP_V2F16)
|
||||
return false;
|
||||
if (mod->cmpf >= BI_CMPF_GTLT)
|
||||
return false;
|
||||
|
||||
/* result_type doesn't matter */
|
||||
|
||||
/* .abs and .neg modifiers allowed on Valhall DISCARD but not Bifrost */
|
||||
bool absneg = mod->src[0].neg || mod->src[0].abs;
|
||||
absneg |= mod->src[1].neg || mod->src[1].abs;
|
||||
|
||||
if (ctx->arch <= 8 && absneg)
|
||||
return false;
|
||||
|
||||
enum bi_swizzle r = I->src[0].swizzle;
|
||||
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I));
|
||||
I = bi_discard_f32(&b, mod->src[0], mod->src[1], mod->cmpf);
|
||||
|
||||
if (mod->op == BI_OPCODE_FCMP_V2F16) {
|
||||
I->src[0].swizzle = bi_compose_swizzle_16(r, I->src[0].swizzle);
|
||||
I->src[1].swizzle = bi_compose_swizzle_16(r, I->src[1].swizzle);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* S32_TO_F32(S8_TO_S32(x)) -> S8_TO_F32 and friends. Round modes don't matter
|
||||
* because all 8-bit and 16-bit integers may be represented exactly as fp32.
|
||||
*/
|
||||
struct {
|
||||
enum bi_opcode inner;
|
||||
enum bi_opcode outer;
|
||||
enum bi_opcode small_replacement;
|
||||
enum bi_opcode wide_replacement;
|
||||
} bi_small_int_patterns[] = {
|
||||
{BI_OPCODE_S8_TO_S32, BI_OPCODE_S32_TO_F32, BI_OPCODE_S8_TO_F32, BI_OPCODE_S32_TO_F32},
|
||||
{BI_OPCODE_U8_TO_U32, BI_OPCODE_U32_TO_F32, BI_OPCODE_U8_TO_F32, BI_OPCODE_U32_TO_F32},
|
||||
{BI_OPCODE_U8_TO_U32, BI_OPCODE_S32_TO_F32, BI_OPCODE_U8_TO_F32, BI_OPCODE_U32_TO_F32},
|
||||
{BI_OPCODE_S16_TO_S32, BI_OPCODE_S32_TO_F32, BI_OPCODE_S16_TO_F32, BI_OPCODE_S32_TO_F32},
|
||||
{BI_OPCODE_U16_TO_U32, BI_OPCODE_U32_TO_F32, BI_OPCODE_U16_TO_F32, BI_OPCODE_U32_TO_F32},
|
||||
{BI_OPCODE_U16_TO_U32, BI_OPCODE_S32_TO_F32, BI_OPCODE_U16_TO_F32, BI_OPCODE_U32_TO_F32},
|
||||
};
|
||||
|
||||
static inline void
|
||||
bi_fuse_small_int_to_f32(bi_context *ctx, bi_instr *I, bi_instr *mod)
|
||||
{
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(bi_small_int_patterns); ++i) {
|
||||
if (I->op != bi_small_int_patterns[i].outer)
|
||||
continue;
|
||||
if (mod->op != bi_small_int_patterns[i].inner)
|
||||
continue;
|
||||
|
||||
assert(I->src[0].swizzle == BI_SWIZZLE_H01);
|
||||
I->src[0] = mod->src[0];
|
||||
I->round = BI_ROUND_NONE;
|
||||
|
||||
/* On v11, All small int instructions are gone but we now can widen instead */
|
||||
if (ctx->arch >= 11)
|
||||
bi_set_opcode(I, bi_small_int_patterns[i].wide_replacement);
|
||||
else
|
||||
bi_set_opcode(I, bi_small_int_patterns[i].small_replacement);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_mod_prop_forward(bi_context *ctx)
|
||||
{
|
||||
bi_instr **lut = calloc(sizeof(bi_instr *), ctx->ssa_alloc);
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
/* Try fusing FCMP into DISCARD.b32, building a new DISCARD.f32
|
||||
* instruction. As this is the only optimization DISCARD is
|
||||
* involved in, this shortcircuits other processing.
|
||||
*/
|
||||
if (I->op == BI_OPCODE_DISCARD_B32) {
|
||||
if (bi_is_ssa(I->src[0]) &&
|
||||
bi_fuse_discard_fcmp(ctx, I, lut[I->src[0].value])) {
|
||||
bi_remove_instruction(I);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
bi_foreach_dest(I, d) {
|
||||
lut[I->dest[d].value] = I;
|
||||
}
|
||||
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
bi_instr *mod = lut[I->src[s].value];
|
||||
|
||||
if (!mod)
|
||||
continue;
|
||||
|
||||
unsigned size = bi_get_opcode_props(I)->size;
|
||||
|
||||
bi_fuse_small_int_to_f32(ctx, I, mod);
|
||||
|
||||
if (bi_is_fabsneg(mod->op, size)) {
|
||||
if (mod->src[0].abs && !bi_takes_fabs(ctx->arch, I, mod->src[0], s))
|
||||
continue;
|
||||
|
||||
if (mod->src[0].neg && !bi_takes_fneg(ctx->arch, I, s))
|
||||
continue;
|
||||
|
||||
I->src[s] = bi_compose_float_index(I->src[s], mod->src[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(lut);
|
||||
}
|
||||
|
||||
/* RSCALE has restrictions on how the clamp may be used, only used for
|
||||
* specialized transcendental sequences that set the clamp explicitly anyway */
|
||||
|
||||
static bool
|
||||
bi_takes_clamp(bi_instr *I)
|
||||
{
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_FMA_RSCALE_F32:
|
||||
case BI_OPCODE_FMA_RSCALE_V2F16:
|
||||
case BI_OPCODE_FADD_RSCALE_F32:
|
||||
return false;
|
||||
case BI_OPCODE_FADD_V2F16:
|
||||
/* Encoding restriction */
|
||||
return !(I->src[0].abs && I->src[1].abs &&
|
||||
bi_is_word_equiv(I->src[0], I->src[1]));
|
||||
default:
|
||||
return bi_get_opcode_props(I)->clamp;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_fclamp(enum bi_opcode op, enum bi_size size)
|
||||
{
|
||||
return (size == BI_SIZE_32 && op == BI_OPCODE_FCLAMP_F32) ||
|
||||
(size == BI_SIZE_16 && op == BI_OPCODE_FCLAMP_V2F16);
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_optimizer_clamp(bi_instr *I, bi_instr *use)
|
||||
{
|
||||
if (!bi_is_fclamp(use->op, bi_get_opcode_props(I)->size))
|
||||
return false;
|
||||
if (!bi_takes_clamp(I))
|
||||
return false;
|
||||
|
||||
/* Clamps are bitfields (clamp_m1_1/clamp_0_inf) so composition is OR */
|
||||
I->clamp |= use->clamp;
|
||||
I->dest[0] = use->dest[0];
|
||||
return true;
|
||||
}
|
||||
|
||||
static enum bi_opcode
|
||||
bi_sized_mux_op(unsigned size)
|
||||
{
|
||||
switch (size) {
|
||||
case 8:
|
||||
return BI_OPCODE_MUX_V4I8;
|
||||
case 16:
|
||||
return BI_OPCODE_MUX_V2I16;
|
||||
case 32:
|
||||
return BI_OPCODE_MUX_I32;
|
||||
default:
|
||||
UNREACHABLE("invalid size");
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_fixed_mux(bi_instr *I, unsigned size, bi_index v1)
|
||||
{
|
||||
return I->op == bi_sized_mux_op(size) &&
|
||||
bi_is_value_equiv(I->src[0], bi_zero()) &&
|
||||
bi_is_value_equiv(I->src[1], v1);
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_takes_int_result_type(enum bi_opcode op)
|
||||
{
|
||||
switch (op) {
|
||||
case BI_OPCODE_ICMP_I32:
|
||||
case BI_OPCODE_ICMP_S32:
|
||||
case BI_OPCODE_ICMP_U32:
|
||||
case BI_OPCODE_ICMP_V2I16:
|
||||
case BI_OPCODE_ICMP_V2S16:
|
||||
case BI_OPCODE_ICMP_V2U16:
|
||||
case BI_OPCODE_ICMP_V4I8:
|
||||
case BI_OPCODE_ICMP_V4S8:
|
||||
case BI_OPCODE_ICMP_V4U8:
|
||||
case BI_OPCODE_FCMP_F32:
|
||||
case BI_OPCODE_FCMP_V2F16:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_takes_float_result_type(enum bi_opcode op)
|
||||
{
|
||||
return (op == BI_OPCODE_FCMP_F32) || (op == BI_OPCODE_FCMP_V2F16);
|
||||
}
|
||||
|
||||
/* CMP+MUX -> CMP with result type */
|
||||
static bool
|
||||
bi_optimizer_result_type(bi_instr *I, bi_instr *mux)
|
||||
{
|
||||
if (bi_get_opcode_props(I)->size != bi_get_opcode_props(mux)->size)
|
||||
return false;
|
||||
|
||||
if (bi_is_fixed_mux(mux, 32, bi_imm_f32(1.0)) ||
|
||||
bi_is_fixed_mux(mux, 16, bi_imm_f16(1.0))) {
|
||||
|
||||
if (!bi_takes_float_result_type(I->op))
|
||||
return false;
|
||||
|
||||
I->result_type = BI_RESULT_TYPE_F1;
|
||||
} else if (bi_is_fixed_mux(mux, 32, bi_imm_u32(1)) ||
|
||||
bi_is_fixed_mux(mux, 16, bi_imm_u16(1)) ||
|
||||
bi_is_fixed_mux(mux, 8, bi_imm_u8(1))) {
|
||||
|
||||
if (!bi_takes_int_result_type(I->op))
|
||||
return false;
|
||||
|
||||
I->result_type = BI_RESULT_TYPE_I1;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
I->dest[0] = mux->dest[0];
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_var_tex(bi_instr *var, bi_instr *tex)
|
||||
{
|
||||
return (var->op == BI_OPCODE_LD_VAR_IMM) &&
|
||||
(tex->op == BI_OPCODE_TEXS_2D_F16 ||
|
||||
tex->op == BI_OPCODE_TEXS_2D_F32) &&
|
||||
(var->register_format == BI_REGISTER_FORMAT_F32) &&
|
||||
((var->sample == BI_SAMPLE_CENTER &&
|
||||
var->update == BI_UPDATE_STORE) ||
|
||||
(var->sample == BI_SAMPLE_NONE &&
|
||||
var->update == BI_UPDATE_RETRIEVE)) &&
|
||||
(tex->texture_index == tex->sampler_index) &&
|
||||
(tex->texture_index < 4) && (var->index < 8);
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_optimizer_var_tex(bi_context *ctx, bi_instr *var, bi_instr *tex)
|
||||
{
|
||||
if (!bi_is_var_tex(var, tex))
|
||||
return false;
|
||||
|
||||
/* Construct the corresponding VAR_TEX intruction */
|
||||
bi_builder b = bi_init_builder(ctx, bi_after_instr(var));
|
||||
|
||||
bi_instr *I = bi_var_tex_f32_to(&b, tex->dest[0], tex->lod_mode, var->sample,
|
||||
var->update, tex->texture_index, var->index);
|
||||
I->skip = tex->skip;
|
||||
|
||||
if (tex->op == BI_OPCODE_TEXS_2D_F16)
|
||||
bi_set_opcode(I, BI_OPCODE_VAR_TEX_F16);
|
||||
|
||||
/* Dead code elimination will clean up for us */
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_mod_prop_backward(bi_context *ctx)
|
||||
{
|
||||
unsigned count = ctx->ssa_alloc;
|
||||
bi_instr **uses = calloc(count, sizeof(*uses));
|
||||
BITSET_WORD *multiple = BITSET_CALLOC(count);
|
||||
|
||||
bi_foreach_block_rev(ctx, block) {
|
||||
/* Watch out for PHI instructions in loops!
|
||||
* PHI sources are logically read at the end of the predecessor,
|
||||
* so process our source in successor phis first
|
||||
*/
|
||||
bi_foreach_successor(block, succ) {
|
||||
unsigned s = bi_predecessor_index(succ, block);
|
||||
bi_foreach_instr_in_block(succ, phi) {
|
||||
/* the PHIs are all at the start of the block, so stop
|
||||
* when we see a non-PHI
|
||||
*/
|
||||
if (phi->op != BI_OPCODE_PHI)
|
||||
break;
|
||||
if (phi->src[s].type == BI_INDEX_NORMAL)
|
||||
bi_record_use(uses, multiple, phi, s);
|
||||
}
|
||||
}
|
||||
/* now go through the instructions backwards */
|
||||
bi_foreach_instr_in_block_rev(block, I) {
|
||||
/* skip PHIs, they are handled specially */
|
||||
if (I->op == BI_OPCODE_PHI)
|
||||
continue;
|
||||
|
||||
/* record uses */
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
bi_record_use(uses, multiple, I, s);
|
||||
}
|
||||
|
||||
/* check for definitions */
|
||||
if (I->nr_dests != 1)
|
||||
continue;
|
||||
|
||||
bi_instr *use = uses[I->dest[0].value];
|
||||
|
||||
if (!use || BITSET_TEST(multiple, I->dest[0].value))
|
||||
continue;
|
||||
|
||||
/* Destination has a single use, try to propagate */
|
||||
bool propagated =
|
||||
bi_optimizer_clamp(I, use) || bi_optimizer_result_type(I, use);
|
||||
|
||||
if (!propagated && I->op == BI_OPCODE_LD_VAR_IMM &&
|
||||
use->op == BI_OPCODE_SPLIT_I32) {
|
||||
/* Need to see through the split in a
|
||||
* ld_var_imm/split/var_tex sequence
|
||||
*/
|
||||
bi_instr *tex = uses[use->dest[0].value];
|
||||
|
||||
if (!tex || BITSET_TEST(multiple, use->dest[0].value))
|
||||
continue;
|
||||
|
||||
use = tex;
|
||||
propagated = bi_optimizer_var_tex(ctx, I, use);
|
||||
}
|
||||
|
||||
if (propagated) {
|
||||
bi_remove_instruction(use);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(uses);
|
||||
free(multiple);
|
||||
}
|
||||
|
||||
/*
|
||||
* Lower pseudo instructions that exist to simplify the optimizer. Returns the
|
||||
* replacement instruction, or NULL if no replacement is needed.
|
||||
*/
|
||||
static bool
|
||||
bi_lower_opt_instruction_helper(bi_builder *b, bi_instr *I)
|
||||
{
|
||||
bi_instr *repl;
|
||||
|
||||
switch (I->op) {
|
||||
case BI_OPCODE_FABSNEG_F32:
|
||||
case BI_OPCODE_FCLAMP_F32:
|
||||
repl = bi_fadd_f32_to(b, I->dest[0], I->src[0], bi_negzero());
|
||||
repl->clamp = I->clamp;
|
||||
return true;
|
||||
|
||||
case BI_OPCODE_FABSNEG_V2F16:
|
||||
case BI_OPCODE_FCLAMP_V2F16:
|
||||
repl = bi_fadd_v2f16_to(b, I->dest[0], I->src[0], bi_negzero());
|
||||
repl->clamp = I->clamp;
|
||||
return true;
|
||||
|
||||
case BI_OPCODE_DISCARD_B32:
|
||||
bi_discard_f32(b, I->src[0], bi_zero(), BI_CMPF_NE);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_lower_opt_instructions(bi_context *ctx)
|
||||
{
|
||||
bi_foreach_instr_global_safe(ctx, I) {
|
||||
bi_builder b = bi_init_builder(ctx, bi_before_instr(I));
|
||||
|
||||
if (bi_lower_opt_instruction_helper(&b, I))
|
||||
bi_remove_instruction(I);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/* This optimization pass, intended to run once after code emission but before
|
||||
* copy propagation, analyzes direct word-aligned UBO reads and promotes a
|
||||
* subset to moves from FAU. It is the sole populator of the UBO push data
|
||||
* structure returned back to the command stream. */
|
||||
|
||||
static bool
|
||||
bi_is_ubo(bi_instr *ins)
|
||||
{
|
||||
return (bi_get_opcode_props(ins)->message == BIFROST_MESSAGE_LOAD) &&
|
||||
(ins->seg == BI_SEG_UBO);
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_pushable_ubo(bi_context *ctx, bi_instr *ins)
|
||||
{
|
||||
if (!(bi_is_ubo(ins) && (ins->src[0].type == BI_INDEX_CONSTANT) &&
|
||||
(ins->src[1].type == BI_INDEX_CONSTANT)))
|
||||
return false;
|
||||
|
||||
unsigned ubo = pan_res_handle_get_index(ins->src[1].value);
|
||||
unsigned offset = ins->src[0].value;
|
||||
|
||||
return ctx->inputs->pushable_ubos & BITFIELD_BIT(ubo) && (offset & 0x3) == 0;
|
||||
}
|
||||
|
||||
/* Represents use data for a single UBO */
|
||||
|
||||
#define MAX_UBO_WORDS (65536 / 16)
|
||||
|
||||
struct bi_ubo_block {
|
||||
BITSET_DECLARE(pushed, MAX_UBO_WORDS);
|
||||
uint8_t range[MAX_UBO_WORDS];
|
||||
};
|
||||
|
||||
struct bi_ubo_analysis {
|
||||
/* Per block analysis */
|
||||
unsigned nr_blocks;
|
||||
struct bi_ubo_block *blocks;
|
||||
};
|
||||
|
||||
static struct bi_ubo_analysis
|
||||
bi_analyze_ranges(bi_context *ctx)
|
||||
{
|
||||
struct bi_ubo_analysis res = {
|
||||
.nr_blocks = ctx->nir->info.num_ubos + 1,
|
||||
};
|
||||
|
||||
res.blocks = calloc(res.nr_blocks, sizeof(struct bi_ubo_block));
|
||||
|
||||
bi_foreach_instr_global(ctx, ins) {
|
||||
if (!bi_is_pushable_ubo(ctx, ins))
|
||||
continue;
|
||||
|
||||
unsigned ubo = pan_res_handle_get_index(ins->src[1].value);
|
||||
unsigned word = ins->src[0].value / 4;
|
||||
unsigned channels = bi_get_opcode_props(ins)->sr_count;
|
||||
|
||||
assert(ubo < res.nr_blocks);
|
||||
assert(channels > 0 && channels <= 4);
|
||||
|
||||
/* Blend constants are handled by bi_pick_blend_constants, don't push
|
||||
* them a second time. */
|
||||
if (ctx->stage == MESA_SHADER_FRAGMENT) {
|
||||
/* PAN_UBO_SYSVALS from the gallium driver */
|
||||
unsigned sysval_ubo = 1;
|
||||
if(ubo == sysval_ubo && word == 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (word >= MAX_UBO_WORDS)
|
||||
continue;
|
||||
|
||||
/* Must use max if the same base is read with different channel
|
||||
* counts, which is possible with nir_opt_shrink_vectors */
|
||||
uint8_t *range = res.blocks[ubo].range;
|
||||
range[word] = MAX2(range[word], channels);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* We always map blend constants from the first slot in the sysval UBO to the
|
||||
* first four FAU words, so that they can be accessed from a consistent
|
||||
* location from the blend shader. */
|
||||
static void
|
||||
bi_pick_blend_constants(bi_context *ctx, struct bi_ubo_analysis *analysis)
|
||||
{
|
||||
/* PAN_UBO_SYSVALS from the gallium driver */
|
||||
unsigned sysval_ubo = 1;
|
||||
unsigned offset = 0;
|
||||
|
||||
assert(ctx->inputs->pushable_ubos & BITFIELD_BIT(sysval_ubo));
|
||||
assert(ctx->info.push->count == 0);
|
||||
|
||||
for (unsigned channel = 0; channel < 4; channel++) {
|
||||
struct pan_ubo_word word = {
|
||||
.ubo = sysval_ubo,
|
||||
.offset = offset + channel * 4,
|
||||
};
|
||||
ctx->info.push->words[ctx->info.push->count++] = word;
|
||||
assert(ctx->info.push->count < PAN_MAX_PUSH);
|
||||
}
|
||||
|
||||
BITSET_SET(analysis->blocks[sysval_ubo].pushed, offset);
|
||||
|
||||
/* The blend constant FAU slots cannot be reordered */
|
||||
ctx->info.push_offset = MAX2(ctx->info.push_offset, ctx->info.push->count);
|
||||
}
|
||||
|
||||
/* Select UBO words to push. A sophisticated implementation would consider the
|
||||
* number of uses and perhaps the control flow to estimate benefit. This is not
|
||||
* sophisticated. Select from the last UBO first to prioritize sysvals. */
|
||||
|
||||
static void
|
||||
bi_pick_ubo(struct pan_ubo_push *push, struct bi_ubo_analysis *analysis)
|
||||
{
|
||||
for (signed ubo = analysis->nr_blocks - 1; ubo >= 0; --ubo) {
|
||||
struct bi_ubo_block *block = &analysis->blocks[ubo];
|
||||
|
||||
for (unsigned r = 0; r < MAX_UBO_WORDS; ++r) {
|
||||
unsigned range = block->range[r];
|
||||
|
||||
/* Don't push something we don't access */
|
||||
if (range == 0)
|
||||
continue;
|
||||
|
||||
/* Don't push more than possible */
|
||||
if (push->count > PAN_MAX_PUSH - range)
|
||||
return;
|
||||
|
||||
for (unsigned offs = 0; offs < range; ++offs) {
|
||||
struct pan_ubo_word word = {
|
||||
.ubo = ubo,
|
||||
.offset = (r + offs) * 4,
|
||||
};
|
||||
|
||||
push->words[push->count++] = word;
|
||||
}
|
||||
|
||||
/* Mark it as pushed so we can rewrite */
|
||||
BITSET_SET(block->pushed, r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bi_opt_push_ubo(bi_context *ctx)
|
||||
{
|
||||
struct bi_ubo_analysis analysis = bi_analyze_ranges(ctx);
|
||||
|
||||
if (ctx->stage == MESA_SHADER_FRAGMENT)
|
||||
bi_pick_blend_constants(ctx, &analysis);
|
||||
bi_pick_ubo(ctx->info.push, &analysis);
|
||||
|
||||
ctx->ubo_mask = 0;
|
||||
|
||||
bi_foreach_instr_global_safe(ctx, ins) {
|
||||
if (!bi_is_ubo(ins))
|
||||
continue;
|
||||
|
||||
unsigned ubo = pan_res_handle_get_index(ins->src[1].value);
|
||||
unsigned offset = ins->src[0].value;
|
||||
|
||||
if (!bi_is_pushable_ubo(ctx, ins)) {
|
||||
/* The load can't be pushed, so this UBO needs to be
|
||||
* uploaded conventionally */
|
||||
if (ins->src[1].type == BI_INDEX_CONSTANT)
|
||||
ctx->ubo_mask |= BITSET_BIT(ubo);
|
||||
else
|
||||
ctx->ubo_mask = ~0;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check if we decided to push this */
|
||||
assert(ubo < analysis.nr_blocks);
|
||||
if (!BITSET_TEST(analysis.blocks[ubo].pushed, offset / 4)) {
|
||||
ctx->ubo_mask |= BITSET_BIT(ubo);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Replace the UBO load with moves from FAU */
|
||||
bi_builder b = bi_init_builder(ctx, bi_after_instr(ins));
|
||||
|
||||
unsigned nr = bi_get_opcode_props(ins)->sr_count;
|
||||
bi_instr *vec = bi_collect_i32_to(&b, ins->dest[0], nr);
|
||||
|
||||
bi_foreach_src(vec, w) {
|
||||
/* FAU is grouped in pairs (2 x 4-byte) */
|
||||
unsigned base =
|
||||
pan_lookup_pushed_ubo(ctx->info.push, ubo, (offset + 4 * w));
|
||||
|
||||
unsigned fau_idx = (base >> 1);
|
||||
unsigned fau_hi = (base & 1);
|
||||
|
||||
vec->src[w] = bi_fau(BIR_FAU_UNIFORM | fau_idx, fau_hi);
|
||||
}
|
||||
|
||||
bi_remove_instruction(ins);
|
||||
}
|
||||
|
||||
free(analysis.blocks);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
BITSET_DECLARE(row, PAN_MAX_PUSH);
|
||||
} adjacency_row;
|
||||
|
||||
/* Find the connected component containing `node` with depth-first search */
|
||||
static void
|
||||
bi_find_component(adjacency_row *adjacency, BITSET_WORD *visited,
|
||||
unsigned *component, unsigned *size, unsigned node)
|
||||
{
|
||||
unsigned neighbour;
|
||||
|
||||
BITSET_SET(visited, node);
|
||||
component[(*size)++] = node;
|
||||
|
||||
BITSET_FOREACH_SET(neighbour, adjacency[node].row, PAN_MAX_PUSH) {
|
||||
if (!BITSET_TEST(visited, neighbour)) {
|
||||
bi_find_component(adjacency, visited, component, size, neighbour);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
bi_is_uniform(bi_index idx)
|
||||
{
|
||||
return (idx.type == BI_INDEX_FAU) && (idx.value & BIR_FAU_UNIFORM);
|
||||
}
|
||||
|
||||
/* Get the index of a uniform in 32-bit words from the start of FAU-RAM */
|
||||
static unsigned
|
||||
bi_uniform_word(bi_index idx)
|
||||
{
|
||||
assert(bi_is_uniform(idx));
|
||||
assert(idx.offset <= 1);
|
||||
|
||||
return ((idx.value & ~BIR_FAU_UNIFORM) << 1) | idx.offset;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create an undirected graph where nodes are 32-bit uniform indices and edges
|
||||
* represent that two nodes are used in the same instruction.
|
||||
*
|
||||
* The graph is constructed as an adjacency matrix stored in adjacency.
|
||||
*/
|
||||
static void
|
||||
bi_create_fau_interference_graph(bi_context *ctx, adjacency_row *adjacency)
|
||||
{
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
unsigned nodes[BI_MAX_SRCS] = {};
|
||||
unsigned node_count = 0;
|
||||
|
||||
/* Set nodes[] to 32-bit uniforms accessed */
|
||||
bi_foreach_src(I, s) {
|
||||
if (bi_is_uniform(I->src[s])) {
|
||||
unsigned word = bi_uniform_word(I->src[s]);
|
||||
|
||||
if (word >= ctx->info.push_offset)
|
||||
nodes[node_count++] = word;
|
||||
}
|
||||
}
|
||||
|
||||
/* Create clique connecting nodes[] */
|
||||
for (unsigned i = 0; i < node_count; ++i) {
|
||||
for (unsigned j = 0; j < node_count; ++j) {
|
||||
if (i == j)
|
||||
continue;
|
||||
|
||||
unsigned x = nodes[i], y = nodes[j];
|
||||
assert(MAX2(x, y) < ctx->info.push->count);
|
||||
|
||||
/* Add undirected edge between the nodes */
|
||||
BITSET_SET(adjacency[x].row, y);
|
||||
BITSET_SET(adjacency[y].row, x);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Optimization pass to reorder uniforms. The goal is to reduce the number of
|
||||
* moves we emit when lowering FAU. The pass groups uniforms used by the same
|
||||
* instruction.
|
||||
*
|
||||
* The pass works by creating a graph of pushed uniforms, where edges denote the
|
||||
* "both 32-bit uniforms required by the same instruction" relationship. We
|
||||
* perform depth-first search on this graph to find the connected components,
|
||||
* where each connected component is a cluster of uniforms that are used
|
||||
* together. We then select pairs of uniforms from each connected component.
|
||||
* The remaining unpaired uniforms (from components of odd sizes) are paired
|
||||
* together arbitrarily.
|
||||
*
|
||||
* After a new ordering is selected, pushed uniforms in the program and the
|
||||
* pan_ubo_push data structure must be remapped to use the new ordering.
|
||||
*/
|
||||
void
|
||||
bi_opt_reorder_push(bi_context *ctx)
|
||||
{
|
||||
adjacency_row adjacency[PAN_MAX_PUSH] = {0};
|
||||
BITSET_DECLARE(visited, PAN_MAX_PUSH) = {0};
|
||||
|
||||
unsigned ordering[PAN_MAX_PUSH] = {0};
|
||||
unsigned unpaired[PAN_MAX_PUSH] = {0};
|
||||
unsigned pushed = 0, unpaired_count = 0;
|
||||
|
||||
struct pan_ubo_push *push = ctx->info.push;
|
||||
unsigned push_offset = ctx->info.push_offset;
|
||||
|
||||
bi_create_fau_interference_graph(ctx, adjacency);
|
||||
|
||||
for (unsigned i = push_offset; i < push->count; ++i) {
|
||||
if (BITSET_TEST(visited, i))
|
||||
continue;
|
||||
|
||||
unsigned component[PAN_MAX_PUSH] = {0};
|
||||
unsigned size = 0;
|
||||
bi_find_component(adjacency, visited, component, &size, i);
|
||||
|
||||
/* If there is an odd number of uses, at least one use must be
|
||||
* unpaired. Arbitrarily take the last one.
|
||||
*/
|
||||
if (size % 2)
|
||||
unpaired[unpaired_count++] = component[--size];
|
||||
|
||||
/* The rest of uses are paired */
|
||||
assert((size % 2) == 0);
|
||||
|
||||
/* Push the paired uses */
|
||||
memcpy(ordering + pushed, component, sizeof(unsigned) * size);
|
||||
pushed += size;
|
||||
}
|
||||
|
||||
/* Push unpaired nodes at the end */
|
||||
memcpy(ordering + pushed, unpaired, sizeof(unsigned) * unpaired_count);
|
||||
pushed += unpaired_count;
|
||||
|
||||
/* Ordering is a permutation. Invert it for O(1) lookup. */
|
||||
unsigned old_to_new[PAN_MAX_PUSH] = {0};
|
||||
|
||||
for (unsigned i = 0; i < push_offset; ++i) {
|
||||
old_to_new[i] = i;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < pushed; ++i) {
|
||||
assert(ordering[i] >= push_offset);
|
||||
old_to_new[ordering[i]] = push_offset + i;
|
||||
}
|
||||
|
||||
/* Use new ordering throughout the program */
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
bi_foreach_src(I, s) {
|
||||
if (bi_is_uniform(I->src[s])) {
|
||||
unsigned node = bi_uniform_word(I->src[s]);
|
||||
unsigned new_node = old_to_new[node];
|
||||
I->src[s].value = BIR_FAU_UNIFORM | (new_node >> 1);
|
||||
I->src[s].offset = new_node & 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Use new ordering for push */
|
||||
struct pan_ubo_push old = *push;
|
||||
for (unsigned i = 0; i < pushed; ++i)
|
||||
push->words[push_offset + i] = old.words[ordering[i]];
|
||||
|
||||
push->count = push_offset + pushed;
|
||||
}
|
||||
@@ -0,0 +1,366 @@
|
||||
# Copyright (C) 2020 Collabora, Ltd.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import sys
|
||||
from bifrost_isa import *
|
||||
from functools import reduce
|
||||
from mako.template import Template
|
||||
|
||||
# Consider pseudo instructions when getting the modifier list
|
||||
instructions_with_pseudo = {}
|
||||
for arg in sys.argv[1:]:
|
||||
new_instructions = parse_instructions(arg, include_pseudo = True)
|
||||
instructions_with_pseudo.update(new_instructions)
|
||||
|
||||
ir_instructions_with_pseudo = partition_mnemonics(instructions_with_pseudo)
|
||||
modifier_lists = order_modifiers(ir_instructions_with_pseudo)
|
||||
|
||||
# ...but strip for packing
|
||||
instructions = parse_instructions(sys.argv[2]) # skip the pseudo instructions in sys.argv[1]
|
||||
ir_instructions = partition_mnemonics(instructions)
|
||||
|
||||
# Packs sources into an argument. Offset argument to work around a quirk of our
|
||||
# compiler IR when dealing with staging registers (TODO: reorder in the IR to
|
||||
# fix this)
|
||||
def pack_sources(sources, body, pack_exprs, offset, is_fma):
|
||||
for i, src in enumerate(sources):
|
||||
# FMA first two args are restricted, but that's checked once for all
|
||||
# FMA so the compiler has less work to do
|
||||
expected = 0xFB if (is_fma and i < 2) else 0xFF
|
||||
|
||||
# Validate the source
|
||||
if src[1] != expected:
|
||||
assert((src[1] & expected) == src[1])
|
||||
body.append('assert((1 << src{}) & {});'.format(i, hex(src[1])))
|
||||
|
||||
# Sources are state-invariant
|
||||
for state in pack_exprs:
|
||||
state.append('(src{} << {})'.format(i, src[0]))
|
||||
|
||||
# Try to map from a modifier list `domain` to the list `target`
|
||||
def map_modifier(body, prefix, mod, domain, target):
|
||||
# We don't want to map reserveds, that's invalid IR anyway
|
||||
def reserved_to_none(arr):
|
||||
return [None if x == 'reserved' else x for x in arr]
|
||||
|
||||
# Trim out reserveds at the end
|
||||
noned_domain = reserved_to_none(domain)
|
||||
noned_target = reserved_to_none(target)
|
||||
none_indices = [i for i, x in enumerate(noned_target) if x != None]
|
||||
trimmed = noned_target[0: none_indices[-1] + 1]
|
||||
|
||||
if trimmed == noned_domain[0:len(trimmed)]:
|
||||
# Identity map, possibly on the left subset
|
||||
return mod
|
||||
else:
|
||||
# Generate a table as a fallback
|
||||
table = ", ".join([str(target.index(x)) if x in target else "~0" for x in domain])
|
||||
body.append("static uint8_t {}_table[] = {{ {} }};".format(prefix, table))
|
||||
|
||||
if len(domain) > 2:
|
||||
# no need to validate bools
|
||||
body.append("assert({} < {});".format(mod, len(domain)))
|
||||
|
||||
return "{}_table[{}]".format(prefix, mod)
|
||||
|
||||
SRC_SWIZZLE_BUCKETS = [
|
||||
set(['h00', 'h0', 'b0101']),
|
||||
set(['h01', 'none', 'b0123']), # Identity
|
||||
set(['h10', 'b2301']),
|
||||
set(['h11', 'h1', 'b2323']),
|
||||
set(['b0000', 'b00', 'b0']),
|
||||
set(['b1111', 'b11', 'b1']),
|
||||
set(['b2222', 'b22', 'b2']),
|
||||
set(['b3333', 'b33', 'b3']),
|
||||
set(['b0011', 'b01']),
|
||||
set(['b2233', 'b23']),
|
||||
set(['b1032']),
|
||||
set(['b3210']),
|
||||
set(['b0022', 'b02']),
|
||||
set(['b1100', 'b10']),
|
||||
set(['b2200', 'b20']),
|
||||
set(['b3300', 'b30']),
|
||||
set(['b2211', 'b21']),
|
||||
set(['b3311', 'b31']),
|
||||
set(['b1122', 'b12']),
|
||||
set(['b3322', 'b32']),
|
||||
set(['b0033', 'b03']),
|
||||
set(['b1133', 'b13']),
|
||||
]
|
||||
|
||||
DST_SWIZZLE_BUCKETS = [
|
||||
set(['h0',]),
|
||||
set(['none', 'w0']), # Identity
|
||||
set([]),
|
||||
set(['h1']),
|
||||
set(['b0']),
|
||||
set(['b1']),
|
||||
set(['b2']),
|
||||
set(['b3']),
|
||||
]
|
||||
|
||||
ALL_SRC_SWIZZLES = reduce(lambda x, y: x | y, SRC_SWIZZLE_BUCKETS)
|
||||
ALL_DST_SWIZZLES = reduce(lambda x, y: x | y, DST_SWIZZLE_BUCKETS)
|
||||
|
||||
def pick_from_bucket(opts, bucket):
|
||||
intersection = set(opts) & bucket
|
||||
assert(len(intersection) <= 1)
|
||||
return intersection.pop() if len(intersection) == 1 else None
|
||||
|
||||
def src_swizzle_to_mod_map(opts):
|
||||
for opt in opts:
|
||||
assert opt == 'reserved' or opt in ALL_SRC_SWIZZLES, opt
|
||||
return [pick_from_bucket(opts, bucket) for bucket in SRC_SWIZZLE_BUCKETS]
|
||||
|
||||
def dst_swizzle_to_mod_map(opts):
|
||||
for opt in opts:
|
||||
assert opt in ['reserved', 'd0'] or opt in ALL_DST_SWIZZLES, opt
|
||||
return [pick_from_bucket(opts, bucket) for bucket in DST_SWIZZLE_BUCKETS]
|
||||
|
||||
def pack_modifier(mod, width, default, opts, body, pack_exprs):
|
||||
# Destructure the modifier name
|
||||
(raw, arg) = (mod[0:-1], mod[-1]) if mod[-1] in "0123" else (mod, 0)
|
||||
|
||||
SWIZZLES = ["lane", "lanes", "replicate", "swz", "widen", "swap"]
|
||||
|
||||
ir_value = "bytes2" if mod == "bytes2" else "{}[{}]".format(raw, arg) if mod[-1] in "0123" else mod
|
||||
lists = modifier_lists[raw]
|
||||
|
||||
# Swizzles need to be packed "specially"
|
||||
if raw in SWIZZLES:
|
||||
# Construct a list
|
||||
lists = src_swizzle_to_mod_map(opts)
|
||||
ir_value = "src[{}].swizzle".format(arg)
|
||||
elif raw == "lane_dest":
|
||||
lists = dst_swizzle_to_mod_map(opts)
|
||||
ir_value = "dest->swizzle"
|
||||
elif raw in ["abs", "sign"]:
|
||||
ir_value = "src[{}].abs".format(arg)
|
||||
elif raw in ["neg", "not"]:
|
||||
ir_value = "src[{}].neg".format(arg)
|
||||
|
||||
ir_value = "I->{}".format(ir_value)
|
||||
|
||||
# We need to map from ir_opts to opts
|
||||
mapped = map_modifier(body, mod, ir_value, lists, opts)
|
||||
body.append('unsigned {} = {};'.format(mod, mapped))
|
||||
body.append('assert({} < {});'.format(mod, 1 << width))
|
||||
|
||||
# Compiles an S-expression (and/or/eq/neq, modifiers, `ordering`, immediates)
|
||||
# into a C boolean expression suitable to stick in an if-statement. Takes an
|
||||
# imm_map to map modifiers to immediate values, parametrized by the ctx that
|
||||
# we're looking up in (the first, non-immediate argument of the equality)
|
||||
|
||||
SEXPR_BINARY = {
|
||||
"and": "&&",
|
||||
"or": "||",
|
||||
"eq": "==",
|
||||
"neq": "!="
|
||||
}
|
||||
|
||||
def compile_s_expr(expr, imm_map, ctx):
|
||||
if expr[0] == 'alias':
|
||||
return compile_s_expr(expr[1], imm_map, ctx)
|
||||
elif expr == ['eq', 'ordering', '#gt']:
|
||||
return '(src0 > src1)'
|
||||
elif expr == ['neq', 'ordering', '#lt']:
|
||||
return '(src0 >= src1)'
|
||||
elif expr == ['neq', 'ordering', '#gt']:
|
||||
return '(src0 <= src1)'
|
||||
elif expr == ['eq', 'ordering', '#lt']:
|
||||
return '(src0 < src1)'
|
||||
elif expr == ['eq', 'ordering', '#eq']:
|
||||
return '(src0 == src1)'
|
||||
elif isinstance(expr, list):
|
||||
sep = " {} ".format(SEXPR_BINARY[expr[0]])
|
||||
return "(" + sep.join([compile_s_expr(s, imm_map, expr[1]) for s in expr[1:]]) + ")"
|
||||
elif expr[0] == '#':
|
||||
return str(imm_map[ctx][expr[1:]])
|
||||
else:
|
||||
return expr
|
||||
|
||||
# Packs a derived value. We just iterate through the possible choices and test
|
||||
# whether the encoding matches, and if so we use it.
|
||||
|
||||
def pack_derived(pos, exprs, imm_map, body, pack_exprs):
|
||||
body.append('unsigned derived_{} = 0;'.format(pos))
|
||||
|
||||
first = True
|
||||
for i, expr in enumerate(exprs):
|
||||
if expr is not None:
|
||||
cond = compile_s_expr(expr, imm_map, None)
|
||||
body.append('{}if {} derived_{} = {};'.format('' if first else 'else ', cond, pos, i))
|
||||
first = False
|
||||
|
||||
assert (not first)
|
||||
body.append('else UNREACHABLE("No pattern match at pos {}");'.format(pos))
|
||||
body.append('')
|
||||
|
||||
assert(pos is not None)
|
||||
pack_exprs.append('(derived_{} << {})'.format(pos, pos))
|
||||
|
||||
# Generates a routine to pack a single variant of a single- instruction.
|
||||
# Template applies the needed formatting and combine to OR together all the
|
||||
# pack_exprs to avoid bit fields.
|
||||
#
|
||||
# Argument swapping is sensitive to the order of operations. Dependencies:
|
||||
# sources (RW), modifiers (RW), derived values (W). Hence we emit sources and
|
||||
# modifiers first, then perform a swap if necessary overwriting
|
||||
# sources/modifiers, and last calculate derived values and pack.
|
||||
|
||||
variant_template = Template("""static inline unsigned
|
||||
bi_pack_${name}(${", ".join(["bi_instr *I"] + ["enum bifrost_packed_src src{}".format(i) for i in range(srcs)])})
|
||||
{
|
||||
${"\\n".join([(" " + x) for x in common_body])}
|
||||
% if single_state:
|
||||
% for (pack_exprs, s_body, _) in states:
|
||||
${"\\n".join([" " + x for x in s_body + ["return {};".format( " | ".join(pack_exprs))]])}
|
||||
% endfor
|
||||
% else:
|
||||
% for i, (pack_exprs, s_body, cond) in enumerate(states):
|
||||
${'} else ' if i > 0 else ''}if ${cond} {
|
||||
${"\\n".join([" " + x for x in s_body + ["return {};".format(" | ".join(pack_exprs))]])}
|
||||
% endfor
|
||||
} else {
|
||||
UNREACHABLE("No matching state found in ${name}");
|
||||
}
|
||||
% endif
|
||||
}
|
||||
""")
|
||||
|
||||
def pack_variant(opname, states):
|
||||
# Expressions to be ORed together for the final pack, an array per state
|
||||
pack_exprs = [[hex(state[1]["exact"][1])] for state in states]
|
||||
|
||||
# Computations which need to be done to encode first, across states
|
||||
common_body = []
|
||||
|
||||
# Map from modifier names to a map from modifier values to encoded values
|
||||
# String -> { String -> Uint }. This can be shared across states since
|
||||
# modifiers are (except the pos values) constant across state.
|
||||
imm_map = {}
|
||||
|
||||
# Pack sources. Offset over to deal with staging/immediate weirdness in our
|
||||
# IR (TODO: reorder sources upstream so this goes away). Note sources are
|
||||
# constant across states.
|
||||
staging = states[0][1].get("staging", "")
|
||||
offset = 0
|
||||
if staging in ["r", "rw"]:
|
||||
offset += 1
|
||||
|
||||
pack_sources(states[0][1].get("srcs", []), common_body, pack_exprs, offset, opname[0] == '*')
|
||||
|
||||
modifiers_handled = []
|
||||
for st in states:
|
||||
for ((mod, _, width), default, opts) in st[1].get("modifiers", []):
|
||||
if mod in modifiers_handled:
|
||||
continue
|
||||
|
||||
modifiers_handled.append(mod)
|
||||
pack_modifier(mod, width, default, opts, common_body, pack_exprs)
|
||||
|
||||
imm_map[mod] = { x: y for y, x in enumerate(opts) }
|
||||
|
||||
for i, st in enumerate(states):
|
||||
for ((mod, pos, width), default, opts) in st[1].get("modifiers", []):
|
||||
if pos is not None:
|
||||
pack_exprs[i].append('({} << {})'.format(mod, pos))
|
||||
|
||||
for ((src_a, src_b), cond, remap) in st[1].get("swaps", []):
|
||||
# Figure out which vars to swap, in order to swap the arguments. This
|
||||
# always includes the sources themselves, and may include source
|
||||
# modifiers (with the same source indices). We swap based on which
|
||||
# matches A, this is arbitrary but if we swapped both nothing would end
|
||||
# up swapping at all since it would swap back.
|
||||
|
||||
vars_to_swap = ['src']
|
||||
for ((mod, _, width), default, opts) in st[1].get("modifiers", []):
|
||||
if mod[-1] in str(src_a):
|
||||
vars_to_swap.append(mod[0:-1])
|
||||
|
||||
common_body.append('if {}'.format(compile_s_expr(cond, imm_map, None)) + ' {')
|
||||
|
||||
# Emit the swaps. We use a temp, and wrap in a block to avoid naming
|
||||
# collisions with multiple swaps. {{Doubling}} to escape the format.
|
||||
|
||||
for v in vars_to_swap:
|
||||
common_body.append(' {{ unsigned temp = {}{}; {}{} = {}{}; {}{} = temp; }}'.format(v, src_a, v, src_a, v, src_b, v, src_b))
|
||||
|
||||
# Also, remap. Bidrectional swaps are explicit in the XML.
|
||||
for v in remap:
|
||||
maps = remap[v]
|
||||
imm = imm_map[v]
|
||||
|
||||
for i, l in enumerate(maps):
|
||||
common_body.append(' {}if ({} == {}) {} = {};'.format('' if i == 0 else 'else ', v, imm[l], v, imm[maps[l]]))
|
||||
|
||||
common_body.append('}')
|
||||
common_body.append('')
|
||||
|
||||
for (name, pos, width) in st[1].get("immediates", []):
|
||||
common_body.append('unsigned {} = I->{};'.format(name, name))
|
||||
common_body.append('assert({} < {});'.format(name, hex(1 << width)))
|
||||
|
||||
for st in pack_exprs:
|
||||
st.append('({} << {})'.format(name, pos))
|
||||
|
||||
# After this, we have to branch off, since deriveds *do* vary based on state.
|
||||
state_body = [[] for s in states]
|
||||
|
||||
for i, (_, st) in enumerate(states):
|
||||
for ((pos, width), exprs) in st.get("derived", []):
|
||||
pack_derived(pos, exprs, imm_map, state_body[i], pack_exprs[i])
|
||||
|
||||
# How do we pick a state? Accumulate the conditions
|
||||
state_conds = [compile_s_expr(st[0], imm_map, None) for st in states] if len(states) > 1 else [None]
|
||||
|
||||
if state_conds == None:
|
||||
assert (states[0][0] == None)
|
||||
|
||||
# Finally, we'll collect everything together
|
||||
return variant_template.render(name = opname_to_c(opname), states = zip(pack_exprs, state_body, state_conds), common_body = common_body, single_state = (len(states) == 1), srcs = 4)
|
||||
|
||||
print(COPYRIGHT + '#include "compiler.h"')
|
||||
|
||||
for i, bucket in enumerate(SRC_SWIZZLE_BUCKETS):
|
||||
for swz in bucket:
|
||||
bi_swz = 'BI_SWIZZLE_' + swz.upper()
|
||||
print(f'static_assert({bi_swz} == {i}, "Swizzle sanity");')
|
||||
|
||||
packs = [pack_variant(e, instructions[e]) for e in instructions]
|
||||
for p in packs:
|
||||
print(p)
|
||||
|
||||
top_pack = Template("""unsigned
|
||||
bi_pack_${'fma' if unit == '*' else 'add'}(bi_instr *I,
|
||||
enum bifrost_packed_src src0,
|
||||
enum bifrost_packed_src src1,
|
||||
enum bifrost_packed_src src2,
|
||||
enum bifrost_packed_src src3)
|
||||
{
|
||||
if (!I)
|
||||
return bi_pack_${opname_to_c(unit + 'NOP')}(I, src0, src1, src2, src3);
|
||||
|
||||
% if unit == '*':
|
||||
assert((1 << src0) & 0xfb);
|
||||
assert((1 << src1) & 0xfb);
|
||||
|
||||
% endif
|
||||
switch (I->op) {
|
||||
% for opcode in ops:
|
||||
% if unit + opcode in instructions:
|
||||
case BI_OPCODE_${opcode.replace('.', '_').upper()}:
|
||||
return bi_pack_${opname_to_c(unit + opcode)}(I, src0, src1, src2, src3);
|
||||
% endif
|
||||
% endfor
|
||||
default:
|
||||
#ifndef NDEBUG
|
||||
bi_print_instr(I, stderr);
|
||||
#endif
|
||||
UNREACHABLE("Cannot pack instruction as ${unit}");
|
||||
}
|
||||
}
|
||||
""")
|
||||
|
||||
for unit in ['*', '+']:
|
||||
print(top_pack.render(ops = ir_instructions, instructions = instructions, opname_to_c = opname_to_c, unit = unit))
|
||||
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/* Bottom-up local scheduler to reduce register pressure */
|
||||
|
||||
#include "util/dag.h"
|
||||
#include "compiler.h"
|
||||
|
||||
struct sched_ctx {
|
||||
/* Dependency graph */
|
||||
struct dag *dag;
|
||||
|
||||
/* Live set */
|
||||
BITSET_WORD *live;
|
||||
};
|
||||
|
||||
struct sched_node {
|
||||
struct dag_node dag;
|
||||
|
||||
/* Instruction this node represents */
|
||||
bi_instr *instr;
|
||||
};
|
||||
|
||||
static void
|
||||
add_dep(struct sched_node *a, struct sched_node *b)
|
||||
{
|
||||
if (a && b)
|
||||
dag_add_edge(&a->dag, &b->dag, 0);
|
||||
}
|
||||
|
||||
static struct dag *
|
||||
create_dag(bi_context *ctx, bi_block *block, void *memctx)
|
||||
{
|
||||
struct dag *dag = dag_create(ctx);
|
||||
|
||||
struct sched_node **last_write =
|
||||
calloc(ctx->ssa_alloc, sizeof(struct sched_node *));
|
||||
struct sched_node *coverage = NULL;
|
||||
struct sched_node *preload = NULL;
|
||||
|
||||
/* Last memory load, to serialize stores against */
|
||||
struct sched_node *memory_load = NULL;
|
||||
|
||||
/* Last memory store, to serialize loads and stores against */
|
||||
struct sched_node *memory_store = NULL;
|
||||
|
||||
bi_foreach_instr_in_block(block, I) {
|
||||
/* Leave branches at the end */
|
||||
if (I->op == BI_OPCODE_JUMP || bi_get_opcode_props(I)->branch)
|
||||
break;
|
||||
|
||||
assert(I->branch_target == NULL);
|
||||
|
||||
struct sched_node *node = rzalloc(memctx, struct sched_node);
|
||||
node->instr = I;
|
||||
dag_init_node(dag, &node->dag);
|
||||
|
||||
/* Reads depend on writes, no other hazards in SSA */
|
||||
bi_foreach_ssa_src(I, s)
|
||||
add_dep(node, last_write[I->src[s].value]);
|
||||
|
||||
bi_foreach_dest(I, d)
|
||||
last_write[I->dest[d].value] = node;
|
||||
|
||||
add_dep(node, preload);
|
||||
|
||||
switch (bi_get_opcode_props(I)->message) {
|
||||
case BIFROST_MESSAGE_LOAD:
|
||||
/* Regular memory loads needs to be serialized against
|
||||
* other memory access. However, UBO memory is read-only
|
||||
* so it can be moved around freely.
|
||||
*/
|
||||
if (I->seg != BI_SEG_UBO) {
|
||||
add_dep(node, memory_store);
|
||||
/* Chain loads together so a store cannot be scheduled
|
||||
* between two loads to the same address. Without alias
|
||||
* analysis we conservatively serialize all loads.
|
||||
*/
|
||||
add_dep(node, memory_load);
|
||||
memory_load = node;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case BIFROST_MESSAGE_ATTRIBUTE:
|
||||
/* Regular attribute loads can be reordered, but
|
||||
* writeable attributes can't be. Our one use of
|
||||
* writeable attributes are images.
|
||||
*/
|
||||
if ((I->op == BI_OPCODE_LD_TEX) || (I->op == BI_OPCODE_LD_TEX_IMM) ||
|
||||
(I->op == BI_OPCODE_LD_ATTR_TEX)) {
|
||||
add_dep(node, memory_store);
|
||||
add_dep(node, memory_load);
|
||||
memory_load = node;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case BIFROST_MESSAGE_STORE:
|
||||
assert(I->seg != BI_SEG_UBO);
|
||||
add_dep(node, memory_load);
|
||||
add_dep(node, memory_store);
|
||||
memory_store = node;
|
||||
break;
|
||||
|
||||
case BIFROST_MESSAGE_ATOMIC:
|
||||
case BIFROST_MESSAGE_BARRIER:
|
||||
add_dep(node, memory_load);
|
||||
add_dep(node, memory_store);
|
||||
memory_load = node;
|
||||
memory_store = node;
|
||||
break;
|
||||
|
||||
case BIFROST_MESSAGE_BLEND:
|
||||
case BIFROST_MESSAGE_Z_STENCIL:
|
||||
case BIFROST_MESSAGE_TILE:
|
||||
add_dep(node, coverage);
|
||||
coverage = node;
|
||||
break;
|
||||
|
||||
case BIFROST_MESSAGE_ATEST:
|
||||
/* ATEST signals the end of shader side effects */
|
||||
add_dep(node, memory_store);
|
||||
memory_store = node;
|
||||
|
||||
/* ATEST also updates coverage */
|
||||
add_dep(node, coverage);
|
||||
coverage = node;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (I->op == BI_OPCODE_DISCARD_F32) {
|
||||
/* Serialize against ATEST */
|
||||
add_dep(node, coverage);
|
||||
coverage = node;
|
||||
}
|
||||
if (I->op == BI_OPCODE_DISCARD_F32 ||
|
||||
bi_is_scheduling_barrier(I)) {
|
||||
/* Serialize against memory operations and barriers.
|
||||
*
|
||||
* TODO: This is *not* quite sufficient in the case of a scheduling
|
||||
* barrier. We need to serialize against *all* operations with
|
||||
* side-effects in that case.
|
||||
*/
|
||||
add_dep(node, memory_load);
|
||||
add_dep(node, memory_store);
|
||||
memory_load = node;
|
||||
memory_store = node;
|
||||
}
|
||||
if ((I->op == BI_OPCODE_PHI) ||
|
||||
(I->op == BI_OPCODE_MOV_I32 &&
|
||||
I->src[0].type == BI_INDEX_REGISTER)) {
|
||||
preload = node;
|
||||
}
|
||||
}
|
||||
|
||||
free(last_write);
|
||||
|
||||
return dag;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the change in register pressure from scheduling a given
|
||||
* instruction. Equivalently, calculate the difference in the number of live
|
||||
* registers before and after the instruction, given the live set after the
|
||||
* instruction. This calculation follows immediately from the dataflow
|
||||
* definition of liveness:
|
||||
*
|
||||
* live_in = (live_out - KILL) + GEN
|
||||
*/
|
||||
static signed
|
||||
calculate_pressure_delta(bi_instr *I, BITSET_WORD *live)
|
||||
{
|
||||
signed delta = 0;
|
||||
|
||||
/* Destinations must be unique */
|
||||
bi_foreach_dest(I, d) {
|
||||
if (BITSET_TEST(live, I->dest[d].value))
|
||||
delta -= bi_count_write_registers(I, d);
|
||||
}
|
||||
|
||||
bi_foreach_ssa_src(I, src) {
|
||||
/* Filter duplicates */
|
||||
bool dupe = false;
|
||||
|
||||
for (unsigned i = 0; i < src; ++i) {
|
||||
if (bi_is_equiv(I->src[i], I->src[src])) {
|
||||
dupe = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!dupe && !BITSET_TEST(live, I->src[src].value))
|
||||
delta += bi_count_read_registers(I, src);
|
||||
}
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
/*
|
||||
* Choose the next instruction, bottom-up. For now we use a simple greedy
|
||||
* heuristic: choose the instruction that has the best effect on liveness.
|
||||
*/
|
||||
static struct sched_node *
|
||||
choose_instr(struct sched_ctx *s)
|
||||
{
|
||||
int32_t min_delta = INT32_MAX;
|
||||
struct sched_node *best = NULL;
|
||||
|
||||
list_for_each_entry(struct sched_node, n, &s->dag->heads, dag.link) {
|
||||
int32_t delta = calculate_pressure_delta(n->instr, s->live);
|
||||
|
||||
if (delta < min_delta) {
|
||||
best = n;
|
||||
min_delta = delta;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
static void
|
||||
pressure_schedule_block(bi_context *ctx, bi_block *block, struct sched_ctx *s)
|
||||
{
|
||||
/* off by a constant, that's ok */
|
||||
signed pressure = 0;
|
||||
signed orig_max_pressure = 0;
|
||||
unsigned nr_ins = 0;
|
||||
|
||||
memcpy(s->live, block->ssa_live_out, BITSET_BYTES(ctx->ssa_alloc));
|
||||
|
||||
bi_foreach_instr_in_block_rev(block, I) {
|
||||
pressure += calculate_pressure_delta(I, s->live);
|
||||
orig_max_pressure = MAX2(pressure, orig_max_pressure);
|
||||
bi_liveness_ins_update_ssa(s->live, I);
|
||||
nr_ins++;
|
||||
}
|
||||
|
||||
memcpy(s->live, block->ssa_live_out, BITSET_BYTES(ctx->ssa_alloc));
|
||||
|
||||
/* off by a constant, that's ok */
|
||||
signed max_pressure = 0;
|
||||
pressure = 0;
|
||||
|
||||
struct sched_node **schedule = calloc(nr_ins, sizeof(struct sched_node *));
|
||||
nr_ins = 0;
|
||||
|
||||
while (!list_is_empty(&s->dag->heads)) {
|
||||
struct sched_node *node = choose_instr(s);
|
||||
pressure += calculate_pressure_delta(node->instr, s->live);
|
||||
max_pressure = MAX2(pressure, max_pressure);
|
||||
dag_prune_head(s->dag, &node->dag);
|
||||
|
||||
schedule[nr_ins++] = node;
|
||||
bi_liveness_ins_update_ssa(s->live, node->instr);
|
||||
}
|
||||
|
||||
/* Bail if it looks like it's worse */
|
||||
if (max_pressure >= orig_max_pressure) {
|
||||
free(schedule);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Apply the schedule */
|
||||
for (unsigned i = 0; i < nr_ins; ++i) {
|
||||
bi_remove_instruction(schedule[i]->instr);
|
||||
list_add(&schedule[i]->instr->link, &block->instructions);
|
||||
}
|
||||
|
||||
free(schedule);
|
||||
}
|
||||
|
||||
void
|
||||
bi_pressure_schedule(bi_context *ctx)
|
||||
{
|
||||
bi_compute_liveness_ssa(ctx);
|
||||
void *memctx = ralloc_context(ctx);
|
||||
BITSET_WORD *live =
|
||||
ralloc_array(memctx, BITSET_WORD, BITSET_WORDS(ctx->ssa_alloc));
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
struct sched_ctx sctx = {.dag = create_dag(ctx, block, memctx),
|
||||
.live = live};
|
||||
|
||||
pressure_schedule_block(ctx, block, &sctx);
|
||||
}
|
||||
|
||||
ralloc_free(memctx);
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Connor Abbott <[email protected]>
|
||||
* Copyright (C) 2019 Lyude Paul <[email protected]>
|
||||
* Copyright (C) 2019 Ryan Houdek <[email protected]>
|
||||
* Copyright (C) 2019-2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "bi_print_common.h"
|
||||
#include "compiler.h"
|
||||
|
||||
static const char *
|
||||
bi_reg_op_name(enum bifrost_reg_op op)
|
||||
{
|
||||
switch (op) {
|
||||
case BIFROST_OP_IDLE:
|
||||
return "idle";
|
||||
case BIFROST_OP_READ:
|
||||
return "read";
|
||||
case BIFROST_OP_WRITE:
|
||||
return "write";
|
||||
case BIFROST_OP_WRITE_LO:
|
||||
return "write lo";
|
||||
case BIFROST_OP_WRITE_HI:
|
||||
return "write hi";
|
||||
default:
|
||||
return "invalid";
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_debug_info(const struct nir_instr_debug_info *di, FILE *w)
|
||||
{
|
||||
fprintf(w, "0x%08x", di->spirv_offset);
|
||||
|
||||
if (di->filename)
|
||||
fprintf(w, " %s:%u:%u", di->filename, di->line, di->column);
|
||||
|
||||
if (di->nir_line)
|
||||
fprintf(w, " nir:%u", di->nir_line);
|
||||
}
|
||||
|
||||
void
|
||||
bi_print_instr(const bi_instr *I, FILE *w)
|
||||
{
|
||||
const struct nir_instr_debug_info *debug_info = I->debug_info;
|
||||
if (debug_info) {
|
||||
fprintf(w, " // ");
|
||||
print_debug_info(debug_info, w);
|
||||
fprintf(w, "\n");
|
||||
}
|
||||
|
||||
bi_print_instr_impl(I, w);
|
||||
}
|
||||
|
||||
void
|
||||
bi_print_slots(bi_registers *regs, FILE *fp)
|
||||
{
|
||||
for (unsigned i = 0; i < 2; ++i) {
|
||||
if (regs->enabled[i])
|
||||
fprintf(fp, "slot %u: %u\n", i, regs->slot[i]);
|
||||
}
|
||||
|
||||
if (regs->slot23.slot2) {
|
||||
fprintf(fp, "slot 2 (%s%s): %u\n", bi_reg_op_name(regs->slot23.slot2),
|
||||
regs->slot23.slot2 >= BIFROST_OP_WRITE ? " FMA" : "",
|
||||
regs->slot[2]);
|
||||
}
|
||||
|
||||
if (regs->slot23.slot3) {
|
||||
fprintf(fp, "slot 3 (%s %s): %u\n", bi_reg_op_name(regs->slot23.slot3),
|
||||
regs->slot23.slot3_fma ? "FMA" : "ADD", regs->slot[3]);
|
||||
}
|
||||
}
|
||||
|
||||
struct printer {
|
||||
FILE *w;
|
||||
|
||||
struct nir_instr_debug_info last_debug_info;
|
||||
};
|
||||
|
||||
static void
|
||||
print_instr(const bi_instr *I, struct printer *p)
|
||||
{
|
||||
const struct nir_instr_debug_info *debug_info = I->debug_info;
|
||||
if (debug_info) {
|
||||
bool changed = p->last_debug_info.spirv_offset != debug_info->spirv_offset;
|
||||
changed |= p->last_debug_info.nir_line != debug_info->nir_line;
|
||||
|
||||
if (changed && debug_info->spirv_offset) {
|
||||
fprintf(p->w, " // ");
|
||||
print_debug_info(debug_info, p->w);
|
||||
fprintf(p->w, "\n");
|
||||
}
|
||||
|
||||
p->last_debug_info = *debug_info;
|
||||
}
|
||||
|
||||
bi_print_instr_impl(I, p->w);
|
||||
}
|
||||
|
||||
static void
|
||||
print_tuple(bi_tuple *tuple, struct printer *p)
|
||||
{
|
||||
bi_instr *ins[2] = {tuple->fma, tuple->add};
|
||||
|
||||
for (unsigned i = 0; i < 2; ++i) {
|
||||
fprintf(p->w, (i == 0) ? "\t* " : "\t+ ");
|
||||
|
||||
if (ins[i])
|
||||
print_instr(ins[i], p);
|
||||
else
|
||||
fprintf(p->w, "NOP\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_clause(bi_clause *clause, struct printer *p)
|
||||
{
|
||||
fprintf(p->w, "id(%u)", clause->scoreboard_id);
|
||||
|
||||
if (clause->dependencies) {
|
||||
fprintf(p->w, " wait(");
|
||||
|
||||
for (unsigned i = 0; i < 8; ++i) {
|
||||
if (clause->dependencies & (1 << i))
|
||||
fprintf(p->w, "%u ", i);
|
||||
}
|
||||
|
||||
fprintf(p->w, ")");
|
||||
}
|
||||
|
||||
fprintf(p->w, " %s", bi_flow_control_name(clause->flow_control));
|
||||
|
||||
if (!clause->next_clause_prefetch)
|
||||
fprintf(p->w, " no_prefetch");
|
||||
|
||||
if (clause->staging_barrier)
|
||||
fprintf(p->w, " osrb");
|
||||
|
||||
if (clause->td)
|
||||
fprintf(p->w, " td");
|
||||
|
||||
if (clause->pcrel_idx != ~0)
|
||||
fprintf(p->w, " pcrel(%u)", clause->pcrel_idx);
|
||||
|
||||
fprintf(p->w, "\n");
|
||||
|
||||
for (unsigned i = 0; i < clause->tuple_count; ++i)
|
||||
print_tuple(&clause->tuples[i], p);
|
||||
|
||||
if (clause->constant_count) {
|
||||
for (unsigned i = 0; i < clause->constant_count; ++i)
|
||||
fprintf(p->w, "%" PRIx64 " ", clause->constants[i]);
|
||||
|
||||
if (clause->branch_constant)
|
||||
fprintf(p->w, "*");
|
||||
|
||||
fprintf(p->w, "\n");
|
||||
}
|
||||
|
||||
fprintf(p->w, "\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_scoreboard_line(unsigned slot, const char *name, uint64_t mask,
|
||||
FILE *fp)
|
||||
{
|
||||
if (!mask)
|
||||
return;
|
||||
|
||||
fprintf(fp, "slot %u %s:", slot, name);
|
||||
|
||||
u_foreach_bit64(reg, mask)
|
||||
fprintf(fp, " r%" PRId64, reg);
|
||||
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_scoreboard(struct bi_scoreboard_state *state, FILE *fp)
|
||||
{
|
||||
for (unsigned i = 0; i < BI_NUM_SLOTS; ++i) {
|
||||
print_scoreboard_line(i, "reads", state->read[i], fp);
|
||||
print_scoreboard_line(i, "writes", state->write[i], fp);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_block(bi_block *block, FILE *fp)
|
||||
{
|
||||
if (block->scheduled) {
|
||||
print_scoreboard(&block->scoreboard_in, fp);
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
|
||||
fprintf(fp, "block%u {\n", block->index);
|
||||
|
||||
struct printer printer = {.w = fp};
|
||||
|
||||
if (block->scheduled) {
|
||||
bi_foreach_clause_in_block(block, clause)
|
||||
print_clause(clause, &printer);
|
||||
} else {
|
||||
bi_foreach_instr_in_block(block, ins)
|
||||
print_instr((bi_instr *)ins, &printer);
|
||||
}
|
||||
|
||||
fprintf(fp, "}");
|
||||
|
||||
if (block->successors[0]) {
|
||||
fprintf(fp, " -> ");
|
||||
|
||||
bi_foreach_successor((block), succ)
|
||||
fprintf(fp, "block%u ", succ->index);
|
||||
}
|
||||
|
||||
if (bi_num_predecessors(block)) {
|
||||
fprintf(fp, " from");
|
||||
|
||||
bi_foreach_predecessor(block, pred)
|
||||
fprintf(fp, " block%u", (*pred)->index);
|
||||
}
|
||||
|
||||
if (block->scheduled) {
|
||||
fprintf(fp, "\n");
|
||||
print_scoreboard(&block->scoreboard_out, fp);
|
||||
}
|
||||
|
||||
fprintf(fp, "\n\n");
|
||||
}
|
||||
|
||||
void
|
||||
bi_print_shader(bi_context *ctx, FILE *fp)
|
||||
{
|
||||
bi_foreach_block(ctx, block)
|
||||
print_block(block, fp);
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Connor Abbott <[email protected]>
|
||||
* Copyright (C) 2019 Lyude Paul <[email protected]>
|
||||
* Copyright (C) 2019 Ryan Houdek <[email protected]>
|
||||
* Copyright (C) 2019-2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/* Prints shared with the disassembler */
|
||||
|
||||
#include "bi_print_common.h"
|
||||
|
||||
const char *
|
||||
bi_message_type_name(enum bifrost_message_type T)
|
||||
{
|
||||
switch (T) {
|
||||
case BIFROST_MESSAGE_NONE:
|
||||
return "";
|
||||
case BIFROST_MESSAGE_VARYING:
|
||||
return "vary";
|
||||
case BIFROST_MESSAGE_ATTRIBUTE:
|
||||
return "attr";
|
||||
case BIFROST_MESSAGE_TEX:
|
||||
return "tex";
|
||||
case BIFROST_MESSAGE_VARTEX:
|
||||
return "vartex";
|
||||
case BIFROST_MESSAGE_LOAD:
|
||||
return "load";
|
||||
case BIFROST_MESSAGE_STORE:
|
||||
return "store";
|
||||
case BIFROST_MESSAGE_ATOMIC:
|
||||
return "atomic";
|
||||
case BIFROST_MESSAGE_BARRIER:
|
||||
return "barrier";
|
||||
case BIFROST_MESSAGE_BLEND:
|
||||
return "blend";
|
||||
case BIFROST_MESSAGE_TILE:
|
||||
return "tile";
|
||||
case BIFROST_MESSAGE_Z_STENCIL:
|
||||
return "z_stencil";
|
||||
case BIFROST_MESSAGE_ATEST:
|
||||
return "atest";
|
||||
case BIFROST_MESSAGE_JOB:
|
||||
return "job";
|
||||
case BIFROST_MESSAGE_64BIT:
|
||||
return "64";
|
||||
default:
|
||||
return "XXX reserved";
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
bi_flow_control_name(enum bifrost_flow mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case BIFROST_FLOW_END:
|
||||
return "eos";
|
||||
case BIFROST_FLOW_NBTB_PC:
|
||||
return "nbb br_pc";
|
||||
case BIFROST_FLOW_NBTB_UNCONDITIONAL:
|
||||
return "nbb r_uncond";
|
||||
case BIFROST_FLOW_NBTB:
|
||||
return "nbb";
|
||||
case BIFROST_FLOW_BTB_UNCONDITIONAL:
|
||||
return "bb r_uncond";
|
||||
case BIFROST_FLOW_BTB_NONE:
|
||||
return "bb";
|
||||
case BIFROST_FLOW_WE_UNCONDITIONAL:
|
||||
return "we r_uncond";
|
||||
case BIFROST_FLOW_WE:
|
||||
return "we";
|
||||
default:
|
||||
return "XXX";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Connor Abbott <[email protected]>
|
||||
* Copyright (C) 2019 Lyude Paul <[email protected]>
|
||||
* Copyright (C) 2019 Ryan Houdek <[email protected]>
|
||||
* Copyright (C) 2020 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef __BI_PRINT_COMMON_H
|
||||
#define __BI_PRINT_COMMON_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "bifrost.h"
|
||||
|
||||
const char *bi_message_type_name(enum bifrost_message_type T);
|
||||
const char *bi_flow_control_name(enum bifrost_flow mode);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,258 @@
|
||||
# Copyright (C) 2020 Collabora, Ltd.
|
||||
# Copyright (C) 2026 Arm Ltd.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
TEMPLATE = """#include <stdio.h>
|
||||
#include "compiler.h"
|
||||
|
||||
static const char *
|
||||
bi_swizzle_as_str(enum bi_swizzle swz)
|
||||
{
|
||||
switch (swz) {
|
||||
case BI_SWIZZLE_H00: return ".h00";
|
||||
case BI_SWIZZLE_H01: return "";
|
||||
case BI_SWIZZLE_H10: return ".h10";
|
||||
case BI_SWIZZLE_H11: return ".h11";
|
||||
case BI_SWIZZLE_B0000: return ".b0";
|
||||
case BI_SWIZZLE_B1111: return ".b1";
|
||||
case BI_SWIZZLE_B2222: return ".b2";
|
||||
case BI_SWIZZLE_B3333: return ".b3";
|
||||
case BI_SWIZZLE_B0011: return ".b0011";
|
||||
case BI_SWIZZLE_B2233: return ".b2233";
|
||||
case BI_SWIZZLE_B1032: return ".b1032";
|
||||
case BI_SWIZZLE_B3210: return ".b3210";
|
||||
case BI_SWIZZLE_B0022: return ".b0022";
|
||||
case BI_SWIZZLE_B1100: return ".b1100";
|
||||
case BI_SWIZZLE_B2200: return ".b2200";
|
||||
case BI_SWIZZLE_B3300: return ".b3300";
|
||||
case BI_SWIZZLE_B2211: return ".b2211";
|
||||
case BI_SWIZZLE_B3311: return ".b3311";
|
||||
case BI_SWIZZLE_B1122: return ".b1122";
|
||||
case BI_SWIZZLE_B3322: return ".b3322";
|
||||
case BI_SWIZZLE_B0033: return ".b0033";
|
||||
case BI_SWIZZLE_B1133: return ".b1133";
|
||||
}
|
||||
|
||||
UNREACHABLE("Invalid swizzle");
|
||||
}
|
||||
|
||||
static const char *
|
||||
bir_fau_name(unsigned fau_idx)
|
||||
{
|
||||
const char *names[] = {
|
||||
"zero", "lane-id", "warp-id", "core-id", "fb-extent",
|
||||
"atest-param", "sample-pos", "reserved",
|
||||
"blend_descriptor_0", "blend_descriptor_1",
|
||||
"blend_descriptor_2", "blend_descriptor_3",
|
||||
"blend_descriptor_4", "blend_descriptor_5",
|
||||
"blend_descriptor_6", "blend_descriptor_7",
|
||||
"tls_ptr", "wls_ptr", "program_counter",
|
||||
};
|
||||
|
||||
assert(fau_idx < ARRAY_SIZE(names));
|
||||
return names[fau_idx];
|
||||
}
|
||||
|
||||
static const char *
|
||||
bir_passthrough_name(unsigned idx)
|
||||
{
|
||||
const char *names[] = {
|
||||
"s0", "s1", "s2", "t", "fau.x", "fau.y", "t0", "t1"
|
||||
};
|
||||
|
||||
assert(idx < ARRAY_SIZE(names));
|
||||
return names[idx];
|
||||
}
|
||||
|
||||
static void
|
||||
bi_print_index(FILE *fp, bi_index index, unsigned nr_regs)
|
||||
{
|
||||
if (bi_is_null(index))
|
||||
fprintf(fp, "_");
|
||||
else if (index.type == BI_INDEX_CONSTANT)
|
||||
fprintf(fp, "#0x%x", index.value);
|
||||
else if (index.type == BI_INDEX_FAU && index.memory)
|
||||
fprintf(fp, "m%u", index.value);
|
||||
else if (index.type == BI_INDEX_FAU && index.value >= BIR_FAU_UNIFORM)
|
||||
fprintf(fp, "u%u", index.value & ~BIR_FAU_UNIFORM);
|
||||
else if (index.type == BI_INDEX_FAU)
|
||||
fprintf(fp, "%s", bir_fau_name(index.value));
|
||||
else if (index.type == BI_INDEX_PASS)
|
||||
fprintf(fp, "%s", bir_passthrough_name(index.value));
|
||||
else if (index.type == BI_INDEX_REGISTER) {
|
||||
for (int i = 0; i < nr_regs; i++) {
|
||||
if (i > 0) fputs(":", fp);
|
||||
fprintf(fp, "%s%u", index.memory ? "m" : "r", index.value + i);
|
||||
}
|
||||
} else if (index.type == BI_INDEX_NORMAL)
|
||||
fprintf(fp, "%%%s%u", index.memory ? "m" : "", index.value);
|
||||
else
|
||||
UNREACHABLE("Invalid index");
|
||||
|
||||
if (index.discard || index.kill_ssa)
|
||||
fputs("^", fp);
|
||||
|
||||
if (index.offset)
|
||||
fprintf(fp, "[%u]", index.offset);
|
||||
|
||||
if (index.abs)
|
||||
fputs(".abs", fp);
|
||||
|
||||
if (index.neg)
|
||||
fputs(".neg", fp);
|
||||
|
||||
fputs(bi_swizzle_as_str(index.swizzle), fp);
|
||||
}
|
||||
|
||||
% for mod in sorted(modifiers):
|
||||
% if len(modifiers[mod]) > 2: # otherwise just boolean
|
||||
|
||||
UNUSED static inline const char *
|
||||
bi_${mod}_as_str(enum bi_${mod} ${mod})
|
||||
{
|
||||
switch (${mod}) {
|
||||
% for i, state in enumerate(sorted(modifiers[mod])):
|
||||
% if state == "none":
|
||||
case BI_${mod.upper()}_NONE: return "";
|
||||
% elif state != "reserved":
|
||||
case BI_${mod.upper()}_${state.upper()}: return ".${state.lower()}";
|
||||
% endif
|
||||
% endfor
|
||||
}
|
||||
|
||||
UNREACHABLE("Invalid ${mod}");
|
||||
};
|
||||
% endif
|
||||
% endfor
|
||||
|
||||
<%def name="print_modifiers(mods, table)">
|
||||
% for mod in mods:
|
||||
% if mod not in ["lane_dest"]:
|
||||
% if len(table[mod]) > 2:
|
||||
fputs(bi_${mod}_as_str(I->${mod}), fp);
|
||||
% else:
|
||||
if (I->${mod}) fputs(".${mod}", fp);
|
||||
% endif
|
||||
% endif
|
||||
% endfor
|
||||
</%def>
|
||||
|
||||
<%def name="print_source_modifiers(mods, src, table)">
|
||||
% for mod in mods:
|
||||
% if mod[0:-1] not in ["lane", "lanes", "replicate", "swz", "widen", "swap", "abs", "neg", "sign", "not"]:
|
||||
% if len(table[mod[0:-1]]) > 2:
|
||||
fputs(bi_${mod[0:-1]}_as_str(I->${mod[0:-1]}[${src}]), fp);
|
||||
% elif mod == "bytes2":
|
||||
if (I->bytes2) fputs(".bytes", fp);
|
||||
% else:
|
||||
if (I->${mod[0:-1]}[${src}]) fputs(".${mod[0:-1]}", fp);
|
||||
% endif
|
||||
%endif
|
||||
% endfor
|
||||
</%def>
|
||||
|
||||
void
|
||||
bi_print_instr_impl(const bi_instr *I, FILE *fp)
|
||||
{
|
||||
char buf[128];
|
||||
size_t len = 0;
|
||||
unsigned indent = 8;
|
||||
|
||||
/* Print destination width in SSA-form. For SPLIT, only print one width as
|
||||
* it is assumed all destinations will have the same width.
|
||||
*/
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
if (I->op == BI_OPCODE_SPLIT_I32 && d > 0)
|
||||
continue;
|
||||
if (len > 0)
|
||||
len += snprintf(buf + len, sizeof(buf) - len, ",");
|
||||
|
||||
unsigned nr_regs = bi_count_write_registers(I, d);
|
||||
if (nr_regs > 1)
|
||||
len += snprintf(buf + len, sizeof(buf) - len, "32x%u", nr_regs);
|
||||
else if (nr_regs == 1)
|
||||
len += snprintf(buf + len, sizeof(buf) - len, "32");
|
||||
}
|
||||
|
||||
if (len > 0)
|
||||
fputs(buf, fp);
|
||||
if (len >= indent)
|
||||
fputc(' ', fp);
|
||||
else
|
||||
fprintf(fp, "%*s", (int)(indent - len), "");
|
||||
|
||||
bi_foreach_dest(I, d) {
|
||||
if (d > 0) fprintf(fp, ", ");
|
||||
|
||||
unsigned nr_regs = bi_count_write_registers(I, d);
|
||||
bi_print_index(fp, I->dest[d], nr_regs);
|
||||
}
|
||||
|
||||
if (I->nr_dests > 0)
|
||||
fputs(" = ", fp);
|
||||
|
||||
fprintf(fp, "%s", bi_get_opcode_props(I)->name);
|
||||
|
||||
if (I->table)
|
||||
fprintf(fp, ".table%u", I->table);
|
||||
|
||||
if (I->flow)
|
||||
fprintf(fp, ".flow%u", I->flow);
|
||||
|
||||
if (I->op == BI_OPCODE_COLLECT_I32 || I->op == BI_OPCODE_PHI) {
|
||||
for (unsigned i = 0; i < I->nr_srcs; ++i) {
|
||||
if (i > 0)
|
||||
fputs(", ", fp);
|
||||
else
|
||||
fputs(" ", fp);
|
||||
|
||||
unsigned nr_regs = bi_count_read_registers(I, i);
|
||||
bi_print_index(fp, I->src[i], nr_regs);
|
||||
}
|
||||
}
|
||||
|
||||
switch (I->op) {
|
||||
% for opcode in ops:
|
||||
<%
|
||||
# Extract modifiers that are not per-source
|
||||
root_modifiers = [x for x in ops[opcode]["modifiers"] if x[-1] not in "0123"]
|
||||
%>
|
||||
case BI_OPCODE_${opcode.replace('.', '_').upper()}:
|
||||
${print_modifiers(root_modifiers, modifiers)}
|
||||
fputs(" ", fp);
|
||||
% for src in range(src_count(ops[opcode])):
|
||||
% if src > 0:
|
||||
fputs(", ", fp);
|
||||
% endif
|
||||
bi_print_index(fp, I->src[${src}], bi_count_read_registers(I, ${src}));
|
||||
${print_source_modifiers([m for m in ops[opcode]["modifiers"] if m[-1] == str(src)], src, modifiers)}
|
||||
% endfor
|
||||
% for imm in ops[opcode]["immediates"]:
|
||||
fprintf(fp, ", ${imm}:%u", I->${imm});
|
||||
% endfor
|
||||
break;
|
||||
% endfor
|
||||
default:
|
||||
UNREACHABLE("Invalid opcode");
|
||||
}
|
||||
|
||||
if (I->branch_target)
|
||||
fprintf(fp, " -> block%u", I->branch_target->index);
|
||||
|
||||
fputs("\\n", fp);
|
||||
|
||||
}"""
|
||||
|
||||
import sys
|
||||
from bifrost_isa import *
|
||||
from mako.template import Template
|
||||
|
||||
instructions = {}
|
||||
for arg in sys.argv[1:]:
|
||||
new_instructions = parse_instructions(arg, include_pseudo = True)
|
||||
instructions.update(new_instructions)
|
||||
|
||||
ir_instructions = partition_mnemonics(instructions)
|
||||
modifier_lists = order_modifiers(ir_instructions)
|
||||
|
||||
print(Template(COPYRIGHT + TEMPLATE).render(ops = ir_instructions, modifiers = modifier_lists, src_count = src_count))
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2020 Collabora, Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef __BI_QUIRKS_H
|
||||
#define __BI_QUIRKS_H
|
||||
|
||||
#include "panfrost/model/pan_model.h"
|
||||
|
||||
/* Model-specific quirks requiring compiler workarounds/etc. Quirks
|
||||
* may be errata requiring a workaround, or features. We're trying to be
|
||||
* quirk-positive here; quirky is the best! */
|
||||
|
||||
/* Whether this GPU lacks support for fp32 transcendentals, requiring backend
|
||||
* lowering to low-precision lookup tables and polynomial approximation */
|
||||
|
||||
#define BIFROST_NO_FP32_TRANSCENDENTALS (1 << 0)
|
||||
|
||||
/* Whether this GPU lacks support for the full form of the CLPER instruction.
|
||||
* These GPUs use a simple encoding of CLPER that does not support
|
||||
* inactive_result, subgroup_size, or lane_op. Using those features requires
|
||||
* lowering to additional ALU instructions. The encoding forces inactive_result
|
||||
* = zero, subgroup_size = subgroup4, and lane_op = none. */
|
||||
|
||||
#define BIFROST_LIMITED_CLPER (1 << 1)
|
||||
|
||||
static inline unsigned
|
||||
bifrost_get_quirks(uint64_t gpu_id)
|
||||
{
|
||||
unsigned arch_maj_min =
|
||||
(PAN_ARCH_MAJOR(gpu_id) << 4) | PAN_ARCH_MINOR(gpu_id);
|
||||
switch (arch_maj_min) {
|
||||
case 0x60: /* G71 */
|
||||
return BIFROST_NO_FP32_TRANSCENDENTALS | BIFROST_LIMITED_CLPER;
|
||||
case 0x62: /* G72 */
|
||||
case 0x70: /* G31 */
|
||||
return BIFROST_LIMITED_CLPER;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright 2023-2024 Alyssa Rosenzweig
|
||||
* Copyright 2023-2024 Valve Corporation
|
||||
* Copyright 2022 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
#include "util/list.h"
|
||||
#include "util/set.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "bifrost_compile.h"
|
||||
#include "bifrost_nir.h"
|
||||
#include "compiler.h"
|
||||
|
||||
/*
|
||||
* RA treats the nesting counter, the divergent shuffle temporary, and the
|
||||
* spiller temporaries as alive throughout if used anywhere. This could be
|
||||
* optimized. Using a single power-of-two reserved region at the start ensures
|
||||
* these registers are never shuffled.
|
||||
*/
|
||||
static unsigned
|
||||
reserved_size(bi_context *ctx)
|
||||
{
|
||||
if (ctx->has_spill_pcopy_reserved)
|
||||
return 8;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate register demand in registers, while gathering widths and
|
||||
* classes. Becuase we allocate in SSA, this calculation is exact in
|
||||
* linear-time. Depends on SSA liveness information.
|
||||
*/
|
||||
unsigned
|
||||
bi_calc_register_demand(bi_context *ctx)
|
||||
{
|
||||
/* Print detailed demand calculation, helpful to debug spilling */
|
||||
bool debug = false;
|
||||
|
||||
if (debug) {
|
||||
bi_print_shader(ctx, stdout);
|
||||
}
|
||||
|
||||
uint8_t *widths = calloc(ctx->ssa_alloc, sizeof(uint8_t));
|
||||
enum ra_class *classes = calloc(ctx->ssa_alloc, sizeof(enum ra_class));
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
unsigned v = I->dest[d].value;
|
||||
assert(widths[v] == 0 && "broken SSA");
|
||||
/* Round up vectors for easier live range splitting */
|
||||
widths[v] = bi_count_write_registers(I, d);
|
||||
classes[v] = ra_class_for_index(I->dest[d]);
|
||||
}
|
||||
}
|
||||
/* now that we know the rest of the sizes, find the sizes for PHI nodes */
|
||||
bi_foreach_block(ctx, block) {
|
||||
bi_foreach_phi_in_block(block, I) {
|
||||
if (I->dest[0].type != BI_INDEX_NORMAL)
|
||||
continue;
|
||||
unsigned idx = I->dest[0].value;
|
||||
widths[idx] = 1;
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
widths[idx] = MAX2(widths[idx], widths[I->src[s].value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Calculate demand at the start of each block based on live-in, then update
|
||||
* for each instruction processed. Calculate rolling maximum.
|
||||
*/
|
||||
unsigned max_demand = 0;
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
unsigned demand = reserved_size(ctx);
|
||||
|
||||
/* Everything live-in */
|
||||
{
|
||||
int i;
|
||||
BITSET_FOREACH_SET(i, block->ssa_live_in, ctx->ssa_alloc) {
|
||||
if (classes[i] == RA_GPR)
|
||||
demand += widths[i];
|
||||
}
|
||||
}
|
||||
|
||||
max_demand = MAX2(demand, max_demand);
|
||||
|
||||
/* To handle non-power-of-two vectors, sometimes live range splitting
|
||||
* needs extra registers for 1 instruction. This counter tracks the number
|
||||
* of registers to be freed after 1 extra instruction.
|
||||
*/
|
||||
unsigned late_kill_count = 0;
|
||||
|
||||
if (debug) {
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
bi_foreach_instr_in_block(block, I) {
|
||||
/* Phis happen in parallel and are already accounted for in the live-in
|
||||
* set, just skip them so we don't double count.
|
||||
*/
|
||||
if (I->op == BI_OPCODE_PHI)
|
||||
continue;
|
||||
|
||||
if (debug) {
|
||||
printf("%u: ", demand);
|
||||
bi_print_instr(I, stdout);
|
||||
}
|
||||
|
||||
/* Handle late-kill registers from last instruction */
|
||||
demand -= late_kill_count;
|
||||
late_kill_count = 0;
|
||||
|
||||
/* Kill sources the first time we see them */
|
||||
bi_foreach_src(I, s) {
|
||||
if (!I->src[s].kill_ssa)
|
||||
continue;
|
||||
assert(I->src[s].type == BI_INDEX_NORMAL);
|
||||
if (ra_class_for_index(I->src[s]) != RA_GPR)
|
||||
continue;
|
||||
|
||||
bool skip = false;
|
||||
|
||||
for (unsigned backwards = 0; backwards < s; ++backwards) {
|
||||
if (bi_is_equiv(I->src[backwards], I->src[s])) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!skip)
|
||||
demand -= widths[I->src[s].value];
|
||||
}
|
||||
|
||||
/* Make destinations live */
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
if (ra_class_for_index(I->dest[d]) != RA_GPR)
|
||||
continue;
|
||||
|
||||
/* Live range splits allocate at power-of-two granularity. Round up
|
||||
* destination sizes (temporarily) to powers-of-two.
|
||||
*/
|
||||
unsigned real_width = widths[I->dest[d].value];
|
||||
unsigned pot_width = util_next_power_of_two(real_width);
|
||||
|
||||
demand += pot_width;
|
||||
late_kill_count += (pot_width - real_width);
|
||||
}
|
||||
|
||||
max_demand = MAX2(demand, max_demand);
|
||||
}
|
||||
|
||||
demand -= late_kill_count;
|
||||
}
|
||||
|
||||
free(widths);
|
||||
free(classes);
|
||||
return max_demand;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright 2024 Valve Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "compiler.h"
|
||||
|
||||
void
|
||||
bi_reindex_ssa(bi_context *ctx)
|
||||
{
|
||||
unsigned *remap = calloc(ctx->ssa_alloc, sizeof(*remap));
|
||||
|
||||
ctx->ssa_alloc = 0;
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
assert(!remap[I->dest[d].value] && "input is SSA");
|
||||
remap[I->dest[d].value] = ctx->ssa_alloc++;
|
||||
I->dest[d].value = remap[I->dest[d].value];
|
||||
}
|
||||
}
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
I->src[s].value = remap[I->src[s].value];
|
||||
}
|
||||
}
|
||||
|
||||
free(remap);
|
||||
}
|
||||
@@ -0,0 +1,336 @@
|
||||
/*
|
||||
* Copyright 2023 Alyssa Rosenzweig
|
||||
* Copyright 2023 Valve Corporation
|
||||
* Copyright 2022 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/*
|
||||
* Implementation of "Simple and Efficient
|
||||
* Construction of Static Single Assignment Form", also by Braun et al.
|
||||
* https://link.springer.com/content/pdf/10.1007/978-3-642-37051-9_6.pdf
|
||||
*/
|
||||
|
||||
#include "util/hash_table.h"
|
||||
#include "util/ralloc.h"
|
||||
#include "util/u_dynarray.h"
|
||||
#include "bi_builder.h"
|
||||
#include "compiler.h"
|
||||
#include "bi_opcodes.h"
|
||||
|
||||
struct repair_block {
|
||||
/* For a loop header, whether phis operands have been added */
|
||||
bool sealed;
|
||||
|
||||
/* Sparse map: variable name -> bi_index.
|
||||
*
|
||||
* Definition of a variable at the end of the block.
|
||||
*/
|
||||
struct hash_table_u64 *defs;
|
||||
};
|
||||
|
||||
struct repair_ctx {
|
||||
bi_context *shader;
|
||||
|
||||
/* Number of variables */
|
||||
unsigned n;
|
||||
|
||||
/* Information on blocks indexed in source order */
|
||||
struct repair_block *blocks;
|
||||
};
|
||||
|
||||
static inline struct repair_block *
|
||||
repair_block(struct repair_ctx *ctx, bi_block *block)
|
||||
{
|
||||
return &ctx->blocks[block->index];
|
||||
}
|
||||
|
||||
static void
|
||||
record_write(struct repair_ctx *ctx, bi_block *block, unsigned node,
|
||||
bi_index val)
|
||||
{
|
||||
assert(node < ctx->n);
|
||||
|
||||
/* The value always gets used as a source, where we don't want the
|
||||
* destination "swizzle" and other modifiers that are applied on write.
|
||||
*/
|
||||
val.swizzle = BI_SWIZZLE_H01;
|
||||
val.neg = false;
|
||||
val.abs = false;
|
||||
|
||||
struct hash_table_u64 *defs = repair_block(ctx, block)->defs;
|
||||
_mesa_hash_table_u64_insert(defs, node,
|
||||
ralloc_memdup(defs, &val, sizeof(val)));
|
||||
}
|
||||
|
||||
static void add_phi_operands(struct repair_ctx *ctx, bi_block *block,
|
||||
bi_instr *phi, bi_index node);
|
||||
|
||||
static bi_index
|
||||
resolve_read(struct repair_ctx *ctx, bi_block *block, bi_index node)
|
||||
{
|
||||
struct repair_block *rb = repair_block(ctx, block);
|
||||
|
||||
/* Local value numbering */
|
||||
assert(node.type == BI_INDEX_NORMAL);
|
||||
bi_index *local = _mesa_hash_table_u64_search(rb->defs, node.value);
|
||||
|
||||
if (local) {
|
||||
assert(!bi_is_null(*local));
|
||||
return *local;
|
||||
}
|
||||
|
||||
/* Global value numbering. readValueRecursive in the paper */
|
||||
unsigned nr_preds = bi_num_predecessors(block);
|
||||
bi_index val;
|
||||
|
||||
assert(nr_preds > 0);
|
||||
|
||||
/* Loop headers are not in the "sealedBlock" set in the paper. To
|
||||
* handle, we insert an incomplete phi to be filled in after the rest of
|
||||
* the loop is processed.
|
||||
*/
|
||||
if (block->loop_header && !rb->sealed) {
|
||||
val = bi_temp_like(ctx->shader, node);
|
||||
bi_builder b = bi_init_builder(ctx->shader, bi_before_block(block));
|
||||
bi_instr *phi = bi_phi_to(&b, val, nr_preds);
|
||||
phi->shadow = true;
|
||||
|
||||
/* Stash the variable in for an intrusive incompletePhis map */
|
||||
phi->index = node.value + 1;
|
||||
} else if (nr_preds == 1) {
|
||||
/* No phi needed */
|
||||
bi_block *pred =
|
||||
*util_dynarray_element(&block->predecessors, bi_block *, 0);
|
||||
val = resolve_read(ctx, pred, node);
|
||||
} else {
|
||||
/* Insert phi first to break cycles */
|
||||
val = bi_temp_like(ctx->shader, node);
|
||||
bi_builder b = bi_init_builder(ctx->shader, bi_before_block(block));
|
||||
bi_instr *phi = bi_phi_to(&b, val, nr_preds);
|
||||
phi->shadow = true;
|
||||
record_write(ctx, block, node.value, val);
|
||||
add_phi_operands(ctx, block, phi, node);
|
||||
}
|
||||
|
||||
assert(!bi_is_null(val));
|
||||
assert(val.swizzle == BI_SWIZZLE_H01);
|
||||
record_write(ctx, block, node.value, val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void
|
||||
add_phi_operands(struct repair_ctx *ctx, bi_block *block, bi_instr *phi,
|
||||
bi_index node)
|
||||
{
|
||||
/* Add phi operands */
|
||||
bi_foreach_predecessor(block, pred) {
|
||||
unsigned s = bi_predecessor_index(block, *pred);
|
||||
phi->src[s] = resolve_read(ctx, *pred, node);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
seal_block(struct repair_ctx *ctx, bi_block *block)
|
||||
{
|
||||
bi_foreach_phi_in_block(block, phi) {
|
||||
/* We use phi->index as a sideband to pass the variable name. */
|
||||
if (phi->index) {
|
||||
bi_index var = bi_get_index(phi->index - 1);
|
||||
var.memory = phi->dest[0].memory;
|
||||
add_phi_operands(ctx, block, phi, var);
|
||||
phi->index = 0;
|
||||
}
|
||||
}
|
||||
|
||||
repair_block(ctx, block)->sealed = true;
|
||||
}
|
||||
|
||||
static void
|
||||
seal_loop_headers(struct repair_ctx *ctx, struct bi_block *exit)
|
||||
{
|
||||
bi_foreach_successor(exit, succ) {
|
||||
/* Only loop headers need to be sealed late */
|
||||
if (!succ->loop_header)
|
||||
continue;
|
||||
|
||||
/* Check if all predecessors have been processed */
|
||||
bool any_unprocessed = false;
|
||||
|
||||
bi_foreach_predecessor(succ, P) {
|
||||
if ((*P)->index > exit->index) {
|
||||
any_unprocessed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Seal once all predecessors are processed */
|
||||
if (!any_unprocessed)
|
||||
seal_block(ctx, succ);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
bi_opt_trivial_phi(bi_context *ctx)
|
||||
{
|
||||
bi_index *remap = calloc(ctx->ssa_alloc, sizeof(*remap));
|
||||
for (;;) {
|
||||
bool progress = false;
|
||||
memset(remap, 0, ctx->ssa_alloc * sizeof(*remap));
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
bi_foreach_phi_in_block_safe(block, phi) {
|
||||
bi_index same = bi_null();
|
||||
bool all_same = true;
|
||||
|
||||
bi_foreach_src(phi, s) {
|
||||
const bi_index src = phi->src[s];
|
||||
/* TODO: Handle cycles faster */
|
||||
if (bi_is_ssa(src) && !bi_is_null(remap[src.value])) {
|
||||
all_same = false;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Same value or self-reference */
|
||||
if (bi_is_equiv(src, same) ||
|
||||
bi_is_equiv(src, phi->dest[0]))
|
||||
continue;
|
||||
|
||||
if (!bi_is_null(same)) {
|
||||
all_same = false;
|
||||
break;
|
||||
}
|
||||
|
||||
same = src;
|
||||
}
|
||||
|
||||
/* Only optimize trivial phis with normal sources. It is possible
|
||||
* to optimize something like `phi #0, #0` but...
|
||||
*
|
||||
* 1. It would inadvently propagate constants which may be invalid.
|
||||
* Copyprop knows the rules for this, but we don't here.
|
||||
*
|
||||
* 2. These trivial phis should be optimized at the NIR level. This
|
||||
* pass is just to clean up spilling.
|
||||
*
|
||||
* So skip them for correctness in case NIR misses something (which
|
||||
* can happen depending on pass order).
|
||||
*/
|
||||
if (all_same && same.type == BI_INDEX_NORMAL) {
|
||||
remap[phi->dest[0].value] = same;
|
||||
bi_remove_instruction(phi);
|
||||
progress = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!progress)
|
||||
break;
|
||||
|
||||
bi_foreach_instr_global(ctx, I) {
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
if (!bi_is_null(remap[I->src[s].value])) {
|
||||
bi_replace_src(I, s, remap[I->src[s].value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(remap);
|
||||
}
|
||||
|
||||
void
|
||||
bi_repair_ssa(bi_context *ctx)
|
||||
{
|
||||
struct repair_block *blocks =
|
||||
rzalloc_array(NULL, struct repair_block, ctx->num_blocks);
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
struct repair_block *rb = &blocks[block->index];
|
||||
rb->defs = _mesa_hash_table_u64_create(blocks);
|
||||
}
|
||||
|
||||
unsigned n = ctx->ssa_alloc;
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
struct repair_ctx rctx = {
|
||||
.shader = ctx,
|
||||
.n = n,
|
||||
.blocks = blocks,
|
||||
};
|
||||
|
||||
bi_foreach_instr_in_block(block, I) {
|
||||
/* Repair SSA for the instruction */
|
||||
if (I->op != BI_OPCODE_PHI) {
|
||||
bi_foreach_ssa_src(I, s) {
|
||||
assert(I->src[s].value < n);
|
||||
bi_replace_src(I, s, resolve_read(&rctx, block, I->src[s]));
|
||||
}
|
||||
}
|
||||
|
||||
bi_foreach_ssa_dest(I, d) {
|
||||
unsigned handle = I->dest[d].value;
|
||||
|
||||
/* Skip phis that we just created when processing loops */
|
||||
if (handle >= n) {
|
||||
assert(I->op == BI_OPCODE_PHI);
|
||||
continue;
|
||||
}
|
||||
|
||||
I->dest[d] =
|
||||
bi_replace_index(I->dest[d], bi_temp_like(ctx, I->dest[d]));
|
||||
|
||||
record_write(&rctx, block, handle, I->dest[d]);
|
||||
}
|
||||
}
|
||||
|
||||
seal_loop_headers(&rctx, block);
|
||||
}
|
||||
|
||||
bi_foreach_block(ctx, block) {
|
||||
bi_foreach_phi_in_block(block, phi) {
|
||||
/* The kill bit is invalid (and meaningless) for phis. Liveness
|
||||
* analysis does not produce it. However, we're ingesting broken SSA
|
||||
* where we can have random kill bits set on phis. Strip them as part
|
||||
* of the SSA repair.
|
||||
*
|
||||
* The register allocator depends on this for correctness.
|
||||
*/
|
||||
phi->dest[0].kill_ssa = false;
|
||||
|
||||
bi_foreach_src(phi, s) {
|
||||
phi->src[s].kill_ssa = false;
|
||||
}
|
||||
|
||||
/* Skip the phis that we just created */
|
||||
if (phi->shadow) {
|
||||
phi->shadow = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
bi_foreach_ssa_src(phi, s) {
|
||||
/* Phis (uniquely) read their sources in their corresponding
|
||||
* predecessors, so chain through for that.
|
||||
*/
|
||||
bi_block *read_block =
|
||||
*util_dynarray_element(&block->predecessors, bi_block *, s);
|
||||
|
||||
assert(phi->src[s].value < n);
|
||||
|
||||
struct repair_ctx rctx = {
|
||||
.shader = ctx,
|
||||
.n = n,
|
||||
.blocks = blocks,
|
||||
};
|
||||
|
||||
bi_replace_src(phi, s,
|
||||
resolve_read(&rctx, read_block, phi->src[s]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ralloc_free(blocks);
|
||||
|
||||
bi_opt_trivial_phi(ctx);
|
||||
bi_reindex_ssa(ctx);
|
||||
}
|
||||
Loaded 100 of 12511 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user