Module: Mesa
Branch: master
Commit: 67b82fc395fc9972fc08233044057ab540c7ab59
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=67b82fc395fc9972fc08233044057ab540c7ab59

Author: Brian Paul <[email protected]>
Date:   Tue Mar 16 14:32:18 2010 -0600

gallivm/llmvpipe: pass stencil refs state into z/stencil build code

---

 src/gallium/auxiliary/gallivm/lp_bld_depth.c |    1 +
 src/gallium/auxiliary/gallivm/lp_bld_depth.h |    1 +
 src/gallium/drivers/llvmpipe/lp_jit.h        |    2 +-
 src/gallium/drivers/llvmpipe/lp_state.h      |    1 +
 src/gallium/drivers/llvmpipe/lp_state_fs.c   |   22 ++++++++++++++++------
 5 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_depth.c 
b/src/gallium/auxiliary/gallivm/lp_bld_depth.c
index cbc48f9..3a5da4e 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_depth.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_depth.c
@@ -217,6 +217,7 @@ lp_build_depth_test(LLVMBuilderRef builder,
                     struct lp_type type,
                     const struct util_format_description *format_desc,
                     struct lp_build_mask_context *mask,
+                    LLVMValueRef stencil_refs,
                     LLVMValueRef src,
                     LLVMValueRef dst_ptr)
 {
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_depth.h 
b/src/gallium/auxiliary/gallivm/lp_bld_depth.h
index 8375824..a7f67d2 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_depth.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_depth.h
@@ -56,6 +56,7 @@ lp_build_depth_test(LLVMBuilderRef builder,
                     struct lp_type type,
                     const struct util_format_description *format_desc,
                     struct lp_build_mask_context *mask,
+                    LLVMValueRef stencil_refs,
                     LLVMValueRef src,
                     LLVMValueRef dst_ptr);
 
diff --git a/src/gallium/drivers/llvmpipe/lp_jit.h 
b/src/gallium/drivers/llvmpipe/lp_jit.h
index 8f796f7..843345c 100644
--- a/src/gallium/drivers/llvmpipe/lp_jit.h
+++ b/src/gallium/drivers/llvmpipe/lp_jit.h
@@ -120,7 +120,7 @@ enum {
 #define lp_jit_context_alpha_ref_value(_builder, _ptr) \
    lp_build_struct_get(_builder, _ptr, LP_JIT_CTX_ALPHA_REF, "alpha_ref_value")
 
-#define lp_jit_context_stencil_ref_value(_builder, _ptr) \
+#define lp_jit_context_stencil_ref_values(_builder, _ptr) \
    lp_build_struct_get(_builder, _ptr, LP_JIT_CTX_STENCIL_REF, "stencil_ref")
 
 #define lp_jit_context_scissor_xmin_value(_builder, _ptr) \
diff --git a/src/gallium/drivers/llvmpipe/lp_state.h 
b/src/gallium/drivers/llvmpipe/lp_state.h
index be02e97..74ebf90 100644
--- a/src/gallium/drivers/llvmpipe/lp_state.h
+++ b/src/gallium/drivers/llvmpipe/lp_state.h
@@ -67,6 +67,7 @@ struct lp_fragment_shader;
 struct lp_fragment_shader_variant_key
 {
    struct pipe_depth_state depth;
+   struct pipe_stencil_state stencil[2];
    struct pipe_alpha_state alpha;
    struct pipe_blend_state blend;
    enum pipe_format zsbuf_format;
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c 
b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index a2ec8c3..5b00792 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -145,6 +145,7 @@ generate_depth(LLVMBuilderRef builder,
                const struct lp_fragment_shader_variant_key *key,
                struct lp_type src_type,
                struct lp_build_mask_context *mask,
+               LLVMValueRef stencil_refs,
                LLVMValueRef src,
                LLVMValueRef dst_ptr)
 {
@@ -189,6 +190,7 @@ generate_depth(LLVMBuilderRef builder,
                        dst_type,
                        format_desc,
                        mask,
+                       stencil_refs,
                        src,
                        dst_ptr);
 }
@@ -405,6 +407,7 @@ generate_fs(struct llvmpipe_context *lp,
    LLVMValueRef consts_ptr;
    LLVMValueRef outputs[PIPE_MAX_SHADER_OUTPUTS][NUM_CHANNELS];
    LLVMValueRef z = interp->pos[2];
+   LLVMValueRef stencil_refs;
    struct lp_build_flow_context *flow;
    struct lp_build_mask_context mask;
    boolean early_depth_test;
@@ -414,6 +417,8 @@ generate_fs(struct llvmpipe_context *lp,
 
    assert(i < 4);
 
+   stencil_refs = lp_jit_context_stencil_ref_values(builder, context_ptr);
+
    elem_type = lp_build_elem_type(type);
    vec_type = lp_build_vec_type(type);
    int_vec_type = lp_build_int_vec_type(type);
@@ -462,7 +467,7 @@ generate_fs(struct llvmpipe_context *lp,
    if(early_depth_test)
       generate_depth(builder, key,
                      type, &mask,
-                     z, depth_ptr);
+                     stencil_refs, z, depth_ptr);
 
    lp_build_tgsi_soa(builder, tokens, type, &mask,
                      consts_ptr, interp->pos, interp->inputs,
@@ -509,7 +514,7 @@ generate_fs(struct llvmpipe_context *lp,
    if(!early_depth_test)
       generate_depth(builder, key,
                      type, &mask,
-                     z, depth_ptr);
+                     stencil_refs, z, depth_ptr);
 
    lp_build_mask_end(&mask);
 
@@ -1054,10 +1059,15 @@ make_variant_key(struct llvmpipe_context *lp,
 
    memset(key, 0, sizeof *key);
 
-   if(lp->framebuffer.zsbuf &&
-      lp->depth_stencil->depth.enabled) {
-      key->zsbuf_format = lp->framebuffer.zsbuf->format;
-      memcpy(&key->depth, &lp->depth_stencil->depth, sizeof key->depth);
+   if (lp->framebuffer.zsbuf) {
+      if (lp->depth_stencil->depth.enabled) {
+         key->zsbuf_format = lp->framebuffer.zsbuf->format;
+         memcpy(&key->depth, &lp->depth_stencil->depth, sizeof key->depth);
+      }
+      if (lp->depth_stencil->stencil[0].enabled) {
+         key->zsbuf_format = lp->framebuffer.zsbuf->format;
+         memcpy(&key->stencil, &lp->depth_stencil->stencil, sizeof 
key->stencil);
+      }
    }
 
    key->alpha.enabled = lp->depth_stencil->alpha.enabled;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to