intel: move some driver functions around

A step toward consolidating i915/intel_state.c and i965/intel_state.c
This commit is contained in:
Brian Paul 2009-01-26 16:33:45 -07:00
parent 72ee0e247d
commit 84c8b5bbf9
4 changed files with 95 additions and 82 deletions

View file

@ -301,6 +301,74 @@ i915DepthMask(GLcontext * ctx, GLboolean flag)
i915->state.Ctx[I915_CTXREG_LIS6] &= ~S6_DEPTH_WRITE_ENABLE;
}
/**
* Update the viewport transformation matrix. Depends on:
* - viewport pos/size
* - depthrange
* - window pos/size or FBO size
*/
static void
intelCalcViewport(GLcontext * ctx)
{
struct intel_context *intel = intel_context(ctx);
const GLfloat *v = ctx->Viewport._WindowMap.m;
const GLfloat depthScale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
GLfloat *m = intel->ViewportMatrix.m;
GLfloat yScale, yBias;
if (ctx->DrawBuffer->Name) {
/* User created FBO */
struct intel_renderbuffer *irb
= intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0]);
if (irb && !irb->RenderToTexture) {
/* y=0=top */
yScale = -1.0;
yBias = irb->Base.Height;
}
else {
/* y=0=bottom */
yScale = 1.0;
yBias = 0.0;
}
}
else {
/* window buffer, y=0=top */
yScale = -1.0;
yBias = (intel->driDrawable) ? intel->driDrawable->h : 0.0F;
}
m[MAT_SX] = v[MAT_SX];
m[MAT_TX] = v[MAT_TX];
m[MAT_SY] = v[MAT_SY] * yScale;
m[MAT_TY] = v[MAT_TY] * yScale + yBias;
m[MAT_SZ] = v[MAT_SZ] * depthScale;
m[MAT_TZ] = v[MAT_TZ] * depthScale;
}
/** Called from ctx->Driver.Viewport() */
static void
intelViewport(GLcontext * ctx,
GLint x, GLint y, GLsizei width, GLsizei height)
{
intelCalcViewport(ctx);
intel_viewport(ctx, x, y, width, height);
}
/** Called from ctx->Driver.DepthRange() */
static void
intelDepthRange(GLcontext * ctx, GLclampd nearval, GLclampd farval)
{
intelCalcViewport(ctx);
}
/* =============================================================
* Polygon stipple
*
@ -964,6 +1032,8 @@ i915InitStateFunctions(struct dd_function_table *functions)
functions->StencilFuncSeparate = i915StencilFuncSeparate;
functions->StencilMaskSeparate = i915StencilMaskSeparate;
functions->StencilOpSeparate = i915StencilOpSeparate;
functions->DepthRange = intelDepthRange;
functions->Viewport = intelViewport;
}

View file

@ -35,7 +35,6 @@
#include "intel_screen.h"
#include "intel_context.h"
#include "intel_fbo.h"
#include "intel_regions.h"
#include "swrast/swrast.h"
@ -216,67 +215,6 @@ intelClearColor(GLcontext * ctx, const GLfloat color[4])
}
/**
* Update the viewport transformation matrix. Depends on:
* - viewport pos/size
* - depthrange
* - window pos/size or FBO size
*/
static void
intelCalcViewport(GLcontext * ctx)
{
struct intel_context *intel = intel_context(ctx);
const GLfloat *v = ctx->Viewport._WindowMap.m;
const GLfloat depthScale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
GLfloat *m = intel->ViewportMatrix.m;
GLfloat yScale, yBias;
if (ctx->DrawBuffer->Name) {
/* User created FBO */
struct intel_renderbuffer *irb
= intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0]);
if (irb && !irb->RenderToTexture) {
/* y=0=top */
yScale = -1.0;
yBias = irb->Base.Height;
}
else {
/* y=0=bottom */
yScale = 1.0;
yBias = 0.0;
}
}
else {
/* window buffer, y=0=top */
yScale = -1.0;
yBias = (intel->driDrawable) ? intel->driDrawable->h : 0.0F;
}
m[MAT_SX] = v[MAT_SX];
m[MAT_TX] = v[MAT_TX];
m[MAT_SY] = v[MAT_SY] * yScale;
m[MAT_TY] = v[MAT_TY] * yScale + yBias;
m[MAT_SZ] = v[MAT_SZ] * depthScale;
m[MAT_TZ] = v[MAT_TZ] * depthScale;
}
static void
intelViewport(GLcontext * ctx,
GLint x, GLint y, GLsizei width, GLsizei height)
{
intelCalcViewport(ctx);
intel_viewport(ctx, x, y, width, height);
}
static void
intelDepthRange(GLcontext * ctx, GLclampd nearval, GLclampd farval)
{
intelCalcViewport(ctx);
}
/* Fallback to swrast for select and feedback.
*/
static void
@ -291,7 +229,5 @@ void
intelInitStateFuncs(struct dd_function_table *functions)
{
functions->RenderMode = intelRenderMode;
functions->Viewport = intelViewport;
functions->DepthRange = intelDepthRange;
functions->ClearColor = intelClearColor;
}

View file

@ -38,7 +38,8 @@
#include "intel_regions.h"
#include "swrast/swrast.h"
int intel_translate_shadow_compare_func( GLenum func )
int
intel_translate_shadow_compare_func( GLenum func )
{
switch(func) {
case GL_NEVER:
@ -63,7 +64,8 @@ int intel_translate_shadow_compare_func( GLenum func )
return COMPAREFUNC_NEVER;
}
int intel_translate_compare_func( GLenum func )
int
intel_translate_compare_func( GLenum func )
{
switch(func) {
case GL_NEVER:
@ -88,7 +90,8 @@ int intel_translate_compare_func( GLenum func )
return COMPAREFUNC_ALWAYS;
}
int intel_translate_stencil_op( GLenum op )
int
intel_translate_stencil_op( GLenum op )
{
switch(op) {
case GL_KEEP:
@ -112,7 +115,8 @@ int intel_translate_stencil_op( GLenum op )
}
}
int intel_translate_blend_factor( GLenum factor )
int
intel_translate_blend_factor( GLenum factor )
{
switch(factor) {
case GL_ZERO:
@ -151,7 +155,8 @@ int intel_translate_blend_factor( GLenum factor )
return BLENDFACT_ZERO;
}
int intel_translate_logic_op( GLenum opcode )
int
intel_translate_logic_op( GLenum opcode )
{
switch(opcode) {
case GL_CLEAR:
@ -192,33 +197,36 @@ int intel_translate_logic_op( GLenum opcode )
}
static void intelClearColor(GLcontext *ctx, const GLfloat color[4])
static void
intelClearColor(GLcontext *ctx, const GLfloat color[4])
{
struct intel_context *intel = intel_context(ctx);
GLubyte clear[4];
UNCLAMPED_FLOAT_TO_RGBA_CHAN(intel->clear_chan, color);
CLAMPED_FLOAT_TO_UBYTE(clear[0], color[0]);
CLAMPED_FLOAT_TO_UBYTE(clear[1], color[1]);
CLAMPED_FLOAT_TO_UBYTE(clear[2], color[2]);
CLAMPED_FLOAT_TO_UBYTE(clear[3], color[3]);
intel->ClearColor8888 = INTEL_PACKCOLOR8888(intel->clear_chan[0],
intel->clear_chan[1],
intel->clear_chan[2],
intel->clear_chan[3]);
intel->ClearColor565 = INTEL_PACKCOLOR565(intel->clear_chan[0],
intel->clear_chan[1],
intel->clear_chan[2]);
/* compute both 32 and 16-bit clear values */
intel->ClearColor8888 = INTEL_PACKCOLOR8888(clear[0], clear[1],
clear[2], clear[3]);
intel->ClearColor565 = INTEL_PACKCOLOR565(clear[0], clear[1], clear[2]);
}
/* Fallback to swrast for select and feedback.
*/
static void intelRenderMode( GLcontext *ctx, GLenum mode )
static void
intelRenderMode( GLcontext *ctx, GLenum mode )
{
struct intel_context *intel = intel_context(ctx);
FALLBACK( intel, INTEL_FALLBACK_RENDERMODE, (mode != GL_RENDER) );
}
void intelInitStateFuncs( struct dd_function_table *functions )
void
intelInitStateFuncs( struct dd_function_table *functions )
{
functions->RenderMode = intelRenderMode;
functions->ClearColor = intelClearColor;

View file

@ -210,7 +210,6 @@ struct intel_context
char *prevLockFile;
int prevLockLine;
GLubyte clear_chan[4];
GLuint ClearColor565;
GLuint ClearColor8888;