mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
mesa: add TexShadow field to prog_instruction
If the instruction is TEX/TXP/TXL/etc the TexShadow field will be true if the instruction is a texture fetch with shadow compare.
This commit is contained in:
parent
a79186e29e
commit
44e018c09e
4 changed files with 21 additions and 6 deletions
|
|
@ -736,6 +736,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p,
|
|||
GLuint destmask,
|
||||
GLuint tex_unit,
|
||||
GLuint tex_idx,
|
||||
GLuint tex_shadow,
|
||||
struct ureg coord )
|
||||
{
|
||||
struct prog_instruction *inst = emit_op( p, op,
|
||||
|
|
@ -747,6 +748,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p,
|
|||
|
||||
inst->TexSrcTarget = tex_idx;
|
||||
inst->TexSrcUnit = tex_unit;
|
||||
inst->TexShadow = tex_shadow;
|
||||
|
||||
p->program->Base.NumTexInstructions++;
|
||||
|
||||
|
|
@ -1160,22 +1162,27 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit)
|
|||
static void load_texture( struct texenv_fragment_program *p, GLuint unit )
|
||||
{
|
||||
if (is_undef(p->src_texture[unit])) {
|
||||
GLuint dim = p->state->unit[unit].source_index;
|
||||
GLuint texTarget = p->state->unit[unit].source_index;
|
||||
struct ureg texcoord = register_input(p, FRAG_ATTRIB_TEX0+unit);
|
||||
struct ureg tmp = get_tex_temp( p );
|
||||
|
||||
if (dim == TEXTURE_UNKNOWN_INDEX)
|
||||
if (texTarget == TEXTURE_UNKNOWN_INDEX)
|
||||
program_error(p, "TexSrcBit");
|
||||
|
||||
/* TODO: Use D0_MASK_XY where possible.
|
||||
*/
|
||||
if (p->state->unit[unit].enabled) {
|
||||
GLboolean shadow = GL_FALSE;
|
||||
|
||||
if (p->state->unit[unit].shadow) {
|
||||
p->program->Base.ShadowSamplers |= 1 << unit;
|
||||
shadow = GL_TRUE;
|
||||
}
|
||||
|
||||
p->src_texture[unit] = emit_texld( p, OPCODE_TXP,
|
||||
tmp, WRITEMASK_XYZW,
|
||||
unit, dim, texcoord );
|
||||
|
||||
if (p->state->unit[unit].shadow)
|
||||
p->program->Base.ShadowSamplers |= 1 << unit;
|
||||
unit, texTarget, shadow,
|
||||
texcoord );
|
||||
|
||||
p->program->Base.SamplersUsed |= (1 << unit);
|
||||
/* This identity mapping should already be in place
|
||||
|
|
|
|||
|
|
@ -3104,6 +3104,9 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst,
|
|||
break;
|
||||
}
|
||||
|
||||
if (shadow_tex)
|
||||
fp->TexShadow = 1;
|
||||
|
||||
/* Don't test the first time a particular sampler is seen. Each time
|
||||
* after that, make sure the shadow state is the same.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -396,6 +396,9 @@ struct prog_instruction
|
|||
|
||||
/** Source texture target, one of TEXTURE_{1D,2D,3D,CUBE,RECT}_INDEX */
|
||||
GLuint TexSrcTarget:3;
|
||||
|
||||
/** True if tex instruction should do shadow comparison */
|
||||
GLuint TexShadow:1;
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -592,6 +592,8 @@ _mesa_fprint_instruction_opt(FILE *f,
|
|||
default:
|
||||
;
|
||||
}
|
||||
if (inst->TexShadow)
|
||||
_mesa_fprintf(f, " SHADOW");
|
||||
fprint_comment(f, inst);
|
||||
break;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue