]> git.tdb.fi Git - libs/gl.git/commitdiff
Use size_t to store sizes of buffers and such
authorMikko Rasa <tdb@tdb.fi>
Sat, 30 Oct 2021 19:25:15 +0000 (22:25 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 30 Oct 2021 22:28:12 +0000 (01:28 +0300)
Shader reflection data can stick to 32-bit sizes, since SPIR-V's
decorations only take 32-bit operands.

22 files changed:
source/backends/opengl/buffer_backend.cpp
source/backends/opengl/buffer_backend.h
source/core/batch.cpp
source/core/batch.h
source/core/buffer.cpp
source/core/buffer.h
source/core/bufferable.cpp
source/core/bufferable.h
source/core/datatype.h
source/core/mesh.cpp
source/core/mesh.h
source/core/texture.h
source/core/texture1d.h
source/core/texture2d.h
source/core/texture2dmultisample.h
source/core/texture3d.h
source/core/texturecube.h
source/core/uniformblock.cpp
source/core/uniformblock.h
source/core/vertexarray.cpp
source/core/vertexarray.h
source/resources/resource.h

index e1bced73718272f91fd5cfb63642abd51f099c37..a0404e7b143066a479efe1c67f33adb117aa0676 100644 (file)
@@ -33,7 +33,7 @@ OpenGLBuffer::~OpenGLBuffer()
 
 void OpenGLBuffer::allocate()
 {
-       unsigned size = static_cast<const Buffer *>(this)->size;
+       size_t size = static_cast<const Buffer *>(this)->size;
 
        if(ARB_buffer_storage)
        {
@@ -55,7 +55,7 @@ void OpenGLBuffer::allocate()
        }
 }
 
-void OpenGLBuffer::sub_data(unsigned off, unsigned sz, const void *d)
+void OpenGLBuffer::sub_data(size_t off, size_t sz, const void *d)
 {
        if(ARB_direct_state_access)
                glNamedBufferSubData(id, off, sz, d);
@@ -70,7 +70,7 @@ void *OpenGLBuffer::map()
 {
        static Require _req(ARB_map_buffer_range);
 
-       unsigned size = static_cast<const Buffer *>(this)->size;
+       size_t size = static_cast<const Buffer *>(this)->size;
 
        if(ARB_direct_state_access)
                return glMapNamedBufferRange(id, 0, size, GL_MAP_READ_BIT|GL_MAP_WRITE_BIT);
index 5db516fb85b0a4cee8de181ee9ea7224206c8337..f435e868f7c929aac6af96d71302a0c8a79b7cfa 100644 (file)
@@ -21,7 +21,7 @@ protected:
        ~OpenGLBuffer();
 
        void allocate();
-       void sub_data(unsigned, unsigned, const void *);
+       void sub_data(size_t, size_t, const void *);
 
        void *map();
        bool unmap();
index fa28e9564d569267b322f8fead7a0761258b8045..9192b6738c938125058e7e19f2ea4e77e8eae38a 100644 (file)
@@ -167,12 +167,12 @@ void Batch::append_index(unsigned i)
                ::append<uint16_t>(data, i);
 }
 
-unsigned Batch::get_index_size() const
+size_t Batch::get_index_size() const
 {
        return (index_type==UNSIGNED_INT ? sizeof(uint32_t) : sizeof(uint16_t));
 }
 
-unsigned Batch::get_index(unsigned i) const
+unsigned Batch::get_index(size_t i) const
 {
        if(index_type==UNSIGNED_INT)
                return *(uint32_t *)&data[i*sizeof(uint32_t)];
index 9577a542cf2e1c069bca6187a6129d1c0c5a6559..1e0b4c4703e74b09602575b6f3fa206bfc746bdf 100644 (file)
@@ -52,14 +52,14 @@ public:
        Batch &append(const Batch &);
 private:
        void append_index(unsigned);
-       virtual unsigned get_data_size() const { return data.size(); }
+       virtual std::size_t get_data_size() const { return data.size(); }
        virtual const void *get_data_pointer() const { return &data[0]; }
-       virtual unsigned get_alignment() const { return get_index_size(); }
-       unsigned get_index_size() const;
+       virtual std::size_t get_alignment() const { return get_index_size(); }
+       std::size_t get_index_size() const;
 public:
-       unsigned size() const { return data.size()/get_index_size(); }
+       std::size_t size() const { return data.size()/get_index_size(); }
 
-       unsigned get_index(unsigned) const;
+       unsigned get_index(std::size_t) const;
 };
 
 } // namespace GL
index 523b737d32bf696ff3628e48ddd4b6b64e55f428..557e576d2ac929e256646c0a3cdc59bd3887a962 100644 (file)
@@ -8,7 +8,7 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-void Buffer::storage(unsigned sz)
+void Buffer::storage(size_t sz)
 {
        if(size>0)
        {
@@ -29,7 +29,7 @@ void Buffer::data(const void *d)
        return sub_data(0, size, d);
 }
 
-void Buffer::sub_data(unsigned off, unsigned sz, const void *d)
+void Buffer::sub_data(size_t off, size_t sz, const void *d)
 {
        if(size==0)
                throw invalid_operation("Buffer::sub_data");
@@ -37,7 +37,7 @@ void Buffer::sub_data(unsigned off, unsigned sz, const void *d)
        BufferBackend::sub_data(off, sz, d);
 }
 
-void Buffer::require_size(unsigned req_sz) const
+void Buffer::require_size(size_t req_sz) const
 {
        if(size<req_sz)
                throw buffer_too_small(format("buffer has %d bytes; %d required", size, req_sz));
index 2366ec5ce0dd3269ee13db7d80bd53eade0fd565..810bfc1a56253e181f7cc55b5d228c3441e99fee 100644 (file)
@@ -25,12 +25,12 @@ class Buffer: public BufferBackend
        friend BufferBackend;
 
 private:
-       unsigned size = 0;
+       std::size_t size = 0;
 
 public:
        /** Defines the storage size of the buffer.  Must be called before data can
        be uploaded.  Storage cannot be changed once set. */
-       void storage(unsigned);
+       void storage(std::size_t);
 
        /** Uploads data into the buffer, completely replacing any previous
        contents.  Storage must be defined beforehand.  The data must have size
@@ -39,11 +39,11 @@ public:
 
        /** Overwrites part of the buffer data with new data.  Storage must be
        defined beforehand. */
-       void sub_data(unsigned, unsigned, const void *);
+       void sub_data(std::size_t, std::size_t, const void *);
 
-       unsigned get_size() const { return size; }
+       std::size_t get_size() const { return size; }
 
-       void require_size(unsigned) const;
+       void require_size(std::size_t) const;
 
        using BufferBackend::map;
        using BufferBackend::unmap;
index a0ff06c8f25802f782c37b599f583019073cffb6..c312a4339a876f8436877842f44e689aa3f32b7a 100644 (file)
@@ -53,7 +53,7 @@ void Bufferable::change_buffer(Buffer *buf)
        }
 }
 
-unsigned Bufferable::get_required_buffer_size() const
+size_t Bufferable::get_required_buffer_size() const
 {
        const Bufferable *last = this;
        for(; last->next_in_buffer; last=last->next_in_buffer) ;
@@ -77,11 +77,11 @@ void Bufferable::unlink_from_buffer()
 
 void Bufferable::update_offset()
 {
-       unsigned new_offset = 0;
+       size_t new_offset = 0;
        if(prev_in_buffer)
                new_offset = prev_in_buffer->offset+prev_in_buffer->get_data_size();
 
-       unsigned align = get_alignment();
+       size_t align = get_alignment();
        new_offset += align-1;
        new_offset -= new_offset%align;
        if(new_offset!=offset)
@@ -105,7 +105,7 @@ void Bufferable::upload_data(char *target) const
        if(!buffer)
                throw invalid_operation("Bufferable::upload_data");
 
-       unsigned data_size = get_data_size();
+       size_t data_size = get_data_size();
        if(location_dirty)
        {
                buffer->require_size(offset+data_size);
index f1d52fb3ee514602d9452882518cc23fc5bc6c16..60ce307292d900f3d5df4e01b6df412f80e778e5 100644 (file)
@@ -30,7 +30,7 @@ public:
 
 private:
        Buffer *buffer = 0;
-       unsigned offset = 0;
+       std::size_t offset = 0;
        Bufferable *next_in_buffer = 0;
        Bufferable *prev_in_buffer = 0;
        mutable bool location_dirty = false;
@@ -50,7 +50,7 @@ public:
 
        /** Returns the total amount of storage required by this object and others
        in the same chain, including any alignment between objects. */
-       unsigned get_required_buffer_size() const;
+       std::size_t get_required_buffer_size() const;
 
        /** Uploads new data into the buffer if necessary. */
        void refresh() const { if(dirty) upload_data(0); }
@@ -67,7 +67,7 @@ public:
        const Buffer *get_buffer() const { return buffer; }
 
        /** Returns the size of the data, in bytes. */
-       virtual unsigned get_data_size() const = 0;
+       virtual std::size_t get_data_size() const = 0;
 
 protected:
        /** Returns a pointer to the start of data in client memory. */
@@ -75,7 +75,7 @@ protected:
 
        /** Returns the alignment required for the data, in bytes.  The offset is
        guaranteed to be a multiple of this. */
-       virtual unsigned get_alignment() const { return 1; }
+       virtual std::size_t get_alignment() const { return 1; }
 
        /** Updates the offsets for the chain so that data from different objects
        does not overlap.  Should be called if either data size or alignment
@@ -84,7 +84,7 @@ protected:
 
 public:
        /** Returns the offset of the data from the beginning of the buffer. */
-       unsigned get_offset() const { return offset; }
+       std::size_t get_offset() const { return offset; }
 
 private:
        /** Uploads data to the buffer.  Receives pointer to mapped buffer memory as
index 8111dd77f634b341f7c60cab6b1e4fc1533ca727..a03b6bda99162f3dd6a59a8facd52c0886b59775 100644 (file)
@@ -91,7 +91,7 @@ enum DataType
        SAMPLER_CUBE_ARRAY_SHADOW = 0x3C0304
 };
 
-inline unsigned get_type_size(DataType t) { return t&0xFF; }
+inline std::size_t get_type_size(DataType t) { return t&0xFF; }
 inline bool is_float(DataType t) { return t&0x200; }
 inline bool is_matrix(DataType t) { return t&0xC000; }
 inline bool is_vector(DataType t) { return !is_matrix(t) && (t&0x3000); }
index 4679e3a3f43271fe91d9119e615ac30136d3b9a2..ec5bd18cf392e375c36ee49cfcfe9e51050e4d40 100644 (file)
@@ -80,12 +80,12 @@ void Mesh::check_buffers(unsigned mask)
        }
 }
 
-unsigned Mesh::get_n_vertices() const
+size_t Mesh::get_n_vertices() const
 {
        return vertices.size();
 }
 
-char *Mesh::modify_vertex(unsigned i)
+char *Mesh::modify_vertex(size_t i)
 {
        if(vertices.get_format().empty())
                throw invalid_operation("Mesh::modify_vertex");
index 2d56193d14a104ccc3d08bb87fd0a11f5f8bbe11..14b08a964cd59e2889c853cc8230afaa81a97a34 100644 (file)
@@ -89,8 +89,8 @@ public:
        const VertexArray &get_vertices() const { return vertices; }
        const VertexSetup &get_vertex_setup() const { return vtx_setup; }
        const Buffer *get_index_buffer() const { return ibuf; }
-       unsigned get_n_vertices() const;
-       char *modify_vertex(unsigned);
+       std::size_t get_n_vertices() const;
+       char *modify_vertex(std::size_t);
 
        void add_batch(const Batch &b);
        const std::vector<Batch> &get_batches() const { return batches; }
index 154a8c030018f0087e062001ad851c8c8ae77758..c593c0ad5236657ac4f08b45ded75f8c3a144f4b 100644 (file)
@@ -94,7 +94,7 @@ public:
        with the defined storage.  Semantics depend on the type of texture.  */
        virtual void image(const Graphics::Image &, unsigned = 0) = 0;
 
-       virtual std::uint64_t get_data_size() const { return 0; }
+       virtual std::size_t get_data_size() const { return 0; }
 
        using TextureBackend::set_debug_name;
 
index 3823513d8c51c2d201017e39450527e043330826..c4230d3162d08e85d2ae046d94250f22c9a3578a 100644 (file)
@@ -44,7 +44,7 @@ private:
 
 public:
        virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::uint64_t get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual void unload() { }
 };
 
index 6ae600e767acc2c7999d6523eba964db2d542f74..c6654df69222859a0a284c468c9859a737127d8c 100644 (file)
@@ -70,7 +70,7 @@ private:
 
 public:
        virtual Resource::AsyncLoader *load(IO::Seekable &, const Resources * = 0);
-       virtual std::uint64_t get_data_size() const;
+       virtual std::size_t get_data_size() const;
        using Texture2DBackend::unload;
 };
 
index 8c3275c0b3758fcbad92dd2a8c34ec557684c0a4..77f4c542a51c1eba7da3684d56db3a1f98077704 100644 (file)
@@ -25,7 +25,7 @@ public:
        unsigned get_samples() const { return samples; }
 
        virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::uint64_t get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual void unload() { }
 };
 
index 2498c52658e3279a2dc5cfcbff93e00ccbd05984..d791633d3a306ef08607016efe4b956d850f43fa 100644 (file)
@@ -73,7 +73,7 @@ protected:
 
 public:
        virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::uint64_t get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual void unload() { }
 };
 
index e5a0d04f554f6586f5a3552b96c039bb21bccce1..e738ab53beba296520c3d130744a82b8b3e4208c 100644 (file)
@@ -98,7 +98,7 @@ public:
        Vector3 get_texel_direction(TextureCubeFace, unsigned, unsigned);
 
        virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::uint64_t get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual void unload() { }
 };
 
index 18580149ce9f227c7ec00fe94bb573f5059cefcf..89032b5cf3f045e07c42d9a283f8693975a34687 100644 (file)
@@ -12,14 +12,14 @@ UniformBlock::UniformBlock(const ReflectData::UniformBlockInfo &info):
        data(info.data_size)
 { }
 
-unsigned UniformBlock::get_alignment() const
+size_t UniformBlock::get_alignment() const
 {
        return DeviceInfo::get_global().limits.uniform_buffer_alignment;
 }
 
-void UniformBlock::store(const ReflectData::UniformInfo &info, unsigned array_size, const void *value)
+void UniformBlock::store(const ReflectData::UniformInfo &info, size_t array_size, const void *value)
 {
-       array_size = min(array_size, max(info.array_size, 1U));
+       array_size = min(array_size, max<size_t>(info.array_size, 1U));
 
        char *store_ptr;
        bool packed;
index de8b90e4bc5d2d86fd1ebc3749ec59f7ff108066..5e88f0f80de81919ebcc510defaccc6f778e7b47 100644 (file)
@@ -22,13 +22,13 @@ private:
 public:
        UniformBlock(const ReflectData::UniformBlockInfo &);
 
-       virtual unsigned get_data_size() const { return data.size(); }
+       virtual std::size_t get_data_size() const { return data.size(); }
        virtual const void *get_data_pointer() const { return &data[0]; }
 private:
-       virtual unsigned get_alignment() const;
+       virtual std::size_t get_alignment() const;
 
 public:
-       void store(const ReflectData::UniformInfo &, unsigned, const void *);
+       void store(const ReflectData::UniformInfo &, std::size_t, const void *);
 };
 
 } // namespace GL
index 796bef8053c15a346273bd03beaa8c80abe73d74..db88e13cd013176defba7b8663a035e783d7de17 100644 (file)
@@ -24,7 +24,7 @@ void VertexArray::clear()
        data.clear();
 }
 
-void VertexArray::reserve(unsigned n)
+void VertexArray::reserve(size_t n)
 {
        if(format.empty())
                throw invalid_operation("VertexArray::reserve");
@@ -41,7 +41,7 @@ char *VertexArray::append()
        return &*(data.end()-stride);
 }
 
-char *VertexArray::modify(unsigned i)
+char *VertexArray::modify(size_t i)
 {
        if(format.empty())
                throw invalid_operation("VertexArray::modify");
@@ -49,7 +49,7 @@ char *VertexArray::modify(unsigned i)
        return &data[0]+i*stride;
 }
 
-unsigned VertexArray::get_data_size() const
+size_t VertexArray::get_data_size() const
 {
        return data.size();
 }
index d80b2786db4d996f04b74d9514b3baaa1fecbf61..60e035f9a6ad429cef54bee4aaa1832d38fb4e08 100644 (file)
@@ -51,21 +51,21 @@ public:
        void clear();
 
        /// Reserve space for vertices.
-       void reserve(unsigned);
+       void reserve(std::size_t n);
 
        /// Append a new vertex at the end of the array and return its location.
        char *append();
 
        /// Returns the location of a vertex for modification.
-       char *modify(unsigned);
+       char *modify(std::size_t);
 private:
-       virtual unsigned get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual const void *get_data_pointer() const { return &data[0]; }
 
 public:
-       unsigned size() const { return data.size()/stride; }
+       std::size_t size() const { return data.size()/stride; }
        const std::vector<char> &get_data() const { return data; }
-       const char *operator[](unsigned i) const { return &data[0]+i*stride; }
+       const char *operator[](std::size_t i) const { return &data[0]+i*stride; }
 };
 
 } // namespace GL
index 1fdbb3ef3fd906142a92a13b2e1e3ed3add4225f..d763ac442bb528ea9e0af84e9acd056bb7673832 100644 (file)
@@ -41,7 +41,7 @@ public:
 
        /** Returns the amount of graphics memory used by this resource.  The
        returned value must not change while the resource is loaded. */
-       virtual std::uint64_t get_data_size() const = 0;
+       virtual std::size_t get_data_size() const = 0;
 
        virtual void unload() = 0;
 };