1bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 3bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 4bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// you may not use this file except in compliance with the License. 5bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// You may obtain a copy of the License at 6bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 7bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 8bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 9bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 10bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 11bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// See the License for the specific language governing permissions and 13bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// limitations under the License. 14bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi 15bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// IndexDataManager.h: Defines the IndexDataManager, a class that 1603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn// runs the Buffer translation process for index buffers. 1703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#ifndef LIBGL_INDEXDATAMANAGER_H_ 1903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#define LIBGL_INDEXDATAMANAGER_H_ 20ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn 2103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "Context.h" 2203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 2303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#define _GDI32_ 2403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include <windows.h> 2503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include <GL/GL.h> 2603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include <GL/glext.h> 2703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 2803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnnamespace gl 2952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn{ 3052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahnstruct TranslatedIndexData 3252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn{ 3303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn unsigned int minIndex; 3403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn unsigned int maxIndex; 3552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn unsigned int indexOffset; 36bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi 37bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi sw::Resource *indexBuffer; 3852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn}; 3903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 4003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnclass StreamingIndexBuffer 4103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn{ 4203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnpublic: 4303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn StreamingIndexBuffer(unsigned int initialSize); 44ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn virtual ~StreamingIndexBuffer(); 4503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 4603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn void *map(unsigned int requiredSpace, unsigned int *offset); 47ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn void unmap(); 4809176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi void reserveSpace(unsigned int requiredSpace, GLenum type); 49ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn 5003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn sw::Resource *getResource() const; 5103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 52ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahnprivate: 53ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn sw::Resource *mIndexBuffer; 54ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn unsigned int mBufferSize; 55ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn unsigned int mWritePosition; 5609176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi}; 5709176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi 58ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahnclass IndexDataManager 59ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn{ 60ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahnpublic: 6166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi IndexDataManager(); 6266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi virtual ~IndexDataManager(); 6303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 6403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn GLenum prepareIndexData(GLenum type, GLsizei count, Buffer *arrayElementBuffer, const void *indices, TranslatedIndexData *translated); 6503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 6603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn static std::size_t typeSize(GLenum type); 6752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 6852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahnprivate: 69ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn StreamingIndexBuffer *mStreamingBuffer; 70ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn}; 7152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 7252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 7352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 7452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn#endif // LIBGL_INDEXDATAMANAGER_H_ 75ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn