glapi / teximage: implement EGLImageTargetTexStorageEXT
[mesa.git] / src / mesa / main / dd.h
index c80af0be074302cda2ba7698778ca1b8966dc872..72af158dd07cd43aff23a2000768b8cffed39c26 100644 (file)
@@ -31,9 +31,9 @@
 #ifndef DD_INCLUDED
 #define DD_INCLUDED
 
-/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
-
 #include "glheader.h"
+#include "formats.h"
+#include "menums.h"
 
 struct gl_bitmap_atlas;
 struct gl_buffer_object;
@@ -50,7 +50,11 @@ struct gl_shader_program;
 struct gl_texture_image;
 struct gl_texture_object;
 struct gl_memory_info;
+struct gl_transform_feedback_object;
+struct ati_fragment_shader;
 struct util_queue_monitoring;
+struct _mesa_prim;
+struct _mesa_index_buffer;
 
 /* GL_ARB_vertex_buffer_object */
 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
@@ -425,7 +429,8 @@ struct dd_function_table {
                           struct gl_renderbuffer *rb,
                           GLuint x, GLuint y, GLuint w, GLuint h,
                           GLbitfield mode,
-                          GLubyte **mapOut, GLint *rowStrideOut);
+                          GLubyte **mapOut, GLint *rowStrideOut,
+                          bool flip_y);
 
    void (*UnmapRenderbuffer)(struct gl_context *ctx,
                             struct gl_renderbuffer *rb);
@@ -489,6 +494,85 @@ struct dd_function_table {
                            struct gl_shader_program *shader);
    /*@}*/
 
+
+   /**
+    * \name Draw functions.
+    */
+   /*@{*/
+   /**
+    * For indirect array drawing:
+    *
+    *    typedef struct {
+    *       GLuint count;
+    *       GLuint primCount;
+    *       GLuint first;
+    *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
+    *    } DrawArraysIndirectCommand;
+    *
+    * For indirect indexed drawing:
+    *
+    *    typedef struct {
+    *       GLuint count;
+    *       GLuint primCount;
+    *       GLuint firstIndex;
+    *       GLint  baseVertex;
+    *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
+    *    } DrawElementsIndirectCommand;
+    */
+
+   /**
+    * Draw a number of primitives.
+    * \param prims  array [nr_prims] describing what to draw (prim type,
+    *               vertex count, first index, instance count, etc).
+    * \param ib  index buffer for indexed drawing, NULL for array drawing
+    * \param index_bounds_valid  are min_index and max_index valid?
+    * \param min_index  lowest vertex index used
+    * \param max_index  highest vertex index used
+    * \param tfb_vertcount  if non-null, indicates which transform feedback
+    *                       object has the vertex count.
+    * \param tfb_stream  If called via DrawTransformFeedbackStream, specifies
+    *                    the vertex stream buffer from which to get the vertex
+    *                    count.
+    * \param indirect  If any prims are indirect, this specifies the buffer
+    *                  to find the "DrawArrays/ElementsIndirectCommand" data.
+    *                  This may be deprecated in the future
+    */
+   void (*Draw)(struct gl_context *ctx,
+                const struct _mesa_prim *prims, GLuint nr_prims,
+                const struct _mesa_index_buffer *ib,
+                GLboolean index_bounds_valid,
+                GLuint min_index, GLuint max_index,
+                struct gl_transform_feedback_object *tfb_vertcount,
+                unsigned tfb_stream, struct gl_buffer_object *indirect);
+
+
+   /**
+    * Draw a primitive, getting the vertex count, instance count, start
+    * vertex, etc. from a buffer object.
+    * \param mode  GL_POINTS, GL_LINES, GL_TRIANGLE_STRIP, etc.
+    * \param indirect_data  buffer to get "DrawArrays/ElementsIndirectCommand"
+    *                       data
+    * \param indirect_offset  offset of first primitive in indrect_data buffer
+    * \param draw_count  number of primitives to draw
+    * \param stride  stride, in bytes, between
+    *                "DrawArrays/ElementsIndirectCommand" objects
+    * \param indirect_draw_count_buffer  if non-NULL specifies a buffer to get
+    *                                    the real draw_count value.  Used for
+    *                                    GL_ARB_indirect_parameters.
+    * \param indirect_draw_count_offset  offset to the draw_count value in
+    *                                    indirect_draw_count_buffer
+    * \param ib  index buffer for indexed drawing, NULL otherwise.
+    */
+   void (*DrawIndirect)(struct gl_context *ctx, GLuint mode,
+                        struct gl_buffer_object *indirect_data,
+                        GLsizeiptr indirect_offset, unsigned draw_count,
+                        unsigned stride,
+                        struct gl_buffer_object *indirect_draw_count_buffer,
+                        GLsizeiptr indirect_draw_count_offset,
+                        const struct _mesa_index_buffer *ib);
+   /*@}*/
+
+
    /**
     * \name State-changing functions.
     *
@@ -528,9 +612,9 @@ struct dd_function_table {
    /** Specify mapping of depth values from NDC to window coordinates */
    void (*DepthRange)(struct gl_context *ctx);
    /** Specify the current buffer for writing */
-   void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
-   /** Specify the buffers for writing for fragment programs*/
-   void (*DrawBuffers)(struct gl_context *ctx, GLsizei n, const GLenum *buffers);
+   void (*DrawBuffer)(struct gl_context *ctx);
+   /** Used to allocated any buffers with on-demand creation */
+   void (*DrawBufferAllocate)(struct gl_context *ctx);
    /** Enable or disable server-side gl capabilities */
    void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
    /** Specify fog parameters */
@@ -700,9 +784,16 @@ struct dd_function_table {
                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                            GLbitfield mask, GLenum filter);
-   void (*DiscardFramebuffer)(struct gl_context *ctx,
-                              GLenum target, GLsizei numAttachments,
-                              const GLenum *attachments);
+   void (*DiscardFramebuffer)(struct gl_context *ctx, struct gl_framebuffer *fb,
+                              struct gl_renderbuffer_attachment *att);
+
+   /**
+    * \name Functions for GL_ARB_sample_locations
+    */
+   void (*GetProgrammableSampleCaps)(struct gl_context *ctx,
+                                     const struct gl_framebuffer *fb,
+                                     GLuint *bits, GLuint *width, GLuint *height);
+   void (*EvaluateDepthValues)(struct gl_context *ctx);
 
    /**
     * \name Query objects
@@ -883,6 +974,13 @@ struct dd_function_table {
                                             struct gl_renderbuffer *rb,
                                             void *image_handle);
 
+   /**
+    * \name GL_EXT_EGL_image_storage interface
+    */
+   void (*EGLImageTargetTexStorage)(struct gl_context *ctx, GLenum target,
+                                    struct gl_texture_object *texObj,
+                                    struct gl_texture_image *texImage,
+                                    GLeglImageOES image_handle);
    /**
     * \name GL_EXT_transform_feedback interface
     */
@@ -963,15 +1061,15 @@ struct dd_function_table {
    /** @} */
 
    /**
-    * GL_MESA_shader_framebuffer_fetch_non_coherent rendering barrier.
+    * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier.
     *
     * On return from this function any framebuffer contents written by
     * previous draw commands are guaranteed to be visible from subsequent
     * fragment shader invocations using the
-    * MESA_shader_framebuffer_fetch_non_coherent interface.
+    * EXT_shader_framebuffer_fetch_non_coherent interface.
     */
    /** @{ */
-   void (*BlendBarrier)(struct gl_context *ctx);
+   void (*FramebufferFetchBarrier)(struct gl_context *ctx);
    /** @} */
 
    /**
@@ -1127,6 +1225,7 @@ struct dd_function_table {
    void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1);
 
    void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx,
+                                            struct gl_shader_program *shProg,
                                             struct gl_program *prog);
 
    void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx,
@@ -1150,6 +1249,30 @@ struct dd_function_table {
     */
    void (*DeleteSemaphoreObject)(struct gl_context *ctx,
                                  struct gl_semaphore_object *semObj);
+
+   /**
+    * Introduce an operation to wait for the semaphore object in the GL
+    * server's command stream
+    */
+   void (*ServerWaitSemaphoreObject)(struct gl_context *ctx,
+                                     struct gl_semaphore_object *semObj,
+                                     GLuint numBufferBarriers,
+                                     struct gl_buffer_object **bufObjs,
+                                     GLuint numTextureBarriers,
+                                     struct gl_texture_object **texObjs,
+                                     const GLenum *srcLayouts);
+
+   /**
+    * Introduce an operation to signal the semaphore object in the GL
+    * server's command stream
+    */
+   void (*ServerSignalSemaphoreObject)(struct gl_context *ctx,
+                                       struct gl_semaphore_object *semObj,
+                                       GLuint numBufferBarriers,
+                                       struct gl_buffer_object **bufObjs,
+                                       GLuint numTextureBarriers,
+                                       struct gl_texture_object **texObjs,
+                                       const GLenum *dstLayouts);
    /*@}*/
 
    /**
@@ -1167,6 +1290,28 @@ struct dd_function_table {
                                 struct gl_semaphore_object *semObj,
                                 int fd);
    /*@}*/
+
+   /**
+    * \name Disk shader cache functions
+    */
+   /*@{*/
+   /**
+    * Called to initialize gl_program::driver_cache_blob (and size) with a
+    * ralloc allocated buffer.
+    *
+    * This buffer will be saved and restored as part of the gl_program
+    * serialization and deserialization.
+    */
+   void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx,
+                                          struct gl_program *prog);
+   /*@}*/
+
+   /**
+    * \name Set the number of compiler threads for ARB_parallel_shader_compile
+    */
+   void (*SetMaxShaderCompilerThreads)(struct gl_context *ctx, unsigned count);
+   bool (*GetShaderProgramCompletionStatus)(struct gl_context *ctx,
+                                            struct gl_shader_program *shprog);
 };