mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-01 22:50:08 +00:00
wined3d: Introduce WINED3DFMT_FLAG_NORMALISED.
Derived from the component info. Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8ad9f777b8
commit
9781ef76fa
3 changed files with 42 additions and 40 deletions
|
@ -5376,6 +5376,8 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
|
|||
|
||||
if (element->stride)
|
||||
{
|
||||
DWORD format_flags = element->format->flags[WINED3D_GL_RES_TYPE_BUFFER];
|
||||
|
||||
if (current_bo != element->data.buffer_object)
|
||||
{
|
||||
GL_EXTCALL(glBindBuffer(GL_ARRAY_BUFFER, element->data.buffer_object));
|
||||
|
@ -5386,8 +5388,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
|
|||
* pointer. vb can point to a user pointer data blob. In that case
|
||||
* current_bo will be 0. If there is a vertex buffer but no vbo we
|
||||
* won't be load converted attributes anyway. */
|
||||
if (vs && vs->reg_maps.shader_version.major >= 4
|
||||
&& (element->format->flags[WINED3D_GL_RES_TYPE_BUFFER] & WINED3DFMT_FLAG_INTEGER))
|
||||
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,
|
||||
element->stride, element->data.addr + state->load_base_vertex_index * element->stride));
|
||||
|
@ -5395,7 +5396,7 @@ static void context_load_numbered_arrays(struct wined3d_context *context,
|
|||
else
|
||||
{
|
||||
GL_EXTCALL(glVertexAttribPointer(i, element->format->gl_vtx_format, element->format->gl_vtx_type,
|
||||
element->format->gl_normalized, element->stride,
|
||||
!!(format_flags & WINED3DFMT_FLAG_NORMALISED), element->stride,
|
||||
element->data.addr + state->load_base_vertex_index * element->stride));
|
||||
}
|
||||
|
||||
|
|
|
@ -602,47 +602,46 @@ struct wined3d_format_vertex_info
|
|||
enum wined3d_ffp_emit_idx emit_idx;
|
||||
unsigned int component_count;
|
||||
GLenum gl_vtx_type;
|
||||
GLboolean gl_normalized;
|
||||
enum wined3d_gl_extension extension;
|
||||
};
|
||||
|
||||
static const struct wined3d_format_vertex_info format_vertex_info[] =
|
||||
{
|
||||
{WINED3DFMT_R32_FLOAT, WINED3D_FFP_EMIT_FLOAT1, 1, GL_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32_FLOAT, WINED3D_FFP_EMIT_FLOAT2, 2, GL_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32B32_FLOAT, WINED3D_FFP_EMIT_FLOAT3, 3, GL_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32B32A32_FLOAT, WINED3D_FFP_EMIT_FLOAT4, 4, GL_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_B8G8R8A8_UNORM, WINED3D_FFP_EMIT_D3DCOLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE },
|
||||
{WINED3DFMT_R8G8B8A8_UINT, WINED3D_FFP_EMIT_UBYTE4, 4, GL_UNSIGNED_BYTE, GL_FALSE},
|
||||
{WINED3DFMT_R16G16_UINT, WINED3D_FFP_EMIT_INVALID, 2, GL_UNSIGNED_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R16G16_SINT, WINED3D_FFP_EMIT_SHORT2, 2, GL_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R16G16B16A16_SINT, WINED3D_FFP_EMIT_SHORT4, 4, GL_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R8G8B8A8_UNORM, WINED3D_FFP_EMIT_UBYTE4N, 4, GL_UNSIGNED_BYTE, GL_TRUE },
|
||||
{WINED3DFMT_R16G16_SNORM, WINED3D_FFP_EMIT_SHORT2N, 2, GL_SHORT, GL_TRUE },
|
||||
{WINED3DFMT_R16G16B16A16_SNORM, WINED3D_FFP_EMIT_SHORT4N, 4, GL_SHORT, GL_TRUE },
|
||||
{WINED3DFMT_R16G16_UNORM, WINED3D_FFP_EMIT_USHORT2N, 2, GL_UNSIGNED_SHORT, GL_TRUE },
|
||||
{WINED3DFMT_R16G16B16A16_UNORM, WINED3D_FFP_EMIT_USHORT4N, 4, GL_UNSIGNED_SHORT, GL_TRUE },
|
||||
{WINED3DFMT_R10G10B10X2_UINT, WINED3D_FFP_EMIT_UDEC3, 3, GL_UNSIGNED_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R10G10B10X2_SNORM, WINED3D_FFP_EMIT_DEC3N, 3, GL_SHORT, GL_TRUE },
|
||||
{WINED3DFMT_R10G10B10A2_UNORM, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_INT_2_10_10_10_REV, GL_TRUE,
|
||||
{WINED3DFMT_R32_FLOAT, WINED3D_FFP_EMIT_FLOAT1, 1, GL_FLOAT},
|
||||
{WINED3DFMT_R32G32_FLOAT, WINED3D_FFP_EMIT_FLOAT2, 2, GL_FLOAT},
|
||||
{WINED3DFMT_R32G32B32_FLOAT, WINED3D_FFP_EMIT_FLOAT3, 3, GL_FLOAT},
|
||||
{WINED3DFMT_R32G32B32A32_FLOAT, WINED3D_FFP_EMIT_FLOAT4, 4, GL_FLOAT},
|
||||
{WINED3DFMT_B8G8R8A8_UNORM, WINED3D_FFP_EMIT_D3DCOLOR, 4, GL_UNSIGNED_BYTE},
|
||||
{WINED3DFMT_R8G8B8A8_UINT, WINED3D_FFP_EMIT_UBYTE4, 4, GL_UNSIGNED_BYTE},
|
||||
{WINED3DFMT_R16G16_UINT, WINED3D_FFP_EMIT_INVALID, 2, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R16G16_SINT, WINED3D_FFP_EMIT_SHORT2, 2, GL_SHORT},
|
||||
{WINED3DFMT_R16G16B16A16_SINT, WINED3D_FFP_EMIT_SHORT4, 4, GL_SHORT},
|
||||
{WINED3DFMT_R8G8B8A8_UNORM, WINED3D_FFP_EMIT_UBYTE4N, 4, GL_UNSIGNED_BYTE},
|
||||
{WINED3DFMT_R16G16_SNORM, WINED3D_FFP_EMIT_SHORT2N, 2, GL_SHORT},
|
||||
{WINED3DFMT_R16G16B16A16_SNORM, WINED3D_FFP_EMIT_SHORT4N, 4, GL_SHORT},
|
||||
{WINED3DFMT_R16G16_UNORM, WINED3D_FFP_EMIT_USHORT2N, 2, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R16G16B16A16_UNORM, WINED3D_FFP_EMIT_USHORT4N, 4, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R10G10B10X2_UINT, WINED3D_FFP_EMIT_UDEC3, 3, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R10G10B10X2_SNORM, WINED3D_FFP_EMIT_DEC3N, 3, GL_SHORT},
|
||||
{WINED3DFMT_R10G10B10A2_UNORM, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_INT_2_10_10_10_REV,
|
||||
ARB_VERTEX_TYPE_2_10_10_10_REV},
|
||||
{WINED3DFMT_R16G16_FLOAT, WINED3D_FFP_EMIT_FLOAT16_2, 2, GL_HALF_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_R16G16B16A16_FLOAT, WINED3D_FFP_EMIT_FLOAT16_4, 4, GL_HALF_FLOAT, GL_FALSE},
|
||||
{WINED3DFMT_R8G8B8A8_SNORM, WINED3D_FFP_EMIT_INVALID, 4, GL_BYTE, GL_TRUE },
|
||||
{WINED3DFMT_R8G8B8A8_SINT, WINED3D_FFP_EMIT_INVALID, 4, GL_BYTE, GL_FALSE},
|
||||
{WINED3DFMT_R16G16B16A16_UINT, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R8_UNORM, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_BYTE, GL_TRUE},
|
||||
{WINED3DFMT_R8_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_BYTE, GL_FALSE},
|
||||
{WINED3DFMT_R8_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_BYTE, GL_FALSE},
|
||||
{WINED3DFMT_R16_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R16_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_SHORT, GL_FALSE},
|
||||
{WINED3DFMT_R32_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32_UINT, WINED3D_FFP_EMIT_INVALID, 2, GL_UNSIGNED_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32_SINT, WINED3D_FFP_EMIT_INVALID, 2, GL_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32B32_UINT, WINED3D_FFP_EMIT_INVALID, 3, GL_UNSIGNED_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32B32A32_UINT, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_INT, GL_FALSE},
|
||||
{WINED3DFMT_R32G32B32A32_SINT, WINED3D_FFP_EMIT_INVALID, 4, GL_INT, GL_FALSE},
|
||||
{WINED3DFMT_R16G16_FLOAT, WINED3D_FFP_EMIT_FLOAT16_2, 2, GL_HALF_FLOAT},
|
||||
{WINED3DFMT_R16G16B16A16_FLOAT, WINED3D_FFP_EMIT_FLOAT16_4, 4, GL_HALF_FLOAT},
|
||||
{WINED3DFMT_R8G8B8A8_SNORM, WINED3D_FFP_EMIT_INVALID, 4, GL_BYTE},
|
||||
{WINED3DFMT_R8G8B8A8_SINT, WINED3D_FFP_EMIT_INVALID, 4, GL_BYTE},
|
||||
{WINED3DFMT_R16G16B16A16_UINT, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R8_UNORM, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_BYTE},
|
||||
{WINED3DFMT_R8_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_BYTE},
|
||||
{WINED3DFMT_R8_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_BYTE},
|
||||
{WINED3DFMT_R16_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_SHORT},
|
||||
{WINED3DFMT_R16_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_SHORT},
|
||||
{WINED3DFMT_R32_UINT, WINED3D_FFP_EMIT_INVALID, 1, GL_UNSIGNED_INT},
|
||||
{WINED3DFMT_R32_SINT, WINED3D_FFP_EMIT_INVALID, 1, GL_INT},
|
||||
{WINED3DFMT_R32G32_UINT, WINED3D_FFP_EMIT_INVALID, 2, GL_UNSIGNED_INT},
|
||||
{WINED3DFMT_R32G32_SINT, WINED3D_FFP_EMIT_INVALID, 2, GL_INT},
|
||||
{WINED3DFMT_R32G32B32_UINT, WINED3D_FFP_EMIT_INVALID, 3, GL_UNSIGNED_INT},
|
||||
{WINED3DFMT_R32G32B32A32_UINT, WINED3D_FFP_EMIT_INVALID, 4, GL_UNSIGNED_INT},
|
||||
{WINED3DFMT_R32G32B32A32_SINT, WINED3D_FFP_EMIT_INVALID, 4, GL_INT},
|
||||
};
|
||||
|
||||
struct wined3d_format_texture_info
|
||||
|
@ -2067,6 +2066,9 @@ static BOOL init_format_base_info(struct wined3d_adapter *adapter)
|
|||
for (j = 0; j < strlen(typed_formats[i].channels); ++j)
|
||||
{
|
||||
enum wined3d_channel_type channel_type = map_channel_type(typed_formats[i].channels[j]);
|
||||
|
||||
if (channel_type == WINED3D_CHANNEL_TYPE_UNORM || channel_type == WINED3D_CHANNEL_TYPE_SNORM)
|
||||
flags |= WINED3DFMT_FLAG_NORMALISED;
|
||||
if (channel_type == WINED3D_CHANNEL_TYPE_UINT || channel_type == WINED3D_CHANNEL_TYPE_SINT)
|
||||
flags |= WINED3DFMT_FLAG_INTEGER;
|
||||
if (channel_type == WINED3D_CHANNEL_TYPE_FLOAT)
|
||||
|
@ -3684,7 +3686,6 @@ static BOOL init_format_vertex_info(const struct wined3d_adapter *adapter,
|
|||
format->component_count = format_vertex_info[i].component_count;
|
||||
format->gl_vtx_type = format_vertex_info[i].gl_vtx_type;
|
||||
format->gl_vtx_format = format_vertex_info[i].component_count;
|
||||
format->gl_normalized = format_vertex_info[i].gl_normalized;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -4306,6 +4306,7 @@ extern enum wined3d_format_id pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN
|
|||
#define WINED3DFMT_FLAG_BLOCKS_NO_VERIFY 0x00100000
|
||||
#define WINED3DFMT_FLAG_INTEGER 0x00200000
|
||||
#define WINED3DFMT_FLAG_GEN_MIPMAP 0x00400000
|
||||
#define WINED3DFMT_FLAG_NORMALISED 0x00800000
|
||||
|
||||
struct wined3d_rational
|
||||
{
|
||||
|
@ -4345,7 +4346,6 @@ struct wined3d_format
|
|||
GLint component_count;
|
||||
GLenum gl_vtx_type;
|
||||
GLint gl_vtx_format;
|
||||
GLboolean gl_normalized;
|
||||
|
||||
GLint glInternal;
|
||||
GLint glGammaInternal;
|
||||
|
|
Loading…
Reference in a new issue