summaryrefslogtreecommitdiffstats
path: root/Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h')
-rw-r--r--Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h b/Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h
new file mode 100644
index 0000000..6068dd6
--- /dev/null
+++ b/Source/ThirdParty/ANGLE/src/libGLESv2/geometry/dx9.h
@@ -0,0 +1,137 @@
+//
+// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// geometry/dx9.h: Direct3D 9-based implementation of BufferBackEnd, TranslatedVertexBuffer and TranslatedIndexBuffer.
+
+#ifndef LIBGLESV2_GEOMETRY_DX9_H_
+#define LIBGLESV2_GEOMETRY_DX9_H_
+
+#include <d3d9.h>
+
+#include "libGLESv2/Buffer.h"
+#include "libGLESv2/geometry/backend.h"
+
+namespace gl
+{
+
+class Dx9BackEnd : public BufferBackEnd
+{
+ public:
+ explicit Dx9BackEnd(Context *context, IDirect3DDevice9 *d3ddevice);
+ ~Dx9BackEnd();
+
+ virtual bool supportIntIndices();
+
+ virtual TranslatedVertexBuffer *createVertexBuffer(std::size_t size);
+ virtual TranslatedVertexBuffer *createVertexBufferForStrideZero(std::size_t size);
+ virtual TranslatedIndexBuffer *createIndexBuffer(std::size_t size, GLenum type);
+ virtual FormatConverter getFormatConverter(GLenum type, std::size_t size, bool normalize);
+
+ virtual bool validateStream(GLenum type, std::size_t size, std::size_t stride, std::size_t offset) const;
+
+ virtual GLenum setupIndicesPreDraw(const TranslatedIndexData &indexInfo);
+ virtual GLenum setupAttributesPreDraw(const TranslatedAttribute *attributes);
+
+ private:
+ IDirect3DDevice9 *mDevice;
+
+ bool mUseInstancingForStrideZero;
+ bool mSupportIntIndices;
+
+ bool mAppliedAttribEnabled[MAX_VERTEX_ATTRIBS];
+
+ enum StreamFrequency
+ {
+ STREAM_FREQUENCY_UNINSTANCED = 0,
+ STREAM_FREQUENCY_INDEXED,
+ STREAM_FREQUENCY_INSTANCED
+ };
+
+ StreamFrequency mStreamFrequency[MAX_VERTEX_ATTRIBS+1];
+
+ struct TranslationInfo
+ {
+ FormatConverter formatConverter;
+ D3DDECLTYPE d3dDeclType;
+ };
+
+ enum { NUM_GL_VERTEX_ATTRIB_TYPES = 6 };
+
+ TranslationInfo mAttributeTypes[NUM_GL_VERTEX_ATTRIB_TYPES][2][4]; // [GL types as enumerated by typeIndex()][normalized][size-1]
+
+ struct TranslationDescription
+ {
+ DWORD capsFlag;
+ TranslationInfo preferredConversion;
+ TranslationInfo fallbackConversion;
+ };
+
+ // This table is used to generate mAttributeTypes.
+ static const TranslationDescription mPossibleTranslations[NUM_GL_VERTEX_ATTRIB_TYPES][2][4]; // [GL types as enumerated by typeIndex()][normalized][size-1]
+
+ void checkVertexCaps(DWORD declTypes);
+
+ unsigned int typeIndex(GLenum type) const;
+
+ class Dx9VertexBuffer : public TranslatedVertexBuffer
+ {
+ public:
+ Dx9VertexBuffer(IDirect3DDevice9 *device, std::size_t size);
+ virtual ~Dx9VertexBuffer();
+
+ IDirect3DVertexBuffer9 *getBuffer() const;
+
+ protected:
+ Dx9VertexBuffer(IDirect3DDevice9 *device, std::size_t size, DWORD usageFlags);
+
+ virtual void *map();
+ virtual void unmap();
+
+ virtual void recycle();
+ virtual void *streamingMap(std::size_t offset, std::size_t size);
+
+ private:
+ IDirect3DVertexBuffer9 *mVertexBuffer;
+ };
+
+ class Dx9VertexBufferZeroStrideWorkaround : public Dx9VertexBuffer
+ {
+ public:
+ Dx9VertexBufferZeroStrideWorkaround(IDirect3DDevice9 *device, std::size_t size);
+
+ protected:
+ virtual void recycle();
+ virtual void *streamingMap(std::size_t offset, std::size_t size);
+ };
+
+ class Dx9IndexBuffer : public TranslatedIndexBuffer
+ {
+ public:
+ Dx9IndexBuffer(IDirect3DDevice9 *device, std::size_t size, GLenum type);
+ virtual ~Dx9IndexBuffer();
+
+ IDirect3DIndexBuffer9 *getBuffer() const;
+
+ protected:
+ virtual void *map();
+ virtual void unmap();
+
+ virtual void recycle();
+ virtual void *streamingMap(std::size_t offset, std::size_t size);
+
+ private:
+ IDirect3DIndexBuffer9 *mIndexBuffer;
+ };
+
+ IDirect3DVertexBuffer9 *getDxBuffer(TranslatedVertexBuffer *vb) const;
+ IDirect3DIndexBuffer9 *getDxBuffer(TranslatedIndexBuffer *ib) const;
+
+ D3DDECLTYPE mapAttributeType(GLenum type, std::size_t size, bool normalized) const;
+};
+
+}
+
+#endif // LIBGLESV2_GEOMETRY_DX9_H_