Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
mesa
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1,901
Issues
1,901
List
Boards
Labels
Milestones
Merge Requests
318
Merge Requests
318
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mesa
mesa
Commits
8fb0ecd0
Commit
8fb0ecd0
authored
Feb 22, 2011
by
Jakob Bornecrantz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
i915g: Lazy emit dynamic state
parent
b9baad2a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
36 additions
and
40 deletions
+36
-40
src/gallium/drivers/i915/i915_context.c
src/gallium/drivers/i915/i915_context.c
+1
-0
src/gallium/drivers/i915/i915_context.h
src/gallium/drivers/i915/i915_context.h
+1
-0
src/gallium/drivers/i915/i915_flush.c
src/gallium/drivers/i915/i915_flush.c
+1
-0
src/gallium/drivers/i915/i915_state_dynamic.c
src/gallium/drivers/i915/i915_state_dynamic.c
+30
-39
src/gallium/drivers/i915/i915_state_emit.c
src/gallium/drivers/i915/i915_state_emit.c
+3
-1
No files found.
src/gallium/drivers/i915/i915_context.c
View file @
8fb0ecd0
...
...
@@ -164,6 +164,7 @@ i915_create_context(struct pipe_screen *screen, void *priv)
i915
->
dirty
=
~
0
;
i915
->
hardware_dirty
=
~
0
;
i915
->
immediate_dirty
=
~
0
;
i915
->
dynamic_dirty
=
~
0
;
/* Batch stream debugging is a bit hacked up at the moment:
*/
...
...
src/gallium/drivers/i915/i915_context.h
View file @
8fb0ecd0
...
...
@@ -236,6 +236,7 @@ struct i915_context {
struct
i915_state
current
;
unsigned
hardware_dirty
;
unsigned
immediate_dirty
;
unsigned
dynamic_dirty
;
struct
util_slab_mempool
transfer_pool
;
};
...
...
src/gallium/drivers/i915/i915_flush.c
View file @
8fb0ecd0
...
...
@@ -95,4 +95,5 @@ void i915_flush(struct i915_context *i915, struct pipe_fence_handle **fence)
i915
->
vbo_flushed
=
1
;
i915
->
hardware_dirty
=
~
0
;
i915
->
immediate_dirty
=
~
0
;
i915
->
dynamic_dirty
=
~
0
;
}
src/gallium/drivers/i915/i915_state_dynamic.c
View file @
8fb0ecd0
...
...
@@ -46,18 +46,34 @@
* (active) state every time a 4kb boundary is crossed.
*/
static
INLINE
void
set_dynamic_indirect
(
struct
i915_context
*
i915
,
unsigned
offset
,
const
unsigned
*
src
,
unsigned
dwords
)
static
INLINE
void
set_dynamic
(
struct
i915_context
*
i915
,
unsigned
offset
,
const
unsigned
state
)
{
if
(
i915
->
current
.
dynamic
[
offset
]
==
state
)
return
;
i915
->
current
.
dynamic
[
offset
]
=
state
;
i915
->
dynamic_dirty
|=
1
<<
offset
;
i915
->
hardware_dirty
|=
I915_HW_DYNAMIC
;
}
static
INLINE
void
set_dynamic_array
(
struct
i915_context
*
i915
,
unsigned
offset
,
const
unsigned
*
src
,
unsigned
dwords
)
{
unsigned
i
;
if
(
!
memcmp
(
src
,
&
i915
->
current
.
dynamic
[
offset
],
dwords
*
4
))
return
;
for
(
i
=
0
;
i
<
dwords
;
i
++
)
for
(
i
=
0
;
i
<
dwords
;
i
++
)
{
i915
->
current
.
dynamic
[
offset
+
i
]
=
src
[
i
];
i915
->
dynamic_dirty
|=
1
<<
(
offset
+
i
);
}
i915
->
hardware_dirty
|=
I915_HW_DYNAMIC
;
}
...
...
@@ -79,12 +95,7 @@ static void upload_MODES4(struct i915_context *i915)
*/
modes4
|=
i915
->
blend
->
modes4
;
/* Always, so that we know when state is in-active:
*/
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_MODES4
,
&
modes4
,
1
);
set_dynamic
(
i915
,
I915_DYNAMIC_MODES4
,
modes4
);
}
const
struct
i915_tracked_state
i915_upload_MODES4
=
{
...
...
@@ -107,10 +118,7 @@ static void upload_BFO(struct i915_context *i915)
bfo
[
0
]
|=
i915
->
stencil_ref
.
ref_value
[
1
]
<<
BFO_STENCIL_REF_SHIFT
;
}
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_BFO_0
,
&
(
bfo
[
0
]),
2
);
set_dynamic_array
(
i915
,
I915_DYNAMIC_BFO_0
,
bfo
,
2
);
}
const
struct
i915_tracked_state
i915_upload_BFO
=
{
...
...
@@ -141,10 +149,7 @@ static void upload_BLENDCOLOR(struct i915_context *i915)
color
[
3
]);
}
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_BC_0
,
bc
,
2
);
set_dynamic_array
(
i915
,
I915_DYNAMIC_BC_0
,
bc
,
2
);
}
const
struct
i915_tracked_state
i915_upload_BLENDCOLOR
=
{
...
...
@@ -161,10 +166,7 @@ static void upload_IAB(struct i915_context *i915)
{
unsigned
iab
=
i915
->
blend
->
iab
;
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_IAB
,
&
iab
,
1
);
set_dynamic
(
i915
,
I915_DYNAMIC_IAB
,
iab
);
}
const
struct
i915_tracked_state
i915_upload_IAB
=
{
...
...
@@ -179,10 +181,8 @@ const struct i915_tracked_state i915_upload_IAB = {
*/
static
void
upload_DEPTHSCALE
(
struct
i915_context
*
i915
)
{
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_DEPTHSCALE_0
,
&
(
i915
->
rasterizer
->
ds
[
0
].
u
),
2
);
set_dynamic_array
(
i915
,
I915_DYNAMIC_DEPTHSCALE_0
,
&
i915
->
rasterizer
->
ds
[
0
].
u
,
2
);
}
const
struct
i915_tracked_state
i915_upload_DEPTHSCALE
=
{
...
...
@@ -234,10 +234,7 @@ static void upload_STIPPLE(struct i915_context *i915)
(
p
[
3
]
<<
12
));
}
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_STP_0
,
&
st
[
0
],
2
);
set_dynamic_array
(
i915
,
I915_DYNAMIC_STP_0
,
st
,
2
);
}
const
struct
i915_tracked_state
i915_upload_STIPPLE
=
{
...
...
@@ -253,10 +250,7 @@ const struct i915_tracked_state i915_upload_STIPPLE = {
*/
static
void
upload_SCISSOR_ENABLE
(
struct
i915_context
*
i915
)
{
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_SC_ENA_0
,
&
(
i915
->
rasterizer
->
sc
[
0
]),
1
);
set_dynamic
(
i915
,
I915_DYNAMIC_SC_ENA_0
,
i915
->
rasterizer
->
sc
[
0
]);
}
const
struct
i915_tracked_state
i915_upload_SCISSOR_ENABLE
=
{
...
...
@@ -282,10 +276,7 @@ static void upload_SCISSOR_RECT(struct i915_context *i915)
sc
[
1
]
=
(
y1
<<
16
)
|
(
x1
&
0xffff
);
sc
[
2
]
=
(
y2
<<
16
)
|
(
x2
&
0xffff
);
set_dynamic_indirect
(
i915
,
I915_DYNAMIC_SC_RECT_0
,
&
sc
[
0
],
3
);
set_dynamic_array
(
i915
,
I915_DYNAMIC_SC_RECT_0
,
sc
,
3
);
}
const
struct
i915_tracked_state
i915_upload_SCISSOR_RECT
=
{
...
...
src/gallium/drivers/i915/i915_state_emit.c
View file @
8fb0ecd0
...
...
@@ -223,7 +223,8 @@ i915_emit_hardware_state(struct i915_context *i915 )
{
int i;
for (i = 0; i < I915_MAX_DYNAMIC; i++) {
OUT_BATCH(i915->current.dynamic[i]);
if (i915->dynamic_dirty & (1 << i));
OUT_BATCH(i915->current.dynamic[i]);
}
}
#endif
...
...
@@ -444,4 +445,5 @@ i915_emit_hardware_state(struct i915_context *i915 )
i915
->
hardware_dirty
=
0
;
i915
->
immediate_dirty
=
0
;
i915
->
dynamic_dirty
=
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment