summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2014-01-24 15:41:08 +0100
committerdegasus <wickmarkus@web.de>2014-01-31 07:19:34 +0100
commita65162f1cd345b8f206fd01e19ac261d09ac291b (patch)
tree4f90d9cb21c73d88715653d16afcc62090257460 /Source/Core
parent6c59b691b0247f4a56ff17d7cf134364b258a6c5 (diff)
PortableVertexFormat: use AttributeFormat for posmtx attribute format
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoBackends/D3D/NativeVertexFormat.cpp7
-rw-r--r--Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp5
-rw-r--r--Source/Core/VideoCommon/NativeVertexFormat.h3
-rw-r--r--Source/Core/VideoCommon/VertexLoader.cpp10
-rw-r--r--Source/Core/VideoCommon/VertexShaderGen.cpp7
5 files changed, 13 insertions, 19 deletions
diff --git a/Source/Core/VideoBackends/D3D/NativeVertexFormat.cpp b/Source/Core/VideoBackends/D3D/NativeVertexFormat.cpp
index 24dc6ce575..824778d238 100644
--- a/Source/Core/VideoBackends/D3D/NativeVertexFormat.cpp
+++ b/Source/Core/VideoBackends/D3D/NativeVertexFormat.cpp
@@ -114,11 +114,12 @@ void D3DVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl)
}
}
- if (_vtx_decl.posmtx_offset != -1)
+ format = &_vtx_decl.posmtx;
+ if (format->enable)
{
m_elems[m_num_elems].SemanticName = "BLENDINDICES";
- m_elems[m_num_elems].AlignedByteOffset = _vtx_decl.posmtx_offset;
- m_elems[m_num_elems].Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ m_elems[m_num_elems].AlignedByteOffset = format->offset;
+ m_elems[m_num_elems].Format = VarToD3D(format->type, format->components, format->integer);
m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
++m_num_elems;
}
diff --git a/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp b/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp
index 97b0b7a7a2..4f3f2ad0d7 100644
--- a/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp
+++ b/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp
@@ -86,10 +86,7 @@ void GLVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl)
SetPointer(SHADER_TEXTURE0_ATTRIB+i, vertex_stride, vtx_decl.texcoords[i]);
}
- if (vtx_decl.posmtx_offset != -1) {
- glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB);
- glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (u8*)NULL + vtx_decl.posmtx_offset);
- }
+ SetPointer(SHADER_POSMTX_ATTRIB, vertex_stride, vtx_decl.posmtx);
vm->m_last_vao = VAO;
}
diff --git a/Source/Core/VideoCommon/NativeVertexFormat.h b/Source/Core/VideoCommon/NativeVertexFormat.h
index 5ed868ee73..8b41ecdd04 100644
--- a/Source/Core/VideoCommon/NativeVertexFormat.h
+++ b/Source/Core/VideoCommon/NativeVertexFormat.h
@@ -89,8 +89,7 @@ struct PortableVertexDeclaration
AttributeFormat normals[3];
AttributeFormat colors[2];
AttributeFormat texcoords[8];
-
- int posmtx_offset;
+ AttributeFormat posmtx;
};
// The implementation of this class is specific for GL/DX, so NativeVertexFormat.cpp
diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp
index 3e3a020eb4..99e5541c0d 100644
--- a/Source/Core/VideoCommon/VertexLoader.cpp
+++ b/Source/Core/VideoCommon/VertexLoader.cpp
@@ -756,13 +756,13 @@ void VertexLoader::CompileVertexTranslator()
if (m_VtxDesc.PosMatIdx)
{
WriteCall(PosMtx_Write);
- vtx_decl.posmtx_offset = nat_offset;
+ vtx_decl.posmtx.components = 4;
+ vtx_decl.posmtx.enable = true;
+ vtx_decl.posmtx.offset = nat_offset;
+ vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE;
+ vtx_decl.posmtx.integer = false;
nat_offset += 4;
}
- else
- {
- vtx_decl.posmtx_offset = -1;
- }
native_stride = nat_offset;
vtx_decl.stride = native_stride;
diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp
index 78d54492ac..57742889eb 100644
--- a/Source/Core/VideoCommon/VertexShaderGen.cpp
+++ b/Source/Core/VideoCommon/VertexShaderGen.cpp
@@ -168,7 +168,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
out.Write(" float%d tex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i);
}
if (components & VB_HAS_POSMTXIDX)
- out.Write(" float4 blend_indices : BLENDINDICES,\n");
+ out.Write(" float4 fposmtx : BLENDINDICES,\n");
out.Write(" float4 rawpos : POSITION) {\n");
}
out.Write("VS_OUTPUT o;\n");
@@ -176,10 +176,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
// transforms
if (components & VB_HAS_POSMTXIDX)
{
- if (api_type == API_D3D)
- out.Write("int posmtx = blend_indices.x * 255.0;\n"); // TODO: Ugly, should use an integer instead
- else
- out.Write("int posmtx = int(fposmtx);\n");
+ out.Write("int posmtx = int(fposmtx * 255.0);\n"); // TODO: Ugly, should use an integer instead
if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) )
{