intel: Add spans code for the ARB_texture_rg support.
This starts spantmp2.h down the path of using MESA_FORMAT_* for specifying the format instead of the crazy GL format/type combo.
This commit is contained in:
parent
a7e2d64971
commit
28bab24e16
|
@ -48,6 +48,15 @@
|
|||
#define HW_WRITE_CLIPLOOP() HW_CLIPLOOP()
|
||||
#endif
|
||||
|
||||
#ifdef SPANTMP_MESA_FMT
|
||||
#define SPANTMP_PIXEL_FMT GL_NONE
|
||||
#define SPANTMP_PIXEL_TYPE GL_NONE
|
||||
#endif
|
||||
|
||||
#ifndef SPANTMP_MESA_FMT
|
||||
#define SPANTMP_MESA_FMT MESA_FORMAT_COUNT
|
||||
#endif
|
||||
|
||||
#if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)
|
||||
|
||||
/**
|
||||
|
@ -445,6 +454,118 @@
|
|||
rgba[3] = p; \
|
||||
} while (0)
|
||||
|
||||
#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R8)
|
||||
|
||||
#ifndef GET_VALUE
|
||||
#ifndef GET_PTR
|
||||
#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y))
|
||||
#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v)
|
||||
#endif /* GET_VALUE */
|
||||
|
||||
# define INIT_MONO_PIXEL(p, color) \
|
||||
p = color[0]
|
||||
|
||||
# define WRITE_RGBA(_x, _y, r, g, b, a) \
|
||||
PUT_VALUE(_x, _y, r)
|
||||
|
||||
#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
|
||||
|
||||
#define READ_RGBA( rgba, _x, _y ) \
|
||||
do { \
|
||||
GLubyte p = GET_VALUE(_x, _y); \
|
||||
rgba[0] = p; \
|
||||
rgba[1] = 0; \
|
||||
rgba[2] = 0; \
|
||||
rgba[3] = 0; \
|
||||
} while (0)
|
||||
|
||||
#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG88)
|
||||
|
||||
#ifndef GET_VALUE
|
||||
#ifndef GET_PTR
|
||||
#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
|
||||
#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
|
||||
#endif /* GET_VALUE */
|
||||
|
||||
# define INIT_MONO_PIXEL(p, color) \
|
||||
PACK_COLOR_8888(color[0], color[1], 0, 0)
|
||||
|
||||
# define WRITE_RGBA(_x, _y, r, g, b, a) \
|
||||
PUT_VALUE(_x, _y, r)
|
||||
|
||||
#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
|
||||
|
||||
#define READ_RGBA( rgba, _x, _y ) \
|
||||
do { \
|
||||
GLushort p = GET_VALUE(_x, _y); \
|
||||
rgba[0] = p & 0xff; \
|
||||
rgba[1] = (p >> 8) & 0xff; \
|
||||
rgba[2] = 0; \
|
||||
rgba[3] = 0; \
|
||||
} while (0)
|
||||
|
||||
#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R16)
|
||||
|
||||
#ifndef GET_VALUE
|
||||
#ifndef GET_PTR
|
||||
#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
|
||||
#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
|
||||
#endif /* GET_VALUE */
|
||||
|
||||
# define INIT_MONO_PIXEL(p, color) \
|
||||
p = color[0]
|
||||
|
||||
# define WRITE_RGBA(_x, _y, r, g, b, a) \
|
||||
PUT_VALUE(_x, _y, r)
|
||||
|
||||
#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
|
||||
|
||||
#define READ_RGBA( rgba, _x, _y ) \
|
||||
do { \
|
||||
GLushort p = GET_VALUE(_x, _y); \
|
||||
rgba[0] = p; \
|
||||
rgba[1] = 0; \
|
||||
rgba[2] = 0; \
|
||||
rgba[3] = 0; \
|
||||
} while (0)
|
||||
|
||||
#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG1616)
|
||||
|
||||
#ifndef GET_VALUE
|
||||
#ifndef GET_PTR
|
||||
#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
|
||||
#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
|
||||
#endif /* GET_VALUE */
|
||||
|
||||
# define INIT_MONO_PIXEL(p, color) \
|
||||
((color[1] << 16) | (color[0]))
|
||||
|
||||
# define WRITE_RGBA(_x, _y, r, g, b, a) \
|
||||
PUT_VALUE(_x, _y, r)
|
||||
|
||||
#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
|
||||
|
||||
#define READ_RGBA( rgba, _x, _y ) \
|
||||
do { \
|
||||
GLuint p = GET_VALUE(_x, _y); \
|
||||
rgba[0] = p & 0xffff; \
|
||||
rgba[1] = (p >> 16) & 0xffff; \
|
||||
rgba[2] = 0; \
|
||||
rgba[3] = 0; \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
#error SPANTMP_PIXEL_FMT must be set to a valid value!
|
||||
#endif
|
||||
|
@ -914,3 +1035,4 @@ static void TAG(InitPointers)(struct gl_renderbuffer *rb)
|
|||
#undef GET_PTR
|
||||
#undef SPANTMP_PIXEL_FMT
|
||||
#undef SPANTMP_PIXEL_TYPE
|
||||
#undef SPANTMP_MESA_FMT
|
||||
|
|
|
@ -113,6 +113,26 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
#define TAG2(x,y) intel_##x##y##_A8
|
||||
#include "spantmp2.h"
|
||||
|
||||
#define SPANTMP_MESA_FMT MESA_FORMAT_R8
|
||||
#define TAG(x) intel_##x##_R8
|
||||
#define TAG2(x,y) intel_##x##y##_R8
|
||||
#include "spantmp2.h"
|
||||
|
||||
#define SPANTMP_MESA_FMT MESA_FORMAT_RG88
|
||||
#define TAG(x) intel_##x##_RG88
|
||||
#define TAG2(x,y) intel_##x##y##_RG88
|
||||
#include "spantmp2.h"
|
||||
|
||||
#define SPANTMP_MESA_FMT MESA_FORMAT_R16
|
||||
#define TAG(x) intel_##x##_R16
|
||||
#define TAG2(x,y) intel_##x##y##_R16
|
||||
#include "spantmp2.h"
|
||||
|
||||
#define SPANTMP_MESA_FMT MESA_FORMAT_RG1616
|
||||
#define TAG(x) intel_##x##_RG1616
|
||||
#define TAG2(x,y) intel_##x##y##_RG1616
|
||||
#include "spantmp2.h"
|
||||
|
||||
#define LOCAL_DEPTH_VARS \
|
||||
struct intel_renderbuffer *irb = intel_renderbuffer(rb); \
|
||||
const GLint yScale = rb->Name ? 1 : -1; \
|
||||
|
@ -376,6 +396,18 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
case MESA_FORMAT_S8_Z24:
|
||||
intel_InitDepthPointers_z24_s8(rb);
|
||||
break;
|
||||
case MESA_FORMAT_R8:
|
||||
intel_InitPointers_R8(rb);
|
||||
break;
|
||||
case MESA_FORMAT_RG88:
|
||||
intel_InitPointers_RG88(rb);
|
||||
break;
|
||||
case MESA_FORMAT_R16:
|
||||
intel_InitPointers_R16(rb);
|
||||
break;
|
||||
case MESA_FORMAT_RG1616:
|
||||
intel_InitPointers_RG1616(rb);
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL,
|
||||
"Unexpected MesaFormat %d in intelSetSpanFunctions",
|
||||
|
|
Loading…
Reference in New Issue