From cc8219d1b4b20f94ad049b2165b2888aab8aebb2 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Wed, 22 Dec 2021 16:06:25 -0800 Subject: [PATCH] d3d12: Enable compute Reviewed-by: Sil Vilerino Part-of: --- .../drivers/d3d12/ci/d3d12-quick_gl.txt | 28 ++---------- .../drivers/d3d12/ci/d3d12-quick_shader.txt | 45 +------------------ src/gallium/drivers/d3d12/d3d12_screen.cpp | 36 +++++++++++++-- 3 files changed, 38 insertions(+), 71 deletions(-) diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt index 864c8905449..210b00d502d 100644 --- a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt +++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt @@ -300,7 +300,6 @@ spec/!opengl 2.0/vertex-program-two-side/tcs-out, tes and fs: skip spec/!opengl 2.0/vertex-program-two-side/tes-out and fs: skip spec/!opengl 2.0/vertex-program-two-side/vs, tcs, tes and fs: skip spec/!opengl 3.0/bound-resource-limits: fail -spec/!opengl 3.0/clearbuffer-depth-cs-probe: skip spec/!opengl 3.0/required-sized-texture-formats: fail spec/!opengl 3.1/default-vao: fail spec/!opengl 3.1/genned-names: fail @@ -437,19 +436,7 @@ spec/arb_clear_texture/arb_clear_texture-texview: skip spec/arb_clip_control/arb_clip_control-clip-control: skip spec/arb_clip_control/arb_clip_control-depth-precision: skip spec/arb_clip_control/arb_clip_control-viewport: skip -spec/arb_compute_shader/api_errors: skip -spec/arb_compute_shader/built-in constants: skip -spec/arb_compute_shader/compiler/work_group_size_too_large: skip spec/arb_compute_shader/compute-and-render-bug-109630: skip -spec/arb_compute_shader/display-list: skip -spec/arb_compute_shader/indirect-compute: skip -spec/arb_compute_shader/local-id-explosion: skip -spec/arb_compute_shader/minmax: skip -spec/arb_compute_shader/render-and-compute: skip -spec/arb_compute_shader/zero-dispatch-size: skip -spec/arb_compute_variable_group_size/errors: skip -spec/arb_compute_variable_group_size/local-size: skip -spec/arb_compute_variable_group_size/minmax: skip spec/arb_copy_image/arb_copy_image-api_errors: skip spec/arb_copy_image/arb_copy_image-format-swizzle: skip spec/arb_copy_image/arb_copy_image-formats: skip @@ -550,7 +537,6 @@ spec/arb_depth_buffer_float/depthstencil-render-miplevels 585 d=z32f_s8_s=z24_s8 spec/arb_depth_buffer_float/depthstencil-render-miplevels 585 d=z32f_s=z24_s8: skip spec/arb_depth_buffer_float/depthstencil-render-miplevels 585 s=z24_s8_d=z32f: skip spec/arb_depth_buffer_float/depthstencil-render-miplevels 585 s=z24_s8_d=z32f_s8: skip -spec/arb_direct_state_access/create-programpipelines/default compute shader program == 0: skip spec/arb_direct_state_access/create-programpipelines/default tcs == 0: skip spec/arb_direct_state_access/create-programpipelines/default tes == 0: skip spec/arb_direct_state_access/create-transformfeedbacks: skip @@ -1862,19 +1848,13 @@ spec/arb_post_depth_coverage/arb_post_depth_coverage-multisampling: skip spec/arb_post_depth_coverage/arb_post_depth_coverage-sample-shading: skip spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceindex/'vs_input2' on gl_program_input: fail spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceindex/'vs_input2[1][0]' on gl_program_input: fail -spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceiv/compute on gl_compute_subroutine_uniform: skip spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceiv/tcs_patch on gl_program_output: skip spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceiv/tess_control on gl_tess_control_subroutine_uniform: skip -spec/arb_program_interface_query/arb_program_interface_query-resource-location/test_subroutine_stages_compute: skip spec/arb_program_interface_query/arb_program_interface_query-resource-location/test_subroutine_stages_tcs_tes: skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_compute_subroutine: skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_compute_subroutine_uniform: skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_input(cs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_input(tcs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_input(tcs,tes): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_input(tes): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_input(vs,tcs,tes): skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_output(cs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_output(tcs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_output(tcs,tes): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_program_output(tcs,tes,gs): skip @@ -1883,9 +1863,7 @@ spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_t spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_tess_control_subroutine_uniform: skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_tess_evaluation_subroutine: skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_tess_evaluation_subroutine_uniform: skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_uniform(cs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_uniform(tes,tcs): skip -spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_uniform_block(cs): skip spec/arb_program_interface_query/arb_program_interface_query-resource-query/gl_uniform_block(tcs,tes): skip spec/arb_query_buffer_object/coherency: skip spec/arb_query_buffer_object/qbo: skip @@ -4330,10 +4308,10 @@ wgl/wgl-sanity: skip summary: name: results ---- -------- - pass: 15927 + pass: 15979 fail: 1200 crash: 68 - skip: 3041 + skip: 3019 timeout: 0 warn: 10 incomplete: 0 @@ -4342,4 +4320,4 @@ summary: changes: 0 fixes: 0 regressions: 0 - total: 20256 + total: 20286 diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt index a464f898510..2e68e8ea67a 100644 --- a/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt +++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt @@ -124,47 +124,7 @@ spec/arb_bindless_texture/linker/global_bindless_sampler_and_bindless_image: ski spec/arb_bindless_texture/linker/global_bindless_sampler_and_bound_image: skip spec/arb_bindless_texture/linker/global_bindless_sampler_and_bound_sampler: skip spec/arb_bindless_texture/linker/global_bound_sampler_and_bound_image: skip -spec/arb_compute_shader/execution/atomic-counter: skip -spec/arb_compute_shader/execution/basic-global-id: skip -spec/arb_compute_shader/execution/basic-group-id: skip -spec/arb_compute_shader/execution/basic-group-id-x: skip -spec/arb_compute_shader/execution/basic-group-id-y: skip -spec/arb_compute_shader/execution/basic-group-id-z: skip -spec/arb_compute_shader/execution/basic-local-id-atomic: skip -spec/arb_compute_shader/execution/basic-local-index: skip -spec/arb_compute_shader/execution/basic-ssbo: skip -spec/arb_compute_shader/execution/basic-texelfetch: skip -spec/arb_compute_shader/execution/basic-uniform-access: skip -spec/arb_compute_shader/execution/basic-uniform-access-atomic: skip -spec/arb_compute_shader/execution/border-color: skip spec/arb_compute_shader/execution/min-dvec4-double-large-group-size: skip -spec/arb_compute_shader/execution/multiple-texture-reading: skip -spec/arb_compute_shader/execution/multiple-workgroups: skip -spec/arb_compute_shader/execution/separate-global-id: skip -spec/arb_compute_shader/execution/separate-global-id-2: skip -spec/arb_compute_shader/execution/shared-atomicadd-int: skip -spec/arb_compute_shader/execution/shared-atomiccompswap-int: skip -spec/arb_compute_shader/execution/shared-atomicexchange-int: skip -spec/arb_compute_shader/execution/shared-atomicmax-int: skip -spec/arb_compute_shader/execution/shared-atomicmax-uint: skip -spec/arb_compute_shader/execution/shared-atomicmin-int: skip -spec/arb_compute_shader/execution/shared-atomicmin-uint: skip -spec/arb_compute_shader/execution/shared-atomics: skip -spec/arb_compute_shader/execution/simple-barrier: skip -spec/arb_compute_shader/execution/simple-barrier-atomics: skip -spec/arb_compute_shader/linker/bug-93840: skip -spec/arb_compute_shader/linker/matched_local_work_sizes: skip -spec/arb_compute_shader/linker/mismatched_local_work_sizes: skip -spec/arb_compute_shader/linker/mix_compute_and_non_compute: skip -spec/arb_compute_shader/linker/no_local_work_size: skip -spec/arb_compute_shader/linker/one_local_work_size: skip -spec/arb_compute_variable_group_size/execution/basic-local-size: skip -spec/arb_compute_variable_group_size/execution/fixed-local-size: skip -spec/arb_compute_variable_group_size/execution/global-invocation-id: skip -spec/arb_compute_variable_group_size/execution/separate-global-id: skip -spec/arb_compute_variable_group_size/execution/separate-global-id-2: skip -spec/arb_compute_variable_group_size/linker/mixed_fixed_variable_local_work_size: skip -spec/arb_compute_variable_group_size/linker/no_local_size_specified: skip spec/arb_cull_distance/basic-cull-1: skip spec/arb_cull_distance/basic-cull-2: skip spec/arb_cull_distance/basic-cull-3: skip @@ -7741,7 +7701,6 @@ spec/glsl-1.50/execution/geometry/max-input-components: crash spec/glsl-1.50/execution/geometry/primitive-id-out: fail spec/glsl-1.50/execution/geometry/vs-gs-max-in-out-components: crash spec/glsl-1.50/execution/gs-also-uses-smooth-flat-noperspective: fail -spec/glsl-1.50/execution/out-of-ssa-dfs-pre-order: skip spec/glsl-1.50/execution/primitive-id-no-gs: fail spec/glsl-1.50/execution/primitive-id-no-gs-instanced: fail spec/glsl-1.50/execution/primitive-id-no-gs-line: fail @@ -13027,10 +12986,10 @@ spec/oes_viewport_array/viewport-gs-writes-out-of-range: skip summary: name: results ---- -------- - pass: 7218 + pass: 7259 fail: 58 crash: 23 - skip: 12920 + skip: 12879 timeout: 0 warn: 25 incomplete: 0 diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 27253cffa81..8cd58773bc8 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -187,10 +187,8 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: return 330; -#if 0 /* TODO: Enable me */ case PIPE_CAP_COMPUTE: - return 0; -#endif + return 1; case PIPE_CAP_TEXTURE_MULTISAMPLE: return 1; @@ -468,6 +466,37 @@ d3d12_get_shader_param(struct pipe_screen *pscreen, } } +static int +d3d12_get_compute_param(struct pipe_screen *pscreen, + enum pipe_shader_ir ir, + enum pipe_compute_cap cap, + void *ret) +{ + switch (cap) { + case PIPE_COMPUTE_CAP_MAX_GRID_SIZE: { + uint64_t *grid = (uint64_t *)ret; + grid[0] = grid[1] = grid[2] = D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION; + return sizeof(uint64_t) * 3; + } + case PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE: { + uint64_t *block = (uint64_t *)ret; + block[0] = D3D12_CS_THREAD_GROUP_MAX_X; + block[1] = D3D12_CS_THREAD_GROUP_MAX_Y; + block[2] = D3D12_CS_THREAD_GROUP_MAX_Z; + return sizeof(uint64_t) * 3; + } + case PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK: + case PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK: + *(uint64_t *)ret = D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP; + return sizeof(uint64_t); + case PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE: + *(uint64_t *)ret = D3D12_CS_TGSM_REGISTER_COUNT /*DWORDs*/ * 4; + return sizeof(uint64_t); + default: + return 0; + } +} + static bool d3d12_is_format_supported(struct pipe_screen *pscreen, enum pipe_format format, @@ -992,6 +1021,7 @@ d3d12_init_screen(struct d3d12_screen *screen, struct sw_winsys *winsys, IUnknow screen->base.get_param = d3d12_get_param; screen->base.get_paramf = d3d12_get_paramf; screen->base.get_shader_param = d3d12_get_shader_param; + screen->base.get_compute_param = d3d12_get_compute_param; screen->base.is_format_supported = d3d12_is_format_supported; screen->base.get_compiler_options = d3d12_get_compiler_options; screen->base.context_create = d3d12_context_create;