mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
gallium: added support for fixed-point formats, drawing
This commit is contained in:
parent
dc73d15a9a
commit
89e9d6b6db
4 changed files with 37 additions and 3 deletions
|
|
@ -121,6 +121,8 @@ emit_##NAME(const float *attrib, void *ptr) \
|
|||
#define FROM_16_SNORM(i) ((float) ((short *) ptr)[i] / 32767.0f)
|
||||
#define FROM_32_SNORM(i) ((float) ((int *) ptr)[i] / 2147483647.0f)
|
||||
|
||||
#define FROM_32_FIXED(i) (((int *) ptr)[i] / 65536.0)
|
||||
|
||||
#define TO_64_FLOAT(x) ((double) x)
|
||||
#define TO_32_FLOAT(x) (x)
|
||||
|
||||
|
|
@ -140,6 +142,8 @@ emit_##NAME(const float *attrib, void *ptr) \
|
|||
#define TO_16_SNORM(x) ((short) (x * 32767.0f))
|
||||
#define TO_32_SNORM(x) ((int) (x * 2147483647.0f))
|
||||
|
||||
#define TO_32_FIXED(x) ((int) (x * 65536.0f))
|
||||
|
||||
|
||||
|
||||
ATTRIB( R64G64B64A64_FLOAT, 4, double, FROM_64_FLOAT, TO_64_FLOAT )
|
||||
|
|
@ -215,6 +219,11 @@ ATTRIB( R8_SNORM, 1, char, FROM_8_SNORM, TO_8_SNORM )
|
|||
ATTRIB( A8R8G8B8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
|
||||
//ATTRIB( R8G8B8A8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
|
||||
|
||||
ATTRIB( R32G32B32A32_FIXED, 4, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
ATTRIB( R32G32B32_FIXED, 3, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
ATTRIB( R32G32_FIXED, 2, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
ATTRIB( R32_FIXED, 1, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
|
||||
|
||||
|
||||
static void
|
||||
|
|
@ -386,6 +395,15 @@ static fetch_func get_fetch_func( enum pipe_format format )
|
|||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
return &fetch_B8G8R8A8_UNORM;
|
||||
|
||||
case PIPE_FORMAT_R32_FIXED:
|
||||
return &fetch_R32_FIXED;
|
||||
case PIPE_FORMAT_R32G32_FIXED:
|
||||
return &fetch_R32G32_FIXED;
|
||||
case PIPE_FORMAT_R32G32B32_FIXED:
|
||||
return &fetch_R32G32B32_FIXED;
|
||||
case PIPE_FORMAT_R32G32B32A32_FIXED:
|
||||
return &fetch_R32G32B32A32_FIXED;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
return &fetch_NULL;
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ static INLINE uint pf_layout(uint f) /**< PIPE_FORMAT_LAYOUT_ */
|
|||
#define PIPE_FORMAT_TYPE_USCALED 4 /**< uints, not normalized */
|
||||
#define PIPE_FORMAT_TYPE_SSCALED 5 /**< ints, not normalized */
|
||||
#define PIPE_FORMAT_TYPE_SRGB 6 /**< sRGB colorspace */
|
||||
#define PIPE_FORMAT_TYPE_FIXED 7 /**< 16.16 fixed point */
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -353,6 +354,10 @@ enum pipe_format {
|
|||
PIPE_FORMAT_R8G8B8_SSCALED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SSCALED ),
|
||||
PIPE_FORMAT_R8G8B8A8_SSCALED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SSCALED ),
|
||||
PIPE_FORMAT_R8G8B8X8_SSCALED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SSCALED ),
|
||||
PIPE_FORMAT_R32_FIXED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001, 4, 0, 0, 0, PIPE_FORMAT_TYPE_FIXED ),
|
||||
PIPE_FORMAT_R32G32_FIXED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01, 4, 4, 0, 0, PIPE_FORMAT_TYPE_FIXED ),
|
||||
PIPE_FORMAT_R32G32B32_FIXED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1, 4, 4, 4, 0, PIPE_FORMAT_TYPE_FIXED ),
|
||||
PIPE_FORMAT_R32G32B32A32_FIXED = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA, 4, 4, 4, 4, PIPE_FORMAT_TYPE_FIXED ),
|
||||
/* sRGB formats */
|
||||
PIPE_FORMAT_L8_SRGB = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRR1, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SRGB ),
|
||||
PIPE_FORMAT_A8_L8_SRGB = _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRRG, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SRGB ),
|
||||
|
|
|
|||
|
|
@ -1161,7 +1161,8 @@ do_copy_texsubimage(GLcontext *ctx,
|
|||
|
||||
(void) texImage;
|
||||
|
||||
/* XX need this? st_flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);*/
|
||||
/* XX need this?*/
|
||||
st_flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
|
||||
|
||||
/* determine if copying depth or color data */
|
||||
if (baseFormat == GL_DEPTH_COMPONENT) {
|
||||
|
|
|
|||
|
|
@ -147,6 +147,14 @@ static GLuint byte_types_scale[4] = {
|
|||
PIPE_FORMAT_R8G8B8A8_SSCALED
|
||||
};
|
||||
|
||||
static GLuint fixed_types[4] = {
|
||||
PIPE_FORMAT_R32_FIXED,
|
||||
PIPE_FORMAT_R32G32_FIXED,
|
||||
PIPE_FORMAT_R32G32B32_FIXED,
|
||||
PIPE_FORMAT_R32G32B32A32_FIXED
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return a PIPE_FORMAT_x for the given GL datatype and size.
|
||||
|
|
@ -154,8 +162,8 @@ static GLuint byte_types_scale[4] = {
|
|||
static GLuint
|
||||
pipe_vertex_format(GLenum type, GLuint size, GLboolean normalized)
|
||||
{
|
||||
assert(type >= GL_BYTE);
|
||||
assert(type <= GL_DOUBLE);
|
||||
assert((type >= GL_BYTE && type <= GL_DOUBLE) ||
|
||||
type == GL_FIXED);
|
||||
assert(size >= 1);
|
||||
assert(size <= 4);
|
||||
|
||||
|
|
@ -169,6 +177,7 @@ pipe_vertex_format(GLenum type, GLuint size, GLboolean normalized)
|
|||
case GL_UNSIGNED_INT: return uint_types_norm[size-1];
|
||||
case GL_UNSIGNED_SHORT: return ushort_types_norm[size-1];
|
||||
case GL_UNSIGNED_BYTE: return ubyte_types_norm[size-1];
|
||||
case GL_FIXED: return fixed_types[size-1];
|
||||
default: assert(0); return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -182,6 +191,7 @@ pipe_vertex_format(GLenum type, GLuint size, GLboolean normalized)
|
|||
case GL_UNSIGNED_INT: return uint_types_scale[size-1];
|
||||
case GL_UNSIGNED_SHORT: return ushort_types_scale[size-1];
|
||||
case GL_UNSIGNED_BYTE: return ubyte_types_scale[size-1];
|
||||
case GL_FIXED: return fixed_types[size-1];
|
||||
default: assert(0); return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue