mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-05 06:00:36 +02:00
llvmpipe: added stencil ref values to jit context state
This commit is contained in:
parent
6379e47ebd
commit
eee5114797
5 changed files with 48 additions and 19 deletions
|
|
@ -91,17 +91,18 @@ lp_jit_init_globals(struct llvmpipe_screen *screen)
|
|||
|
||||
/* struct lp_jit_context */
|
||||
{
|
||||
LLVMTypeRef elem_types[8];
|
||||
LLVMTypeRef elem_types[9];
|
||||
LLVMTypeRef context_type;
|
||||
|
||||
elem_types[0] = LLVMPointerType(LLVMFloatType(), 0); /* constants */
|
||||
elem_types[1] = LLVMFloatType(); /* alpha_ref_value */
|
||||
elem_types[2] = LLVMFloatType(); /* scissor_xmin */
|
||||
elem_types[3] = LLVMFloatType(); /* scissor_ymin */
|
||||
elem_types[4] = LLVMFloatType(); /* scissor_xmax */
|
||||
elem_types[5] = LLVMFloatType(); /* scissor_ymax */
|
||||
elem_types[6] = LLVMPointerType(LLVMInt8Type(), 0); /* blend_color */
|
||||
elem_types[7] = LLVMArrayType(texture_type, PIPE_MAX_SAMPLERS); /* textures */
|
||||
elem_types[2] = LLVMArrayType(LLVMInt8Type(), 2); /* stencil_refs */
|
||||
elem_types[3] = LLVMFloatType(); /* scissor_xmin */
|
||||
elem_types[4] = LLVMFloatType(); /* scissor_ymin */
|
||||
elem_types[5] = LLVMFloatType(); /* scissor_xmax */
|
||||
elem_types[6] = LLVMFloatType(); /* scissor_ymax */
|
||||
elem_types[7] = LLVMPointerType(LLVMInt8Type(), 0); /* blend_color */
|
||||
elem_types[8] = LLVMArrayType(texture_type, PIPE_MAX_SAMPLERS); /* textures */
|
||||
|
||||
context_type = LLVMStructType(elem_types, Elements(elem_types), 0);
|
||||
|
||||
|
|
@ -109,16 +110,18 @@ lp_jit_init_globals(struct llvmpipe_screen *screen)
|
|||
screen->target, context_type, 0);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, alpha_ref_value,
|
||||
screen->target, context_type, 1);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_xmin,
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, stencil_ref,
|
||||
screen->target, context_type, 2);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_ymin,
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_xmin,
|
||||
screen->target, context_type, 3);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_xmax,
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_ymin,
|
||||
screen->target, context_type, 4);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_ymax,
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_xmax,
|
||||
screen->target, context_type, 5);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, blend_color,
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, scissor_ymax,
|
||||
screen->target, context_type, 6);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, blend_color,
|
||||
screen->target, context_type, 7);
|
||||
LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, textures,
|
||||
screen->target, context_type,
|
||||
LP_JIT_CONTEXT_TEXTURES_INDEX);
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ struct lp_jit_context
|
|||
|
||||
float alpha_ref_value;
|
||||
|
||||
ubyte stencil_ref[2];
|
||||
|
||||
/** floats, not ints */
|
||||
float scissor_xmin, scissor_ymin, scissor_xmax, scissor_ymax;
|
||||
|
||||
|
|
@ -100,22 +102,25 @@ struct lp_jit_context
|
|||
#define lp_jit_context_alpha_ref_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 1, "alpha_ref_value")
|
||||
|
||||
#define lp_jit_context_stencil_ref_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 2, "stencil_ref_values")
|
||||
|
||||
#define lp_jit_context_scissor_xmin_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 2, "scissor_xmin")
|
||||
lp_build_struct_get(_builder, _ptr, 3, "scissor_xmin")
|
||||
|
||||
#define lp_jit_context_scissor_ymin_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 3, "scissor_ymin")
|
||||
lp_build_struct_get(_builder, _ptr, 4, "scissor_ymin")
|
||||
|
||||
#define lp_jit_context_scissor_xmax_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 4, "scissor_xmax")
|
||||
lp_build_struct_get(_builder, _ptr, 5, "scissor_xmax")
|
||||
|
||||
#define lp_jit_context_scissor_ymax_value(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 5, "scissor_ymax")
|
||||
lp_build_struct_get(_builder, _ptr, 6, "scissor_ymax")
|
||||
|
||||
#define lp_jit_context_blend_color(_builder, _ptr) \
|
||||
lp_build_struct_get(_builder, _ptr, 6, "blend_color")
|
||||
lp_build_struct_get(_builder, _ptr, 7, "blend_color")
|
||||
|
||||
#define LP_JIT_CONTEXT_TEXTURES_INDEX 7
|
||||
#define LP_JIT_CONTEXT_TEXTURES_INDEX 8
|
||||
|
||||
#define lp_jit_context_textures(_builder, _ptr) \
|
||||
lp_build_struct_get_ptr(_builder, _ptr, LP_JIT_CONTEXT_TEXTURES_INDEX, "textures")
|
||||
|
|
|
|||
|
|
@ -401,6 +401,20 @@ lp_setup_set_alpha_ref_value( struct lp_setup_context *setup,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
lp_setup_set_stencil_ref_values( struct lp_setup_context *setup,
|
||||
const ubyte refs[2] )
|
||||
{
|
||||
LP_DBG(DEBUG_SETUP, "%s %d %d\n", __FUNCTION__, refs[0], refs[1]);
|
||||
|
||||
if (setup->fs.current.jit_context.stencil_ref[0] != refs[0] ||
|
||||
setup->fs.current.jit_context.stencil_ref[1] != refs[1]) {
|
||||
setup->fs.current.jit_context.stencil_ref[0] = refs[0];
|
||||
setup->fs.current.jit_context.stencil_ref[1] = refs[1];
|
||||
setup->dirty |= LP_SETUP_NEW_FS;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
lp_setup_set_blend_color( struct lp_setup_context *setup,
|
||||
const struct pipe_blend_color *blend_color )
|
||||
|
|
|
|||
|
|
@ -112,6 +112,10 @@ void
|
|||
lp_setup_set_alpha_ref_value( struct lp_setup_context *setup,
|
||||
float alpha_ref_value );
|
||||
|
||||
void
|
||||
lp_setup_set_stencil_ref_values( struct lp_setup_context *setup,
|
||||
const ubyte refs[2] );
|
||||
|
||||
void
|
||||
lp_setup_set_blend_color( struct lp_setup_context *setup,
|
||||
const struct pipe_blend_color *blend_color );
|
||||
|
|
|
|||
|
|
@ -174,9 +174,12 @@ void llvmpipe_update_derived( struct llvmpipe_context *llvmpipe )
|
|||
if (llvmpipe->dirty & LP_NEW_SCISSOR)
|
||||
lp_setup_set_scissor(llvmpipe->setup, &llvmpipe->scissor);
|
||||
|
||||
if (llvmpipe->dirty & LP_NEW_DEPTH_STENCIL_ALPHA)
|
||||
if (llvmpipe->dirty & LP_NEW_DEPTH_STENCIL_ALPHA) {
|
||||
lp_setup_set_alpha_ref_value(llvmpipe->setup,
|
||||
llvmpipe->depth_stencil->alpha.ref_value);
|
||||
lp_setup_set_stencil_ref_values(llvmpipe->setup,
|
||||
llvmpipe->stencil_ref.ref_value);
|
||||
}
|
||||
|
||||
if (llvmpipe->dirty & LP_NEW_CONSTANTS)
|
||||
lp_setup_set_fs_constants(llvmpipe->setup,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue