mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 00:00:12 +01:00
i915: Don't rely on fence regs when we don't have to.
We're on the way to telling the kernel about when we need fence regs on our objects or not, and this will cut the number of places needing them.
This commit is contained in:
parent
1b6f7fb7d5
commit
165ae5e2fb
8 changed files with 55 additions and 62 deletions
|
|
@ -48,19 +48,6 @@
|
|||
#define AA_LINE_ENABLE ((1<<1) | 1)
|
||||
#define AA_LINE_DISABLE (1<<1)
|
||||
|
||||
#define _3DSTATE_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1)
|
||||
/* Dword 1 */
|
||||
#define BUF_3D_ID_COLOR_BACK (0x3<<24)
|
||||
#define BUF_3D_ID_DEPTH (0x7<<24)
|
||||
#define BUF_3D_USE_FENCE (1<<23)
|
||||
#define BUF_3D_TILED_SURFACE (1<<22)
|
||||
#define BUF_3D_TILE_WALK_X 0
|
||||
#define BUF_3D_TILE_WALK_Y (1<<21)
|
||||
#define BUF_3D_PITCH(x) (((x)/4)<<2)
|
||||
/* Dword 2 */
|
||||
#define BUF_3D_ADDR(x) ((x) & ~0x3)
|
||||
|
||||
|
||||
#define _3DSTATE_COLOR_FACTOR_CMD (CMD_3D | (0x1d<<24) | (0x1<<16))
|
||||
|
||||
#define _3DSTATE_COLOR_FACTOR_N_CMD(stage) (CMD_3D | (0x1d<<24) | \
|
||||
|
|
|
|||
|
|
@ -174,14 +174,16 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
|||
state[I830_TEXREG_TM0LI] = (_3DSTATE_LOAD_STATE_IMMEDIATE_2 |
|
||||
(LOAD_TEXTURE_MAP0 << unit) | 4);
|
||||
|
||||
/* state[I830_TEXREG_TM0S0] = (TM0S0_USE_FENCE | */
|
||||
/* t->intel.TextureOffset); */
|
||||
|
||||
|
||||
state[I830_TEXREG_TM0S1] =
|
||||
(((firstImage->Height - 1) << TM0S1_HEIGHT_SHIFT) |
|
||||
((firstImage->Width - 1) << TM0S1_WIDTH_SHIFT) | format);
|
||||
|
||||
if (intelObj->mt->region->tiling != I915_TILING_NONE) {
|
||||
state[I830_TEXREG_TM0S1] |= TM0S1_TILED_SURFACE;
|
||||
if (intelObj->mt->region->tiling == I915_TILING_Y)
|
||||
state[I830_TEXREG_TM0S1] |= TM0S1_TILE_WALK;
|
||||
}
|
||||
|
||||
state[I830_TEXREG_TM0S2] =
|
||||
((((pitch / 4) - 1) << TM0S2_PITCH_SHIFT) | TM0S2_CUBE_FACE_ENA_MASK);
|
||||
|
||||
|
|
|
|||
|
|
@ -552,7 +552,7 @@ i830_emit_state(struct intel_context *intel)
|
|||
if (state->tex_buffer[i]) {
|
||||
OUT_RELOC(state->tex_buffer[i],
|
||||
I915_GEM_DOMAIN_SAMPLER, 0,
|
||||
state->tex_offset[i] | TM0S0_USE_FENCE);
|
||||
state->tex_offset[i]);
|
||||
}
|
||||
else if (state == &i830->meta) {
|
||||
assert(i == 0);
|
||||
|
|
@ -634,21 +634,11 @@ i830_state_draw_region(struct intel_context *intel,
|
|||
/*
|
||||
* Set stride/cpp values
|
||||
*/
|
||||
if (color_region) {
|
||||
state->Buffer[I830_DESTREG_CBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
|
||||
state->Buffer[I830_DESTREG_CBUFADDR1] =
|
||||
(BUF_3D_ID_COLOR_BACK |
|
||||
BUF_3D_PITCH(color_region->pitch * color_region->cpp) |
|
||||
BUF_3D_USE_FENCE);
|
||||
}
|
||||
i915_set_buf_info_for_region(&state->Buffer[I830_DESTREG_CBUFADDR0],
|
||||
color_region, BUF_3D_ID_COLOR_BACK);
|
||||
|
||||
if (depth_region) {
|
||||
state->Buffer[I830_DESTREG_DBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
|
||||
state->Buffer[I830_DESTREG_DBUFADDR1] =
|
||||
(BUF_3D_ID_DEPTH |
|
||||
BUF_3D_PITCH(depth_region->pitch * depth_region->cpp) |
|
||||
BUF_3D_USE_FENCE);
|
||||
}
|
||||
i915_set_buf_info_for_region(&state->Buffer[I830_DESTREG_DBUFADDR0],
|
||||
depth_region, BUF_3D_ID_DEPTH);
|
||||
|
||||
/*
|
||||
* Compute/set I830_DESTREG_DV1 value
|
||||
|
|
|
|||
|
|
@ -93,20 +93,6 @@
|
|||
|
||||
/* 3DSTATE_BIN_CONTROL p141 */
|
||||
|
||||
/* p143 */
|
||||
#define _3DSTATE_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1)
|
||||
/* Dword 1 */
|
||||
#define BUF_3D_ID_COLOR_BACK (0x3<<24)
|
||||
#define BUF_3D_ID_DEPTH (0x7<<24)
|
||||
#define BUF_3D_USE_FENCE (1<<23)
|
||||
#define BUF_3D_TILED_SURFACE (1<<22)
|
||||
#define BUF_3D_TILE_WALK_X 0
|
||||
#define BUF_3D_TILE_WALK_Y (1<<21)
|
||||
#define BUF_3D_PITCH(x) (((x)/4)<<2)
|
||||
/* Dword 2 */
|
||||
#define BUF_3D_ADDR(x) ((x) & ~0x3)
|
||||
|
||||
|
||||
/* 3DSTATE_CHROMA_KEY */
|
||||
|
||||
/* 3DSTATE_CLEAR_PARAMETERS, p150 */
|
||||
|
|
|
|||
|
|
@ -185,8 +185,13 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
|||
|
||||
state[I915_TEXREG_MS3] =
|
||||
(((firstImage->Height - 1) << MS3_HEIGHT_SHIFT) |
|
||||
((firstImage->Width - 1) << MS3_WIDTH_SHIFT) | format |
|
||||
MS3_USE_FENCE_REGS);
|
||||
((firstImage->Width - 1) << MS3_WIDTH_SHIFT) | format);
|
||||
|
||||
if (intelObj->mt->region->tiling != I915_TILING_NONE) {
|
||||
state[I915_TEXREG_MS3] |= MS3_TILED_SURFACE;
|
||||
if (intelObj->mt->region->tiling == I915_TILING_Y)
|
||||
state[I915_TEXREG_MS3] |= MS3_TILE_WALK;
|
||||
}
|
||||
|
||||
state[I915_TEXREG_MS4] =
|
||||
((((pitch / 4) - 1) << MS4_PITCH_SHIFT) | MS4_CUBE_FACE_ENA_MASK |
|
||||
|
|
|
|||
|
|
@ -529,6 +529,23 @@ i915_destroy_context(struct intel_context *intel)
|
|||
_tnl_free_vertices(&intel->ctx);
|
||||
}
|
||||
|
||||
void
|
||||
i915_set_buf_info_for_region(uint32_t *state, struct intel_region *region,
|
||||
uint32_t buffer_id)
|
||||
{
|
||||
state[0] = _3DSTATE_BUF_INFO_CMD;
|
||||
state[1] = buffer_id;
|
||||
|
||||
if (region != NULL) {
|
||||
state[1] |= BUF_3D_PITCH(region->pitch * region->cpp);
|
||||
|
||||
if (region->tiling != I915_TILING_NONE) {
|
||||
state[1] |= BUF_3D_TILED_SURFACE;
|
||||
if (region->tiling == I915_TILING_Y)
|
||||
state[1] |= BUF_3D_TILE_WALK_Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the drawing regions for the color and depth/stencil buffers.
|
||||
|
|
@ -562,21 +579,11 @@ i915_state_draw_region(struct intel_context *intel,
|
|||
/*
|
||||
* Set stride/cpp values
|
||||
*/
|
||||
if (color_region) {
|
||||
state->Buffer[I915_DESTREG_CBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
|
||||
state->Buffer[I915_DESTREG_CBUFADDR1] =
|
||||
(BUF_3D_ID_COLOR_BACK |
|
||||
BUF_3D_PITCH(color_region->pitch * color_region->cpp) |
|
||||
BUF_3D_USE_FENCE);
|
||||
}
|
||||
i915_set_buf_info_for_region(&state->Buffer[I915_DESTREG_CBUFADDR0],
|
||||
color_region, BUF_3D_ID_COLOR_BACK);
|
||||
|
||||
if (depth_region) {
|
||||
state->Buffer[I915_DESTREG_DBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
|
||||
state->Buffer[I915_DESTREG_DBUFADDR1] =
|
||||
(BUF_3D_ID_DEPTH |
|
||||
BUF_3D_PITCH(depth_region->pitch * depth_region->cpp) |
|
||||
BUF_3D_USE_FENCE);
|
||||
}
|
||||
i915_set_buf_info_for_region(&state->Buffer[I915_DESTREG_DBUFADDR0],
|
||||
depth_region, BUF_3D_ID_DEPTH);
|
||||
|
||||
/*
|
||||
* Compute/set I915_DESTREG_DV1 value
|
||||
|
|
|
|||
|
|
@ -559,6 +559,9 @@ void intel_viewport(GLcontext * ctx, GLint x, GLint y,
|
|||
void intel_update_renderbuffers(__DRIcontext *context,
|
||||
__DRIdrawable *drawable);
|
||||
|
||||
void i915_set_buf_info_for_region(uint32_t *state, struct intel_region *region,
|
||||
uint32_t buffer_id);
|
||||
|
||||
/*======================================================================
|
||||
* Inline conversion functions.
|
||||
* These are better-typed than the macros used previously:
|
||||
|
|
|
|||
|
|
@ -189,6 +189,19 @@
|
|||
|
||||
#define S7_DEPTH_OFFSET_CONST_MASK ~0
|
||||
|
||||
/* p143 */
|
||||
#define _3DSTATE_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1)
|
||||
/* Dword 1 */
|
||||
#define BUF_3D_ID_COLOR_BACK (0x3<<24)
|
||||
#define BUF_3D_ID_DEPTH (0x7<<24)
|
||||
#define BUF_3D_USE_FENCE (1<<23)
|
||||
#define BUF_3D_TILED_SURFACE (1<<22)
|
||||
#define BUF_3D_TILE_WALK_X 0
|
||||
#define BUF_3D_TILE_WALK_Y (1<<21)
|
||||
#define BUF_3D_PITCH(x) (((x)/4)<<2)
|
||||
/* Dword 2 */
|
||||
#define BUF_3D_ADDR(x) ((x) & ~0x3)
|
||||
|
||||
/* Primitive dispatch on 830-945 */
|
||||
#define _3DPRIMITIVE (CMD_3D | (0x1f << 24))
|
||||
#define PRIM_INDIRECT (1<<23)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue