mirror of https://gitlab.freedesktop.org/mesa/mesa
255 lines
8.2 KiB
C
255 lines
8.2 KiB
C
/**
|
|
* \file dd.h
|
|
* Device driver interfaces.
|
|
*/
|
|
|
|
/*
|
|
* Mesa 3-D graphics library
|
|
*
|
|
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included
|
|
* in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
|
|
#ifndef DD_INCLUDED
|
|
#define DD_INCLUDED
|
|
|
|
#include "util/glheader.h"
|
|
#include "formats.h"
|
|
#include "menums.h"
|
|
#include "compiler/shader_enums.h"
|
|
|
|
#if defined(_WIN32) && defined(_WINDOWS_)
|
|
#error "Should not include <windows.h> here"
|
|
#endif
|
|
|
|
struct gl_buffer_object;
|
|
struct gl_context;
|
|
struct gl_display_list;
|
|
struct gl_framebuffer;
|
|
struct gl_image_unit;
|
|
struct gl_pixelstore_attrib;
|
|
struct gl_program;
|
|
struct gl_renderbuffer;
|
|
struct gl_renderbuffer_attachment;
|
|
struct gl_shader;
|
|
struct gl_shader_program;
|
|
struct gl_texture_image;
|
|
struct gl_texture_object;
|
|
struct gl_memory_info;
|
|
struct gl_memory_object;
|
|
struct gl_query_object;
|
|
struct gl_sampler_object;
|
|
struct gl_transform_feedback_object;
|
|
struct gl_vertex_array_object;
|
|
struct ati_fragment_shader;
|
|
struct util_queue_monitoring;
|
|
struct pipe_draw_info;
|
|
struct pipe_draw_indirect_info;
|
|
struct pipe_draw_start_count_bias;
|
|
struct pipe_vertex_state;
|
|
struct pipe_draw_vertex_state_info;
|
|
struct pipe_vertex_buffer;
|
|
struct pipe_vertex_element;
|
|
|
|
/* GL_ARB_vertex_buffer_object */
|
|
/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
|
|
* NULL) if buffer is unavailable for immediate mapping.
|
|
*
|
|
* Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it
|
|
* would require more book-keeping in the driver than seems necessary
|
|
* at this point.
|
|
*
|
|
* Does GL_MAP_INVALIDATE_BUFFER_BIT do this? Not really -- we don't
|
|
* want to provoke the driver to throw away the old storage, we will
|
|
* respect the contents of already referenced data.
|
|
*/
|
|
#define MESA_MAP_NOWAIT_BIT 0x4000
|
|
|
|
/* Mapping a buffer is allowed from any thread. */
|
|
#define MESA_MAP_THREAD_SAFE_BIT 0x8000
|
|
|
|
/* This buffer will only be mapped/unmapped once */
|
|
#define MESA_MAP_ONCE 0x10000
|
|
|
|
/* This BufferStorage flag indicates that the buffer will be used
|
|
* by pipe_vertex_state, which doesn't track buffer busyness and doesn't
|
|
* support invalidations.
|
|
*/
|
|
#define MESA_GALLIUM_VERTEX_STATE_STORAGE 0x20000
|
|
|
|
|
|
/**
|
|
* Device driver function table.
|
|
* Core Mesa uses these function pointers to call into device drivers.
|
|
* Most of these functions directly correspond to OpenGL state commands.
|
|
* Core Mesa will call these functions after error checking has been done
|
|
* so that the drivers don't have to worry about error testing.
|
|
*
|
|
* Vertex transformation/clipping/lighting is patched into the T&L module.
|
|
* Rasterization functions are patched into the swrast module.
|
|
*
|
|
* Note: when new functions are added here, the drivers/common/driverfuncs.c
|
|
* file should be updated too!!!
|
|
*/
|
|
struct dd_function_table {
|
|
/**
|
|
* \name Vertex/fragment program functions
|
|
*/
|
|
/** Allocate a new program */
|
|
struct gl_program * (*NewProgram)(struct gl_context *ctx,
|
|
gl_shader_stage stage,
|
|
GLuint id, bool is_arb_asm);
|
|
/**
|
|
* \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;
|
|
*/
|
|
|
|
/**
|
|
* The basic draw function used to implement glDrawArrays, glDrawElements,
|
|
* multidraws, and instancing.
|
|
*
|
|
* The interface is identical to pipe_context::draw_vbo.
|
|
*/
|
|
void (*DrawGallium)(struct gl_context *ctx,
|
|
const struct pipe_draw_info *info,
|
|
unsigned drawid_offset,
|
|
const struct pipe_draw_indirect_info *indirect,
|
|
const struct pipe_draw_start_count_bias *draws,
|
|
unsigned num_draws);
|
|
|
|
/**
|
|
* Same as DrawGallium, but mode can also change between draws.
|
|
*
|
|
* "info" is not const and the following fields can be changed by
|
|
* the callee in addition to the fields listed by DrawGallium:
|
|
* - info->mode
|
|
*
|
|
* This function exists to decrease complexity of DrawGallium.
|
|
*/
|
|
void (*DrawGalliumMultiMode)(struct gl_context *ctx,
|
|
struct pipe_draw_info *info,
|
|
const struct pipe_draw_start_count_bias *draws,
|
|
const unsigned char *mode,
|
|
unsigned num_draws);
|
|
/*@}*/
|
|
|
|
/**
|
|
* \name Support for multiple T&L engines
|
|
*/
|
|
/*@{*/
|
|
|
|
/**
|
|
* Set by the driver-supplied T&L engine.
|
|
*
|
|
* Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
|
|
*/
|
|
GLuint CurrentExecPrimitive;
|
|
|
|
/**
|
|
* Current glBegin state of an in-progress compilation. May be
|
|
* GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
|
|
* or PRIM_UNKNOWN.
|
|
*/
|
|
GLuint CurrentSavePrimitive;
|
|
|
|
|
|
#define FLUSH_STORED_VERTICES 0x1
|
|
#define FLUSH_UPDATE_CURRENT 0x2
|
|
/**
|
|
* Set by the driver-supplied T&L engine whenever vertices are buffered
|
|
* between glBegin()/glEnd() objects or __struct gl_contextRec::Current
|
|
* is not updated. A bitmask of the FLUSH_x values above.
|
|
*
|
|
* The dd_function_table::FlushVertices call below may be used to resolve
|
|
* these conditions.
|
|
*/
|
|
GLbitfield NeedFlush;
|
|
|
|
/** Need to call vbo_save_SaveFlushVertices() upon state change? */
|
|
GLboolean SaveNeedFlush;
|
|
|
|
/**@}*/
|
|
|
|
/**
|
|
* Query reset status for GL_ARB_robustness
|
|
*
|
|
* Per \c glGetGraphicsResetStatusARB, this function should return a
|
|
* non-zero value once after a reset. If a reset is non-atomic, the
|
|
* non-zero status should be returned for the duration of the reset.
|
|
*/
|
|
GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx);
|
|
|
|
/**
|
|
* \name GL_ARB_get_program_binary
|
|
*/
|
|
/*@{*/
|
|
/**
|
|
* Calls to retrieve/store a binary serialized copy of the current program.
|
|
*/
|
|
void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx,
|
|
struct gl_shader_program *shProg,
|
|
struct gl_program *prog);
|
|
|
|
void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx,
|
|
struct gl_shader_program *shProg,
|
|
struct gl_program *prog);
|
|
/*@}*/
|
|
|
|
/**
|
|
* \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);
|
|
/*@}*/
|
|
|
|
GLboolean (*ValidateEGLImage)(struct gl_context *ctx, GLeglImageOES image_handle);
|
|
};
|
|
|
|
#endif /* DD_INCLUDED */
|