Browse Source

i965/gen7: Extract a function for setting up a shader stage's constants.

This will allow us to reuse some code when setting up the geometry
shader stage.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
tags/mesa-10.1-devel
Paul Berry 12 years ago
parent
commit
ec5c924290
2 changed files with 42 additions and 25 deletions
  1. 6
    0
      src/mesa/drivers/dri/i965/brw_state.h
  2. 36
    25
      src/mesa/drivers/dri/i965/gen7_vs_state.c

+ 6
- 0
src/mesa/drivers/dri/i965/brw_state.h View File

struct brw_stage_state *stage_state, struct brw_stage_state *stage_state,
const struct brw_vec4_prog_data *prog_data); const struct brw_vec4_prog_data *prog_data);


/* gen7_vs_state.c */
void
gen7_upload_constant_state(struct brw_context *brw,
const struct brw_stage_state *stage_state,
bool active, unsigned opcode);

#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

+ 36
- 25
src/mesa/drivers/dri/i965/gen7_vs_state.c View File

#include "program/prog_statevars.h" #include "program/prog_statevars.h"
#include "intel_batchbuffer.h" #include "intel_batchbuffer.h"



void
gen7_upload_constant_state(struct brw_context *brw,
const struct brw_stage_state *stage_state,
bool active, unsigned opcode)
{
if (!active || stage_state->push_const_size == 0) {
/* Disable the push constant buffers. */
BEGIN_BATCH(7);
OUT_BATCH(opcode << 16 | (7 - 2));
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
ADVANCE_BATCH();
} else {
BEGIN_BATCH(7);
OUT_BATCH(opcode << 16 | (7 - 2));
OUT_BATCH(stage_state->push_const_size);
OUT_BATCH(0);
/* Pointer to the constant buffer. Covered by the set of state flags
* from gen6_prepare_wm_contants
*/
OUT_BATCH(stage_state->push_const_offset | GEN7_MOCS_L3);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
ADVANCE_BATCH();
}
}


static void static void
upload_vs_state(struct brw_context *brw) upload_vs_state(struct brw_context *brw)
{ {
OUT_BATCH(stage_state->sampler_offset); OUT_BATCH(stage_state->sampler_offset);
ADVANCE_BATCH(); ADVANCE_BATCH();


if (stage_state->push_const_size == 0) {
/* Disable the push constant buffers. */
BEGIN_BATCH(7);
OUT_BATCH(_3DSTATE_CONSTANT_VS << 16 | (7 - 2));
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
ADVANCE_BATCH();
} else {
BEGIN_BATCH(7);
OUT_BATCH(_3DSTATE_CONSTANT_VS << 16 | (7 - 2));
OUT_BATCH(stage_state->push_const_size);
OUT_BATCH(0);
/* Pointer to the VS constant buffer. Covered by the set of
* state flags from gen6_prepare_wm_contants
*/
OUT_BATCH(stage_state->push_const_offset | GEN7_MOCS_L3);
OUT_BATCH(0);
OUT_BATCH(0);
OUT_BATCH(0);
ADVANCE_BATCH();
}
gen7_upload_constant_state(brw, stage_state, true /* active */,
_3DSTATE_CONSTANT_VS);


/* Use ALT floating point mode for ARB vertex programs, because they /* Use ALT floating point mode for ARB vertex programs, because they
* require 0^0 == 1. * require 0^0 == 1.

Loading…
Cancel
Save