Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
22124bc5
Commit
22124bc5
authored
Sep 17, 2009
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 18, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Add a separate function for buffer initialization.
parent
a8e8f763
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
72 additions
and
61 deletions
+72
-61
buffer.c
dlls/wined3d/buffer.c
+55
-1
device.c
dlls/wined3d/device.c
+15
-59
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-1
No files found.
dlls/wined3d/buffer.c
View file @
22124bc5
...
...
@@ -1035,7 +1035,7 @@ static HRESULT STDMETHODCALLTYPE buffer_GetDesc(IWineD3DBuffer *iface, WINED3DBU
return
WINED3D_OK
;
}
const
struct
IWineD3DBufferVtbl
wined3d_buffer_vtbl
=
static
const
struct
IWineD3DBufferVtbl
wined3d_buffer_vtbl
=
{
/* IUnknown methods */
buffer_QueryInterface
,
...
...
@@ -1058,3 +1058,57 @@ const struct IWineD3DBufferVtbl wined3d_buffer_vtbl =
buffer_Unmap
,
buffer_GetDesc
,
};
HRESULT
buffer_init
(
struct
wined3d_buffer
*
buffer
,
IWineD3DDeviceImpl
*
device
,
UINT
size
,
DWORD
usage
,
WINED3DFORMAT
format
,
WINED3DPOOL
pool
,
GLenum
bind_hint
,
const
char
*
data
,
IUnknown
*
parent
)
{
const
struct
GlPixelFormatDesc
*
format_desc
=
getFormatDescEntry
(
format
,
&
device
->
adapter
->
gl_info
);
HRESULT
hr
;
if
(
!
size
)
{
WARN
(
"Size 0 requested, returning WINED3DERR_INVALIDCALL
\n
"
);
return
WINED3DERR_INVALIDCALL
;
}
buffer
->
vtbl
=
&
wined3d_buffer_vtbl
;
hr
=
resource_init
((
IWineD3DResource
*
)
buffer
,
WINED3DRTYPE_BUFFER
,
device
,
size
,
usage
,
format_desc
,
pool
,
parent
);
if
(
FAILED
(
hr
))
{
WARN
(
"Failed to initialize resource, hr %#x
\n
"
,
hr
);
return
hr
;
}
buffer
->
buffer_type_hint
=
bind_hint
;
TRACE
(
"size %#x, usage %#x, format %s, memory @ %p, iface @ %p.
\n
"
,
buffer
->
resource
.
size
,
buffer
->
resource
.
usage
,
debug_d3dformat
(
buffer
->
resource
.
format_desc
->
format
),
buffer
->
resource
.
allocatedMemory
,
buffer
);
if
(
data
)
{
BYTE
*
ptr
;
hr
=
IWineD3DBuffer_Map
((
IWineD3DBuffer
*
)
buffer
,
0
,
size
,
&
ptr
,
0
);
if
(
FAILED
(
hr
))
{
ERR
(
"Failed to map buffer, hr %#x
\n
"
,
hr
);
buffer_UnLoad
((
IWineD3DBuffer
*
)
buffer
);
resource_cleanup
((
IWineD3DResource
*
)
buffer
);
return
hr
;
}
memcpy
(
ptr
,
data
,
size
);
hr
=
IWineD3DBuffer_Unmap
((
IWineD3DBuffer
*
)
buffer
);
if
(
FAILED
(
hr
))
{
ERR
(
"Failed to unmap buffer, hr %#x
\n
"
,
hr
);
buffer_UnLoad
((
IWineD3DBuffer
*
)
buffer
);
resource_cleanup
((
IWineD3DResource
*
)
buffer
);
return
hr
;
}
}
return
WINED3D_OK
;
}
dlls/wined3d/device.c
View file @
22124bc5
...
...
@@ -446,7 +446,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateBuffer(IWineD3DDevice *iface,
struct
wined3d_buffer_desc
*
desc
,
const
void
*
data
,
IUnknown
*
parent
,
IWineD3DBuffer
**
buffer
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
const
struct
GlPixelFormatDesc
*
format_desc
=
getFormatDescEntry
(
WINED3DFMT_UNKNOWN
,
&
This
->
adapter
->
gl_info
);
struct
wined3d_buffer
*
object
;
HRESULT
hr
;
...
...
@@ -459,48 +458,20 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateBuffer(IWineD3DDevice *iface,
return
E_OUTOFMEMORY
;
}
object
->
vtbl
=
&
wined3d_buffer_vtbl
;
object
->
desc
=
*
desc
;
FIXME
(
"Ignoring access flags (pool)
\n
"
);
hr
=
resource_init
((
IWineD3DResource
*
)
object
,
WINED3DRTYPE_BUFFER
,
This
,
desc
->
byte_width
,
desc
->
usage
,
format_desc
,
WINED3DPOOL_MANAGED
,
parent
);
hr
=
buffer_init
(
object
,
This
,
desc
->
byte_width
,
desc
->
usage
,
WINED3DFMT_UNKNOWN
,
WINED3DPOOL_MANAGED
,
GL_ARRAY_BUFFER_ARB
,
data
,
parent
);
if
(
FAILED
(
hr
))
{
WARN
(
"Failed to initialize
resource, returning %#x
\n
"
,
hr
);
WARN
(
"Failed to initialize
buffer, hr %#x.
\n
"
,
hr
);
HeapFree
(
GetProcessHeap
(),
0
,
object
);
return
hr
;
}
object
->
buffer_type_hint
=
GL_ARRAY_BUFFER_ARB
;
TRACE
(
"Created resource %p
\n
"
,
object
);
TRACE
(
"size %#x, usage=%#x, format %s, memory @ %p, iface @ %p
\n
"
,
object
->
resource
.
size
,
object
->
resource
.
usage
,
debug_d3dformat
(
object
->
resource
.
format_desc
->
format
),
object
->
resource
.
allocatedMemory
,
object
);
if
(
data
)
{
BYTE
*
ptr
;
hr
=
IWineD3DBuffer_Map
((
IWineD3DBuffer
*
)
object
,
0
,
desc
->
byte_width
,
&
ptr
,
0
);
if
(
FAILED
(
hr
))
{
ERR
(
"Failed to map buffer, hr %#x
\n
"
,
hr
);
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
object
);
return
hr
;
}
memcpy
(
ptr
,
data
,
desc
->
byte_width
);
object
->
desc
=
*
desc
;
hr
=
IWineD3DBuffer_Unmap
((
IWineD3DBuffer
*
)
object
);
if
(
FAILED
(
hr
))
{
ERR
(
"Failed to unmap buffer, hr %#x
\n
"
,
hr
);
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
object
);
return
hr
;
}
}
TRACE
(
"Created buffer %p.
\n
"
,
object
);
*
buffer
=
(
IWineD3DBuffer
*
)
object
;
...
...
@@ -511,18 +482,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
DWORD
FVF
,
WINED3DPOOL
Pool
,
IWineD3DBuffer
**
ppVertexBuffer
,
IUnknown
*
parent
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
/* Dummy format for now */
const
struct
GlPixelFormatDesc
*
format_desc
=
getFormatDescEntry
(
WINED3DFMT_VERTEXDATA
,
&
This
->
adapter
->
gl_info
);
struct
wined3d_buffer
*
object
;
int
dxVersion
=
(
(
IWineD3DImpl
*
)
This
->
wineD3D
)
->
dxVersion
;
HRESULT
hr
;
BOOL
conv
;
if
(
Size
==
0
)
{
WARN
(
"Size 0 requested, returning WINED3DERR_INVALIDCALL
\n
"
);
*
ppVertexBuffer
=
NULL
;
return
WINED3DERR_INVALIDCALL
;
}
else
if
(
Pool
==
WINED3DPOOL_SCRATCH
)
{
if
(
Pool
==
WINED3DPOOL_SCRATCH
)
{
/* The d3d9 testsuit shows that this is not allowed. It doesn't make much sense
* anyway, SCRATCH vertex buffers aren't usable anywhere
*/
...
...
@@ -539,20 +505,16 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
return
WINED3DERR_OUTOFVIDEOMEMORY
;
}
object
->
vtbl
=
&
wined3d_buffer_vtbl
;
hr
=
resource_init
((
IWineD3DResource
*
)
object
,
WINED3DRTYPE_BUFFER
,
This
,
Size
,
Usage
,
format_desc
,
Pool
,
parent
);
hr
=
buffer_init
(
object
,
This
,
Size
,
Usage
,
WINED3DFMT_VERTEXDATA
,
Pool
,
GL_ARRAY_BUFFER_ARB
,
NULL
,
parent
);
if
(
FAILED
(
hr
))
{
WARN
(
"Failed to initialize
resource, returning %#x
\n
"
,
hr
);
WARN
(
"Failed to initialize
buffer, hr %#x.
\n
"
,
hr
);
HeapFree
(
GetProcessHeap
(),
0
,
object
);
*
ppVertexBuffer
=
NULL
;
return
hr
;
}
object
->
buffer_type_hint
=
GL_ARRAY_BUFFER_ARB
;
TRACE
(
"(%p) : Created resource %p
\n
"
,
This
,
object
);
TRACE
(
"(%p) : Size=%d, Usage=0x%08x, FVF=%x, Pool=%d - Memory@%p, Iface@%p
\n
"
,
This
,
Size
,
Usage
,
FVF
,
Pool
,
object
->
resource
.
allocatedMemory
,
object
);
TRACE
(
"Created buffer %p.
\n
"
,
object
);
TRACE
(
"FVF %#x, Pool %#x.
\n
"
,
FVF
,
Pool
);
*
ppVertexBuffer
=
(
IWineD3DBuffer
*
)
object
;
/* Observations show that drawStridedSlow is faster on dynamic VBs than converting +
...
...
@@ -589,7 +551,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateIndexBuffer(IWineD3DDevice *iface
UINT
Length
,
DWORD
Usage
,
WINED3DPOOL
Pool
,
IWineD3DBuffer
**
ppIndexBuffer
,
IUnknown
*
parent
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
const
struct
GlPixelFormatDesc
*
format_desc
=
getFormatDescEntry
(
WINED3DFMT_UNKNOWN
,
&
This
->
adapter
->
gl_info
);
struct
wined3d_buffer
*
object
;
HRESULT
hr
;
...
...
@@ -604,25 +565,20 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateIndexBuffer(IWineD3DDevice *iface
return
WINED3DERR_OUTOFVIDEOMEMORY
;
}
object
->
vtbl
=
&
wined3d_buffer_vtbl
;
hr
=
resource_init
((
IWineD3DResource
*
)
object
,
WINED3DRTYPE_BUFFER
,
This
,
Length
,
Usage
,
format_desc
,
Pool
,
parent
);
hr
=
buffer_init
(
object
,
This
,
Length
,
Usage
,
WINED3DFMT_UNKNOWN
,
Pool
,
GL_ELEMENT_ARRAY_BUFFER_ARB
,
NULL
,
parent
);
if
(
FAILED
(
hr
))
{
WARN
(
"Failed to initialize
resource, returning
%#x
\n
"
,
hr
);
WARN
(
"Failed to initialize
buffer, hr
%#x
\n
"
,
hr
);
HeapFree
(
GetProcessHeap
(),
0
,
object
);
*
ppIndexBuffer
=
NULL
;
return
hr
;
}
object
->
buffer_type_hint
=
GL_ELEMENT_ARRAY_BUFFER_ARB
;
TRACE
(
"
(%p) : Created resource %p
\n
"
,
This
,
object
);
TRACE
(
"
Created buffer %p.
\n
"
,
object
);
if
(
Pool
!=
WINED3DPOOL_SYSTEMMEM
&&
!
(
Usage
&
WINED3DUSAGE_DYNAMIC
)
&&
GL_SUPPORT
(
ARB_VERTEX_BUFFER_OBJECT
))
{
object
->
flags
|=
WINED3D_BUFFER_CREATEBO
;
}
TRACE
(
"(%p) : Len=%d, Use=%x, Pool=%d - Memory@%p, Iface@%p
\n
"
,
This
,
Length
,
Usage
,
Pool
,
object
,
object
->
resource
.
allocatedMemory
);
*
ppIndexBuffer
=
(
IWineD3DBuffer
*
)
object
;
return
WINED3D_OK
;
...
...
dlls/wined3d/wined3d_private.h
View file @
22124bc5
...
...
@@ -2439,9 +2439,10 @@ struct wined3d_buffer
UINT
*
conversion_shift
;
/* NULL if no shifted conversion */
};
extern
const
IWineD3DBufferVtbl
wined3d_buffer_vtbl
DECLSPEC_HIDDEN
;
const
BYTE
*
buffer_get_memory
(
IWineD3DBuffer
*
iface
,
UINT
offset
,
GLuint
*
buffer_object
)
DECLSPEC_HIDDEN
;
BYTE
*
buffer_get_sysmem
(
struct
wined3d_buffer
*
This
)
DECLSPEC_HIDDEN
;
HRESULT
buffer_init
(
struct
wined3d_buffer
*
buffer
,
IWineD3DDeviceImpl
*
device
,
UINT
size
,
DWORD
usage
,
WINED3DFORMAT
format
,
WINED3DPOOL
pool
,
GLenum
bind_hint
,
const
char
*
data
,
IUnknown
*
parent
)
DECLSPEC_HIDDEN
;
/* IWineD3DRendertargetView */
struct
wined3d_rendertarget_view
...
...
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