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
62ef7516
Commit
62ef7516
authored
Sep 21, 2018
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Move the OpenGL vertex format to a separate structure.
Signed-off-by:
Henri Verbeet
<
hverbeet@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
cefa84e5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
24 deletions
+63
-24
context.c
dlls/wined3d/context.c
+25
-13
utils.c
dlls/wined3d/utils.c
+25
-9
wined3d_private.h
dlls/wined3d/wined3d_private.h
+13
-2
No files found.
dlls/wined3d/context.c
View file @
62ef7516
...
...
@@ -5045,6 +5045,7 @@ void context_load_tex_coords(const struct wined3d_context *context, const struct
GLuint
*
current_bo
,
const
struct
wined3d_state
*
state
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
const
struct
wined3d_format_gl
*
format_gl
;
unsigned
int
mapped_stage
=
0
;
unsigned
int
texture_idx
;
...
...
@@ -5079,7 +5080,8 @@ void context_load_tex_coords(const struct wined3d_context *context, const struct
checkGLcall
(
"glClientActiveTextureARB"
);
/* The coords to supply depend completely on the fvf/vertex shader. */
gl_info
->
gl_ops
.
gl
.
p_glTexCoordPointer
(
e
->
format
->
gl_vtx_format
,
e
->
format
->
gl_vtx_type
,
e
->
stride
,
format_gl
=
wined3d_format_gl
(
e
->
format
);
gl_info
->
gl_ops
.
gl
.
p_glTexCoordPointer
(
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
gl_info
->
gl_ops
.
gl
.
p_glEnableClientState
(
GL_TEXTURE_COORD_ARRAY
);
}
...
...
@@ -5121,6 +5123,7 @@ static void context_load_vertex_data(struct wined3d_context *context,
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
const
struct
wined3d_stream_info_element
*
e
;
const
struct
wined3d_format_gl
*
format_gl
;
GLuint
current_bo
;
TRACE
(
"context %p, si %p, state %p.
\n
"
,
context
,
si
,
state
);
...
...
@@ -5151,6 +5154,7 @@ static void context_load_vertex_data(struct wined3d_context *context,
if
(
si
->
use_map
&
(
1u
<<
WINED3D_FFP_POSITION
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_POSITION
];
format_gl
=
wined3d_format_gl
(
e
->
format
);
if
(
current_bo
!=
e
->
data
.
buffer_object
)
{
...
...
@@ -5160,9 +5164,9 @@ static void context_load_vertex_data(struct wined3d_context *context,
}
TRACE
(
"glVertexPointer(%#x, %#x, %#x, %p);
\n
"
,
e
->
format
->
gl_vtx_format
,
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
gl_info
->
gl_ops
.
gl
.
p_glVertexPointer
(
e
->
format
->
gl_vtx_format
,
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
gl_info
->
gl_ops
.
gl
.
p_glVertexPointer
(
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
checkGLcall
(
"glVertexPointer(...)"
);
gl_info
->
gl_ops
.
gl
.
p_glEnableClientState
(
GL_VERTEX_ARRAY
);
...
...
@@ -5173,6 +5177,7 @@ static void context_load_vertex_data(struct wined3d_context *context,
if
(
si
->
use_map
&
(
1u
<<
WINED3D_FFP_NORMAL
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_NORMAL
];
format_gl
=
wined3d_format_gl
(
e
->
format
);
if
(
current_bo
!=
e
->
data
.
buffer_object
)
{
...
...
@@ -5181,9 +5186,9 @@ static void context_load_vertex_data(struct wined3d_context *context,
current_bo
=
e
->
data
.
buffer_object
;
}
TRACE
(
"glNormalPointer(%#x, %#x, %p);
\n
"
,
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
TRACE
(
"glNormalPointer(%#x, %#x, %p);
\n
"
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
gl_info
->
gl_ops
.
gl
.
p_glNormalPointer
(
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
gl_info
->
gl_ops
.
gl
.
p_glNormalPointer
(
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
checkGLcall
(
"glNormalPointer(...)"
);
gl_info
->
gl_ops
.
gl
.
p_glEnableClientState
(
GL_NORMAL_ARRAY
);
...
...
@@ -5200,6 +5205,7 @@ static void context_load_vertex_data(struct wined3d_context *context,
if
(
si
->
use_map
&
(
1u
<<
WINED3D_FFP_DIFFUSE
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_DIFFUSE
];
format_gl
=
wined3d_format_gl
(
e
->
format
);
if
(
current_bo
!=
e
->
data
.
buffer_object
)
{
...
...
@@ -5209,9 +5215,9 @@ static void context_load_vertex_data(struct wined3d_context *context,
}
TRACE
(
"glColorPointer(%#x, %#x %#x, %p);
\n
"
,
e
->
format
->
gl_vtx_format
,
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
gl_info
->
gl_ops
.
gl
.
p_glColorPointer
(
e
->
format
->
gl_vtx_format
,
e
->
format
->
gl_
vtx_type
,
e
->
stride
,
gl_info
->
gl_ops
.
gl
.
p_glColorPointer
(
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
e
->
stride
,
e
->
data
.
addr
+
state
->
load_base_vertex_index
*
e
->
stride
);
checkGLcall
(
"glColorPointer(4, GL_UNSIGNED_BYTE, ...)"
);
gl_info
->
gl_ops
.
gl
.
p_glEnableClientState
(
GL_COLOR_ARRAY
);
...
...
@@ -5233,8 +5239,12 @@ static void context_load_vertex_data(struct wined3d_context *context,
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
GLenum
type
=
e
->
format
->
gl_vtx_type
;
GLint
format
=
e
->
format
->
gl_vtx_format
;
GLint
format
;
GLenum
type
;
format_gl
=
wined3d_format_gl
(
e
->
format
);
type
=
format_gl
->
vtx_type
;
format
=
format_gl
->
vtx_format
;
if
(
current_bo
!=
e
->
data
.
buffer_object
)
{
...
...
@@ -5342,6 +5352,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
{
const
struct
wined3d_stream_info_element
*
element
=
&
stream_info
->
elements
[
i
];
const
struct
wined3d_stream_state
*
stream
;
const
struct
wined3d_format_gl
*
format_gl
;
if
(
!
(
stream_info
->
use_map
&
(
1u
<<
i
)))
{
...
...
@@ -5354,6 +5365,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
continue
;
}
format_gl
=
wined3d_format_gl
(
element
->
format
);
stream
=
&
state
->
streams
[
element
->
stream_idx
];
if
((
stream
->
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
&&
!
context
->
instance_count
)
...
...
@@ -5376,7 +5388,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
if
(
element
->
stride
)
{
DWORD
format_flags
=
element
->
format
->
flags
[
WINED3D_GL_RES_TYPE_BUFFER
];
DWORD
format_flags
=
format_gl
->
f
.
flags
[
WINED3D_GL_RES_TYPE_BUFFER
];
if
(
current_bo
!=
element
->
data
.
buffer_object
)
{
...
...
@@ -5390,12 +5402,12 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
* won't be load converted attributes anyway. */
if
(
vs
&&
vs
->
reg_maps
.
shader_version
.
major
>=
4
&&
(
format_flags
&
WINED3DFMT_FLAG_INTEGER
))
{
GL_EXTCALL
(
glVertexAttribIPointer
(
i
,
element
->
format
->
gl_vtx_format
,
element
->
format
->
gl_
vtx_type
,
GL_EXTCALL
(
glVertexAttribIPointer
(
i
,
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
element
->
stride
,
element
->
data
.
addr
+
state
->
load_base_vertex_index
*
element
->
stride
));
}
else
{
GL_EXTCALL
(
glVertexAttribPointer
(
i
,
element
->
format
->
gl_vtx_format
,
element
->
format
->
gl_
vtx_type
,
GL_EXTCALL
(
glVertexAttribPointer
(
i
,
format_gl
->
vtx_format
,
format_gl
->
vtx_type
,
!!
(
format_flags
&
WINED3DFMT_FLAG_NORMALISED
),
element
->
stride
,
element
->
data
.
addr
+
state
->
load_base_vertex_index
*
element
->
stride
));
}
...
...
@@ -5419,7 +5431,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
if
(
context
->
numbered_array_mask
&
(
1u
<<
i
))
context_unload_numbered_array
(
context
,
i
);
switch
(
element
->
format
->
id
)
switch
(
format_gl
->
f
.
id
)
{
case
WINED3DFMT_R32_FLOAT
:
GL_EXTCALL
(
glVertexAttrib1fv
(
i
,
(
const
GLfloat
*
)
ptr
));
...
...
dlls/wined3d/utils.c
View file @
62ef7516
...
...
@@ -1925,6 +1925,11 @@ static inline int get_format_idx(enum wined3d_format_id format_id)
return
-
1
;
}
static
struct
wined3d_format_gl
*
wined3d_format_gl_mutable
(
struct
wined3d_format
*
format
)
{
return
CONTAINING_RECORD
(
format
,
struct
wined3d_format_gl
,
f
);
}
static
struct
wined3d_format
*
get_format_by_idx
(
const
struct
wined3d_adapter
*
adapter
,
int
fmt_idx
)
{
return
(
struct
wined3d_format
*
)((
BYTE
*
)
adapter
->
formats
+
fmt_idx
*
adapter
->
format_size
);
...
...
@@ -1944,6 +1949,17 @@ static struct wined3d_format *get_format_internal(const struct wined3d_adapter *
return
get_format_by_idx
(
adapter
,
fmt_idx
);
}
static
struct
wined3d_format_gl
*
get_format_gl_internal
(
const
struct
wined3d_adapter
*
adapter
,
enum
wined3d_format_id
format_id
)
{
struct
wined3d_format
*
format
;
if
((
format
=
get_format_internal
(
adapter
,
format_id
)))
return
wined3d_format_gl_mutable
(
format
);
return
NULL
;
}
static
void
copy_format
(
const
struct
wined3d_adapter
*
adapter
,
struct
wined3d_format
*
dst_format
,
const
struct
wined3d_format
*
src_format
)
{
...
...
@@ -3665,27 +3681,27 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_
static
BOOL
init_format_vertex_info
(
const
struct
wined3d_adapter
*
adapter
,
struct
wined3d_gl_info
*
gl_info
)
{
struct
wined3d_format
*
format
;
struct
wined3d_format
_gl
*
format
;
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
format_vertex_info
);
++
i
)
{
if
(
!
(
format
=
get_format_internal
(
adapter
,
format_vertex_info
[
i
].
id
)))
if
(
!
(
format
=
get_format_
gl_
internal
(
adapter
,
format_vertex_info
[
i
].
id
)))
return
FALSE
;
if
(
!
gl_info
->
supported
[
format_vertex_info
[
i
].
extension
])
continue
;
format
->
emit_idx
=
format_vertex_info
[
i
].
emit_idx
;
format
->
gl_
vtx_type
=
format_vertex_info
[
i
].
gl_vtx_type
;
format
->
gl_vtx_format
=
format
->
component_count
;
format
->
flags
[
WINED3D_GL_RES_TYPE_BUFFER
]
|=
WINED3DFMT_FLAG_VERTEX_ATTRIBUTE
;
format
->
f
.
emit_idx
=
format_vertex_info
[
i
].
emit_idx
;
format
->
vtx_type
=
format_vertex_info
[
i
].
gl_vtx_type
;
format
->
vtx_format
=
format
->
f
.
component_count
;
format
->
f
.
f
lags
[
WINED3D_GL_RES_TYPE_BUFFER
]
|=
WINED3DFMT_FLAG_VERTEX_ATTRIBUTE
;
}
if
(
gl_info
->
supported
[
ARB_VERTEX_ARRAY_BGRA
])
{
format
=
get_format_internal
(
adapter
,
WINED3DFMT_B8G8R8A8_UNORM
);
format
->
gl_
vtx_format
=
GL_BGRA
;
format
=
get_format_
gl_
internal
(
adapter
,
WINED3DFMT_B8G8R8A8_UNORM
);
format
->
vtx_format
=
GL_BGRA
;
}
return
TRUE
;
...
...
@@ -3968,7 +3984,7 @@ BOOL wined3d_adapter_gl_init_format_info(struct wined3d_adapter *adapter, struct
{
struct
wined3d_gl_info
*
gl_info
=
&
adapter
->
gl_info
;
if
(
!
wined3d_adapter_init_format_info
(
adapter
,
sizeof
(
struct
wined3d_format
)))
if
(
!
wined3d_adapter_init_format_info
(
adapter
,
sizeof
(
struct
wined3d_format
_gl
)))
return
FALSE
;
if
(
!
init_format_texture_info
(
adapter
,
gl_info
))
goto
fail
;
...
...
dlls/wined3d/wined3d_private.h
View file @
62ef7516
...
...
@@ -4336,8 +4336,6 @@ struct wined3d_format
UINT
block_byte_count
;
enum
wined3d_ffp_emit_idx
emit_idx
;
GLenum
gl_vtx_type
;
GLint
gl_vtx_format
;
GLint
glInternal
;
GLint
glGammaInternal
;
...
...
@@ -4381,6 +4379,19 @@ const struct wined3d_color_key_conversion * wined3d_format_get_color_key_convers
BOOL
wined3d_formats_are_srgb_variants
(
enum
wined3d_format_id
format1
,
enum
wined3d_format_id
format2
)
DECLSPEC_HIDDEN
;
struct
wined3d_format_gl
{
struct
wined3d_format
f
;
GLenum
vtx_type
;
GLint
vtx_format
;
};
static
inline
const
struct
wined3d_format_gl
*
wined3d_format_gl
(
const
struct
wined3d_format
*
format
)
{
return
CONTAINING_RECORD
(
format
,
struct
wined3d_format_gl
,
f
);
}
BOOL
wined3d_array_reserve
(
void
**
elements
,
SIZE_T
*
capacity
,
SIZE_T
count
,
SIZE_T
size
)
DECLSPEC_HIDDEN
;
static
inline
BOOL
wined3d_format_is_typeless
(
const
struct
wined3d_format
*
format
)
...
...
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