Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Eduardo Lima Mitev
mesa
Commits
a872f463
Commit
a872f463
authored
Jun 19, 2019
by
Erik Faye-Lund
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
zink: cache render-passes
Acked-by:
Jordan Justen
<
jordan.l.justen@intel.com
>
parent
5f216373
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
4 deletions
+35
-4
src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_context.c
+33
-4
src/gallium/drivers/zink/zink_context.h
src/gallium/drivers/zink/zink_context.h
+2
-0
No files found.
src/gallium/drivers/zink/zink_context.c
View file @
a872f463
...
...
@@ -443,6 +443,7 @@ zink_set_clip_state(struct pipe_context *pctx,
static
struct
zink_render_pass
*
get_render_pass
(
struct
zink_context
*
ctx
)
{
struct
zink_screen
*
screen
=
zink_screen
(
ctx
->
base
.
screen
);
const
struct
pipe_framebuffer_state
*
fb
=
&
ctx
->
fb_state
;
struct
zink_render_pass_state
state
;
...
...
@@ -458,8 +459,17 @@ get_render_pass(struct zink_context *ctx)
}
state
.
have_zsbuf
=
fb
->
zsbuf
!=
NULL
;
// TODO: cache instead!
return
zink_create_render_pass
(
zink_screen
(
ctx
->
base
.
screen
),
&
state
);
struct
hash_entry
*
entry
=
_mesa_hash_table_search
(
ctx
->
render_pass_cache
,
&
state
);
if
(
!
entry
)
{
struct
zink_render_pass
*
rp
;
rp
=
zink_create_render_pass
(
screen
,
&
state
);
entry
=
_mesa_hash_table_insert
(
ctx
->
render_pass_cache
,
&
state
,
rp
);
if
(
!
entry
)
return
NULL
;
}
return
entry
->
data
;
}
static
struct
zink_framebuffer
*
...
...
@@ -471,7 +481,6 @@ get_framebuffer(struct zink_context *ctx)
struct
zink_framebuffer
*
ret
=
zink_create_framebuffer
(
screen
,
&
ctx
->
fb_state
,
rp
);
zink_render_pass_reference
(
screen
,
&
rp
,
NULL
);
return
ret
;
}
...
...
@@ -794,6 +803,18 @@ equals_gfx_program(const void *a, const void *b)
return
memcmp
(
a
,
b
,
sizeof
(
struct
zink_shader
*
)
*
(
PIPE_SHADER_TYPES
-
1
))
==
0
;
}
static
uint32_t
hash_render_pass_state
(
const
void
*
key
)
{
return
_mesa_hash_data
(
key
,
sizeof
(
struct
zink_render_pass_state
));
}
static
bool
equals_render_pass_state
(
const
void
*
a
,
const
void
*
b
)
{
return
memcmp
(
a
,
b
,
sizeof
(
struct
zink_render_pass_state
))
==
0
;
}
static
struct
zink_gfx_program
*
get_gfx_program
(
struct
zink_context
*
ctx
)
{
...
...
@@ -1311,10 +1332,18 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
vkGetDeviceQueue
(
screen
->
dev
,
screen
->
gfx_queue
,
0
,
&
ctx
->
queue
);
ctx
->
program_cache
=
_mesa_hash_table_create
(
NULL
,
hash_gfx_program
,
equals_gfx_program
);
ctx
->
program_cache
=
_mesa_hash_table_create
(
NULL
,
hash_gfx_program
,
equals_gfx_program
);
if
(
!
ctx
->
program_cache
)
goto
fail
;
ctx
->
render_pass_cache
=
_mesa_hash_table_create
(
NULL
,
hash_render_pass_state
,
equals_render_pass_state
);
if
(
!
ctx
->
render_pass_cache
)
goto
fail
;
ctx
->
dirty
=
ZINK_DIRTY_PROGRAM
;
/* start the first batch */
...
...
src/gallium/drivers/zink/zink_context.h
View file @
a872f463
...
...
@@ -82,6 +82,8 @@ struct zink_context {
struct
zink_gfx_program
*
curr_program
;
unsigned
dirty
;
struct
hash_table
*
render_pass_cache
;
struct
primconvert_context
*
primconvert
;
struct
zink_framebuffer
*
framebuffer
;
...
...
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