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>
This commit is contained in:
parent
3bc642cbf6
commit
ec5c924290
|
@ -240,6 +240,12 @@ brw_vec4_upload_binding_table(struct brw_context *brw,
|
|||
struct brw_stage_state *stage_state,
|
||||
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
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,40 @@
|
|||
#include "program/prog_statevars.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
|
||||
upload_vs_state(struct brw_context *brw)
|
||||
{
|
||||
|
@ -52,31 +86,8 @@ upload_vs_state(struct brw_context *brw)
|
|||
OUT_BATCH(stage_state->sampler_offset);
|
||||
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
|
||||
* require 0^0 == 1.
|
||||
|
|
Loading…
Reference in New Issue