Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
be43c867
Commit
be43c867
authored
May 03, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
May 04, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Split context_apply_state() into separate functions for each usage.
parent
b8b1a565
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
57 deletions
+84
-57
context.c
dlls/wined3d/context.c
+84
-57
No files found.
dlls/wined3d/context.c
View file @
be43c867
...
@@ -1977,32 +1977,13 @@ static void context_validate_onscreen_formats(IWineD3DDeviceImpl *device, struct
...
@@ -1977,32 +1977,13 @@ static void context_validate_onscreen_formats(IWineD3DDeviceImpl *device, struct
}
}
/* Context activation is done by the caller. */
/* Context activation is done by the caller. */
static
void
context_apply_
state
(
struct
wined3d_context
*
context
,
IWineD3DDeviceImpl
*
device
,
enum
ContextUsage
usag
e
)
static
void
context_apply_
blit_state
(
struct
wined3d_context
*
context
,
IWineD3DDeviceImpl
*
devic
e
)
{
{
const
struct
StateEntry
*
state_table
=
device
->
StateTable
;
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
unsigned
int
i
;
{
switch
(
usage
)
{
case
CTXUSAGE_CLEAR
:
case
CTXUSAGE_DRAWPRIM
:
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
{
if
(
!
context
->
render_offscreen
)
context_validate_onscreen_formats
(
device
,
context
);
ENTER_GL
();
context_apply_fbo_state
(
context
);
LEAVE_GL
();
}
if
(
context
->
draw_buffer_dirty
)
{
context_apply_draw_buffer
(
context
,
FALSE
);
context
->
draw_buffer_dirty
=
FALSE
;
}
break
;
case
CTXUSAGE_BLIT
:
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
{
if
(
!
context
->
render_offscreen
)
context_validate_onscreen_formats
(
device
,
context
);
if
(
context
->
render_offscreen
)
if
(
context
->
render_offscreen
)
{
{
FIXME
(
"Activating for CTXUSAGE_BLIT
for an offscreen target with ORM_FBO. This should be avoided.
\n
"
);
FIXME
(
"Applying blit state
for an offscreen target with ORM_FBO. This should be avoided.
\n
"
);
surface_internal_preload
(
context
->
current_rt
,
SRGB_RGB
);
surface_internal_preload
(
context
->
current_rt
,
SRGB_RGB
);
ENTER_GL
();
ENTER_GL
();
...
@@ -2010,55 +1991,90 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
...
@@ -2010,55 +1991,90 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
context_attach_surface_fbo
(
context
,
GL_FRAMEBUFFER
,
0
,
context
->
current_rt
);
context_attach_surface_fbo
(
context
,
GL_FRAMEBUFFER
,
0
,
context
->
current_rt
);
context_attach_depth_stencil_fbo
(
context
,
GL_FRAMEBUFFER
,
NULL
,
FALSE
);
context_attach_depth_stencil_fbo
(
context
,
GL_FRAMEBUFFER
,
NULL
,
FALSE
);
LEAVE_GL
();
LEAVE_GL
();
}
else
{
}
else
{
context_validate_onscreen_formats
(
device
,
context
);
ENTER_GL
();
ENTER_GL
();
context_bind_fbo
(
context
,
GL_FRAMEBUFFER
,
NULL
);
context_bind_fbo
(
context
,
GL_FRAMEBUFFER
,
NULL
);
LEAVE_GL
();
LEAVE_GL
();
}
}
context
->
draw_buffer_dirty
=
TRUE
;
context
->
draw_buffer_dirty
=
TRUE
;
}
}
if
(
context
->
draw_buffer_dirty
)
{
if
(
context
->
draw_buffer_dirty
)
{
context_apply_draw_buffer
(
context
,
TRUE
);
context_apply_draw_buffer
(
context
,
TRUE
);
if
(
wined3d_settings
.
offscreen_rendering_mode
!=
ORM_FBO
)
{
if
(
wined3d_settings
.
offscreen_rendering_mode
!=
ORM_FBO
)
context
->
draw_buffer_dirty
=
FALSE
;
context
->
draw_buffer_dirty
=
FALSE
;
}
}
}
break
;
default:
SetupForBlit
(
device
,
context
);
break
;
}
/* Context activation is done by the caller. */
static
void
context_apply_clear_state
(
struct
wined3d_context
*
context
,
IWineD3DDeviceImpl
*
device
)
{
const
struct
StateEntry
*
state_table
=
device
->
StateTable
;
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
{
if
(
!
context
->
render_offscreen
)
context_validate_onscreen_formats
(
device
,
context
);
ENTER_GL
();
context_apply_fbo_state
(
context
);
LEAVE_GL
();
}
}
switch
(
usage
)
{
if
(
context
->
draw_buffer_dirty
)
case
CTXUSAGE_RESOURCELOAD
:
{
/* This does not require any special states to be set up */
context_apply_draw_buffer
(
context
,
FALSE
);
break
;
context
->
draw_buffer_dirty
=
FALSE
;
}
case
CTXUSAGE_CLEAR
:
if
(
context
->
last_was_blit
)
if
(
context
->
last_was_blit
)
{
{
device
->
frag_pipe
->
enable_extension
((
IWineD3DDevice
*
)
device
,
TRUE
);
device
->
frag_pipe
->
enable_extension
((
IWineD3DDevice
*
)
device
,
TRUE
);
}
}
/* Blending and clearing should be orthogonal, but tests on the nvidia driver show that disabling
/* Blending and clearing should be orthogonal, but tests on the nvidia
* blending when clearing improves the clearing performance incredibly.
* driver show that disabling blending when clearing improves the clearing
*/
* performance incredibly.
*/
ENTER_GL
();
ENTER_GL
();
glDisable
(
GL_BLEND
);
glDisable
(
GL_BLEND
);
LEAVE_GL
();
Context_MarkStateDirty
(
context
,
STATE_RENDER
(
WINED3DRS_ALPHABLENDENABLE
),
state_table
);
ENTER_GL
();
glEnable
(
GL_SCISSOR_TEST
);
glEnable
(
GL_SCISSOR_TEST
);
checkGLcall
(
"glEnable GL_SCISSOR_TEST"
);
checkGLcall
(
"glEnable GL_SCISSOR_TEST"
);
LEAVE_GL
();
LEAVE_GL
();
context
->
last_was_blit
=
FALSE
;
context
->
last_was_blit
=
FALSE
;
Context_MarkStateDirty
(
context
,
STATE_RENDER
(
WINED3DRS_ALPHABLENDENABLE
),
state_table
);
Context_MarkStateDirty
(
context
,
STATE_RENDER
(
WINED3DRS_SCISSORTESTENABLE
),
state_table
);
Context_MarkStateDirty
(
context
,
STATE_RENDER
(
WINED3DRS_SCISSORTESTENABLE
),
state_table
);
Context_MarkStateDirty
(
context
,
STATE_SCISSORRECT
,
state_table
);
Context_MarkStateDirty
(
context
,
STATE_SCISSORRECT
,
state_table
);
break
;
}
case
CTXUSAGE_DRAWPRIM
:
/* Context activation is done by the caller. */
/* This needs all dirty states applied */
static
void
context_apply_draw_state
(
struct
wined3d_context
*
context
,
IWineD3DDeviceImpl
*
device
)
if
(
context
->
last_was_blit
)
{
{
const
struct
StateEntry
*
state_table
=
device
->
StateTable
;
unsigned
int
i
;
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
{
if
(
!
context
->
render_offscreen
)
context_validate_onscreen_formats
(
device
,
context
);
ENTER_GL
();
context_apply_fbo_state
(
context
);
LEAVE_GL
();
}
if
(
context
->
draw_buffer_dirty
)
{
context_apply_draw_buffer
(
context
,
FALSE
);
context
->
draw_buffer_dirty
=
FALSE
;
}
if
(
context
->
last_was_blit
)
{
device
->
frag_pipe
->
enable_extension
((
IWineD3DDevice
*
)
device
,
TRUE
);
device
->
frag_pipe
->
enable_extension
((
IWineD3DDevice
*
)
device
,
TRUE
);
}
}
...
@@ -2079,15 +2095,6 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
...
@@ -2079,15 +2095,6 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
LEAVE_GL
();
LEAVE_GL
();
context
->
numDirtyEntries
=
0
;
/* This makes the whole list clean */
context
->
numDirtyEntries
=
0
;
/* This makes the whole list clean */
context
->
last_was_blit
=
FALSE
;
context
->
last_was_blit
=
FALSE
;
break
;
case
CTXUSAGE_BLIT
:
SetupForBlit
(
device
,
context
);
break
;
default:
FIXME
(
"Unexpected context usage requested
\n
"
);
}
}
}
static
void
context_setup_target
(
IWineD3DDeviceImpl
*
device
,
static
void
context_setup_target
(
IWineD3DDeviceImpl
*
device
,
...
@@ -2220,7 +2227,27 @@ struct wined3d_context *context_acquire(IWineD3DDeviceImpl *device,
...
@@ -2220,7 +2227,27 @@ struct wined3d_context *context_acquire(IWineD3DDeviceImpl *device,
}
}
}
}
context_apply_state
(
context
,
device
,
usage
);
switch
(
usage
)
{
case
CTXUSAGE_BLIT
:
context_apply_blit_state
(
context
,
device
);
break
;
case
CTXUSAGE_CLEAR
:
context_apply_clear_state
(
context
,
device
);
break
;
case
CTXUSAGE_DRAWPRIM
:
context_apply_draw_state
(
context
,
device
);
break
;
case
CTXUSAGE_RESOURCELOAD
:
break
;
default:
FIXME
(
"Unexpected context usage requested.
\n
"
);
break
;
}
return
context
;
return
context
;
}
}
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