diff options
author | Dave Airlie <airlied@redhat.com> | 2021-02-08 11:40:19 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2021-07-21 10:19:51 +1000 |
commit | 4366a77daeaffab87747f13e9a7d379f37a0e352 (patch) | |
tree | 930b2ee2cc123ca922efb7c6dcb27ea99137560e /src/gallium/auxiliary/draw | |
parent | 848d4e7e4361fc39a687be3d218515214edf428e (diff) |
draw: add shader access to aniso filter table.
This allows the draw shaders to access the global filter table
vis the context ptr.
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8804>
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_llvm.c | 19 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_llvm.h | 28 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c | 5 |
3 files changed, 46 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 05d2390ee13..0ad58a4d337 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -332,6 +332,7 @@ create_jit_context_type(struct gallivm_state *gallivm, LP_MAX_TGSI_SHADER_BUFFERS); elem_types[8] = LLVMArrayType(int_type, /* num_vs_ssbos */ LP_MAX_TGSI_SHADER_BUFFERS); + elem_types[9] = LLVMPointerType(float_type, 0); /* aniso table */ context_type = LLVMStructTypeInContext(gallivm->context, elem_types, ARRAY_SIZE(elem_types), 0); @@ -356,6 +357,8 @@ create_jit_context_type(struct gallivm_state *gallivm, target, context_type, DRAW_JIT_CTX_SSBOS); LP_CHECK_MEMBER_OFFSET(struct draw_jit_context, num_vs_ssbos, target, context_type, DRAW_JIT_CTX_NUM_SSBOS); + LP_CHECK_MEMBER_OFFSET(struct draw_jit_context, aniso_filter_table, + target, context_type, DRAW_JIT_CTX_ANISO_FILTER_TABLE); LP_CHECK_STRUCT_SIZE(struct draw_jit_context, target, context_type); @@ -403,7 +406,7 @@ create_gs_jit_context_type(struct gallivm_state *gallivm, LP_MAX_TGSI_SHADER_BUFFERS); elem_types[11] = LLVMArrayType(int_type, /* num_ssbos */ LP_MAX_TGSI_SHADER_BUFFERS); - + elem_types[12] = LLVMPointerType(float_type, 0); /* aniso table */ context_type = LLVMStructTypeInContext(gallivm->context, elem_types, ARRAY_SIZE(elem_types), 0); @@ -437,6 +440,8 @@ create_gs_jit_context_type(struct gallivm_state *gallivm, target, context_type, DRAW_GS_JIT_CTX_NUM_SSBOS); LP_CHECK_MEMBER_OFFSET(struct draw_gs_jit_context, images, target, context_type, DRAW_GS_JIT_CTX_IMAGES); + LP_CHECK_MEMBER_OFFSET(struct draw_gs_jit_context, aniso_filter_table, + target, context_type, DRAW_GS_JIT_CTX_ANISO_FILTER_TABLE); LP_CHECK_STRUCT_SIZE(struct draw_gs_jit_context, target, context_type); @@ -575,7 +580,7 @@ create_tcs_jit_context_type(struct gallivm_state *gallivm, LP_MAX_TGSI_SHADER_BUFFERS); elem_types[8] = LLVMArrayType(int_type, /* num_ssbos */ LP_MAX_TGSI_SHADER_BUFFERS); - + elem_types[9] = LLVMPointerType(float_type, 0); /* aniso table */ context_type = LLVMStructTypeInContext(gallivm->context, elem_types, ARRAY_SIZE(elem_types), 0); @@ -596,6 +601,8 @@ create_tcs_jit_context_type(struct gallivm_state *gallivm, target, context_type, DRAW_TCS_JIT_CTX_NUM_SSBOS); LP_CHECK_MEMBER_OFFSET(struct draw_tcs_jit_context, images, target, context_type, DRAW_TCS_JIT_CTX_IMAGES); + LP_CHECK_MEMBER_OFFSET(struct draw_tcs_jit_context, aniso_filter_table, + target, context_type, DRAW_TCS_JIT_CTX_ANISO_FILTER_TABLE); LP_CHECK_STRUCT_SIZE(struct draw_tcs_jit_context, target, context_type); @@ -675,7 +682,7 @@ create_tes_jit_context_type(struct gallivm_state *gallivm, LP_MAX_TGSI_SHADER_BUFFERS); elem_types[8] = LLVMArrayType(int_type, /* num_ssbos */ LP_MAX_TGSI_SHADER_BUFFERS); - + elem_types[9] = LLVMPointerType(float_type, 0); /* aniso table */ context_type = LLVMStructTypeInContext(gallivm->context, elem_types, ARRAY_SIZE(elem_types), 0); @@ -696,6 +703,8 @@ create_tes_jit_context_type(struct gallivm_state *gallivm, target, context_type, DRAW_TCS_JIT_CTX_NUM_SSBOS); LP_CHECK_MEMBER_OFFSET(struct draw_tes_jit_context, images, target, context_type, DRAW_TCS_JIT_CTX_IMAGES); + LP_CHECK_MEMBER_OFFSET(struct draw_tcs_jit_context, aniso_filter_table, + target, context_type, DRAW_TCS_JIT_CTX_ANISO_FILTER_TABLE); LP_CHECK_STRUCT_SIZE(struct draw_tes_jit_context, target, context_type); @@ -967,6 +976,7 @@ generate_vs(struct draw_llvm_variant *variant, params.ssbo_ptr = ssbos_ptr; params.ssbo_sizes_ptr = num_ssbos_ptr; params.image = draw_image; + params.aniso_filter_table = draw_jit_context_aniso_filter_table(variant->gallivm, context_ptr); if (llvm->draw->vs.vertex_shader->state.ir.nir && llvm->draw->vs.vertex_shader->state.type == PIPE_SHADER_IR_NIR) @@ -2869,6 +2879,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm, params.ssbo_sizes_ptr = num_ssbos_ptr; params.image = image; params.gs_vertex_streams = variant->shader->base.num_vertex_streams; + params.aniso_filter_table = draw_gs_jit_context_aniso_filter_table(gallivm, context_ptr); if (llvm->draw->gs.geometry_shader->state.type == PIPE_SHADER_IR_TGSI) lp_build_tgsi_soa(variant->gallivm, @@ -3523,6 +3534,7 @@ draw_tcs_llvm_generate(struct draw_llvm *llvm, params.image = image; params.coro = &coro_info; params.tcs_iface = &tcs_iface.base; + params.aniso_filter_table = draw_tcs_jit_context_aniso_filter_table(gallivm, context_ptr); lp_build_nir_soa(variant->gallivm, llvm->draw->tcs.tess_ctrl_shader->state.ir.nir, @@ -4045,6 +4057,7 @@ draw_tes_llvm_generate(struct draw_llvm *llvm, params.ssbo_sizes_ptr = num_ssbos_ptr; params.image = image; params.tes_iface = &tes_iface.base; + params.aniso_filter_table = draw_tes_jit_context_aniso_filter_table(variant->gallivm, context_ptr); lp_build_nir_soa(variant->gallivm, llvm->draw->tes.tess_eval_shader->state.ir.nir, diff --git a/src/gallium/auxiliary/draw/draw_llvm.h b/src/gallium/auxiliary/draw/draw_llvm.h index bafb71ed8a6..5224817bb67 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.h +++ b/src/gallium/auxiliary/draw/draw_llvm.h @@ -168,6 +168,8 @@ struct draw_jit_context const uint32_t *vs_ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; int num_vs_ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; + + const float *aniso_filter_table; }; enum { @@ -180,6 +182,7 @@ enum { DRAW_JIT_CTX_IMAGES = 6, DRAW_JIT_CTX_SSBOS = 7, DRAW_JIT_CTX_NUM_SSBOS = 8, + DRAW_JIT_CTX_ANISO_FILTER_TABLE = 9, DRAW_JIT_CTX_NUM_FIELDS }; @@ -210,6 +213,9 @@ enum { #define draw_jit_context_num_vs_ssbos(_gallivm, _ptr) \ lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_CTX_NUM_SSBOS, "num_vs_ssbos") +#define draw_jit_context_aniso_filter_table(_gallivm, _ptr) \ + lp_build_struct_get(_gallivm, _ptr, DRAW_JIT_CTX_ANISO_FILTER_TABLE, "aniso_filter_table") + #define draw_jit_header_id(_gallivm, _ptr) \ lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_VERTEX_VERTEX_ID, "id") @@ -270,6 +276,7 @@ struct draw_gs_jit_context const uint32_t *ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; int num_ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; + const float *aniso_filter_table; }; enum { @@ -289,7 +296,8 @@ enum { DRAW_GS_JIT_CTX_EMITTED_PRIMS = 9, DRAW_GS_JIT_CTX_SSBOS = 10, DRAW_GS_JIT_CTX_NUM_SSBOS = 11, - DRAW_GS_JIT_CTX_NUM_FIELDS = 12 + DRAW_GS_JIT_CTX_ANISO_FILTER_TABLE = 12, + DRAW_GS_JIT_CTX_NUM_FIELDS = 13 }; #define draw_gs_jit_context_constants(_gallivm, _ptr) \ @@ -328,6 +336,8 @@ enum { #define draw_gs_jit_context_num_ssbos(_gallivm, _ptr) \ lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_GS_JIT_CTX_NUM_SSBOS, "num_ssbos") +#define draw_gs_jit_context_aniso_filter_table(_gallivm, _ptr) \ + lp_build_struct_get(_gallivm, _ptr, DRAW_GS_JIT_CTX_ANISO_FILTER_TABLE, "aniso_filter_table") struct draw_tcs_jit_context { const float *constants[LP_MAX_TGSI_CONST_BUFFERS]; @@ -343,6 +353,8 @@ struct draw_tcs_jit_context { const uint32_t *ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; int num_ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; + + const float *aniso_filter_table; }; enum { @@ -353,7 +365,8 @@ enum { DRAW_TCS_JIT_CTX_IMAGES = DRAW_JIT_CTX_IMAGES, DRAW_TCS_JIT_CTX_SSBOS = 7, DRAW_TCS_JIT_CTX_NUM_SSBOS = 8, - DRAW_TCS_JIT_CTX_NUM_FIELDS = 9, + DRAW_TCS_JIT_CTX_ANISO_FILTER_TABLE = 9, + DRAW_TCS_JIT_CTX_NUM_FIELDS = 10, }; #define draw_tcs_jit_context_constants(_gallivm, _ptr) \ @@ -377,6 +390,9 @@ enum { #define draw_tcs_jit_context_num_ssbos(_gallivm, _ptr) \ lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_TCS_JIT_CTX_NUM_SSBOS, "num_ssbos") +#define draw_tcs_jit_context_aniso_filter_table(_gallivm, _ptr) \ + lp_build_struct_get(_gallivm, _ptr, DRAW_TCS_JIT_CTX_ANISO_FILTER_TABLE, "aniso_filter_table") + struct draw_tes_jit_context { const float *constants[LP_MAX_TGSI_CONST_BUFFERS]; int num_constants[LP_MAX_TGSI_CONST_BUFFERS]; @@ -391,6 +407,8 @@ struct draw_tes_jit_context { const uint32_t *ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; int num_ssbos[LP_MAX_TGSI_SHADER_BUFFERS]; + + const float *aniso_filter_table; }; enum { @@ -401,7 +419,8 @@ enum { DRAW_TES_JIT_CTX_IMAGES = DRAW_JIT_CTX_IMAGES, DRAW_TES_JIT_CTX_SSBOS = 7, DRAW_TES_JIT_CTX_NUM_SSBOS = 8, - DRAW_TES_JIT_CTX_NUM_FIELDS = 9, + DRAW_TES_JIT_CTX_ANISO_FILTER_TABLE = 9, + DRAW_TES_JIT_CTX_NUM_FIELDS = 10, }; #define draw_tes_jit_context_constants(_gallivm, _ptr) \ @@ -425,6 +444,9 @@ enum { #define draw_tes_jit_context_num_ssbos(_gallivm, _ptr) \ lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_TES_JIT_CTX_NUM_SSBOS, "num_ssbos") +#define draw_tes_jit_context_aniso_filter_table(_gallivm, _ptr) \ + lp_build_struct_get(_gallivm, _ptr, DRAW_TES_JIT_CTX_ANISO_FILTER_TABLE, "aniso_filter_table") + typedef boolean (*draw_jit_vert_func)(struct draw_jit_context *context, struct vertex_header *io, diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index 88cd954a1b9..ee804003c63 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -527,6 +527,11 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle) llvm->jit_context.viewports = draw->viewports; llvm->gs_jit_context.viewports = draw->viewports; + + llvm->jit_context.aniso_filter_table = lp_build_sample_aniso_filter_table(); + llvm->gs_jit_context.aniso_filter_table = lp_build_sample_aniso_filter_table(); + llvm->tcs_jit_context.aniso_filter_table = lp_build_sample_aniso_filter_table(); + llvm->tes_jit_context.aniso_filter_table = lp_build_sample_aniso_filter_table(); } |